[Zope-dev] Interfaces vs ZCA concepts

Tres Seaver tseaver at palladion.com
Tue Dec 15 17:32:57 EST 2009


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

Leonardo Rochael Almeida wrote:
> Funny you should mention this, I've got this idea bugging for a few
> weeks now, after the last thread:
> 
> Have the zope.interface package expose a single overridable hook:
> 
> def getInterfaceAttribute(iface, name, default):
> 
> This method would be called by any attempt to look up an interface
> attribute that isn't provided by zope.interface itself. For example:
> 
>   IFoo.adapter(bar, default=baz)
> 
>   Would be the almost the same as:
> 
>   getInterfaceAttribute(IFoo, 'adapter', default=somemarker)(bar, default=baz)
> 
> That is unless getInterfaceAttribute(IFoo, 'adapter') returned the
> passed-in marker which would instruct zope.interface to raise an
> AttributeError instead.
> 
> In turn, "zope.component" could then provide a getInterfaceAttribute()
> implementation that called:
> 
>   getAdapter(IFoo, interface=IInterfaceMethod, name='adapter')
> 
> Yes, the first parameter above is the original interface. The
> IInterfaceMethod is an interface defining __call__(*args, **kw)
> 
> This idea would also allow one to define named adapters for
> IInterfaceMethod to, for instance, "__call__" or "__add__", such that
> the semantics of "IFoo(...)" or "IFoo + IBar" could also be changed.
> 
> Perhaps entry points could be used to provide getInterfaceAttribute
> implementations, and if multiple entry points are present, each would
> be called in turn to attempt to provide the attributes of an
> interface, but maybe this is too much flexibility...
> 
> Just an idea...

I had originally contemplated replacing the current adapter hook with a
more generic hook: the __call__ of interface would delegate to this hook
for its semantics.

Given that the choice to use __call__ is not widely enough accepted, I
think something like your solution makes sense.  I'm not sure that
hooking __getattr__ is going to be performant enough, but a similar
mechanism probably could be made fast enough.


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

iEYEARECAAYFAksoDpQACgkQ+gerLs4ltQ4LkACgxb9GzzGU7RAnj9rTEhJMVnJ9
iVwAniefCS8HXGyEiSxG7V7fYWJISsrZ
=bmx9
-----END PGP SIGNATURE-----



More information about the Zope-Dev mailing list