[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