[Zope-dev] Interfaces vs ZCA concepts

Tres Seaver tseaver at palladion.com
Wed Dec 16 16:48:06 EST 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Martijn Faassen wrote:
> Thomas Lotze wrote:
>> Martijn Faassen wrote:
>>> * have dummy implementations in zope.interface that raise
>>> NotImplementedError
>> That would still introduce too many zope.component concepts into
>> zope.interface IMO: obviously that of utilities as one of the dummy
>> methods would bear that name, and those of named components and lookup
>> contexts if the methods were to be specified by IInterface.
> 
> I think having these markers is very important for code readability. 
> People reading the code will otherwise have no idea whatsoever where 
> these methods come from.
> 
> I'm not sure whether much of a general mechanism is really needed, after 
> all we already have monkey patching (um, sorry Tres, modifying a class). 
> I can see there being an API in zope.interface that allows one to plug 
> into .utility() and .adapt()

I don't see any win for the "generic" extensions either:  we already
know *exactly* what two methods we want to use, and have no use cases at
all for adding any others.

>>> * have that NotImplementedError say to look for implementations in
>>> zope.component
>> I would actually like a mechanism that doesn't care about what package
>> will inject which pieces of API. Do you think such generality is asking
>> too much (at least at this point in time)?
> 
> I think it will be less clear compared to the methods being there and 
> saying they're injection points intended to be overwritten.

- -1 to any docstring / exception method which points outside the
zope.itnerface package.  There is a perfectly reasonable "default"
implementation anyway (in the absence of any hooks):

- - IFoo.adapt(context) raises LookupError, unless the context
  provides IFoo, in which case it returns context.

- - IFoo.adapt(context, default=default) returns default unless context
  provides IFoo, in which case it returns context.

- - IFoo.utility() raises LookupError.

- - IFoo.utility(default=default) returns default

I would much rather keep a "hook registration" API in the interface
class for these methods than obscure their origin semantics via a monkey
patch.

>>> Did you make an implicit 'default' deprecated on __call__ yet by the way?
>> Not yet; the other issue looked more interesting so far ;o) BTW, that
>> parameter isn't even called 'default' but 'alternate' in
>> Interface.__call__. The very name of the default argument is another thing
>> that is sneaking from zope.component into zope.component.
> 
> Let's deprecate 'alternate' and introduce 'default' then. Might actually 
> make the deprecation more easy..

Note that Interface.__call__ is not documented at all as an API::

 $ grep __call__ src/zope/interface/interfaces.py
 $

I think we should just rename the argument without any deprecation.


Tres.
- --
===================================================================
Tres Seaver          +1 540-429-0999          tseaver at palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkspVZYACgkQ+gerLs4ltQ52fACcC3Pd8uGvTzjkKwmTX97PrQaf
oxkAoLoA1lRxpPA6HpQYQtifxQBM8sbF
=jebA
-----END PGP SIGNATURE-----



More information about the Zope-Dev mailing list