Re: improving the utility and adapter lookup APIs

Tres Seaver <[email protected]>
Newsgroups gmane.comp.web.zope.devel
Message-ID <[email protected]>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Brian Sutherland wrote:
> On Wed, Nov 25, 2009 at 05:17:17PM +0100, Thomas Lotze wrote:
>> What about a simple and consistent API for all components including
>> utilities, adapters and multiadapters:
>>
>> IFoo()
>> IFoo(x)
>> IFoo(x, y)
> 
> This also doesn't allow you to use this (anti?)pattern:
> 
> class Foo:
> 
>     implements(IFoo)
> 
>     def do_something(self):
>         # custom behaviour here
>         default_foo_adapter = getAdapter(self, IFoo)
>         return default_foo_adapter.do_something() # fallback to default behaviour
> 
> It may not be very theoretically correct, but it's something I find very
> useful when writing IPublishTraverse implementing classes for
> zope.publisher to traverse over. It saves me from having to inherit from
> the default traverser.

Hmm, I may be missing something here, but if Foo implements IFoo, then
the getAdapter lookup for it will short circuit, leading you into
infinite recursion.  Except that it doesn't::

  $ bin/virtualenv-2.6 --no-site-packages /tmp/brian
  ...
  $ cd /tmp/brian
  $ bin/easy_install zope.component
  ...
  $ bin/python
  >>> from zope.interface import Interface
  >>> from zope.interface import implements
  >>> class IFoo(Interface):
  ...     pass
  ...
  >>> from zope.component import getAdapter
  >>> class Foo:
  ...     implements(IFoo)
  ...
  >>> foo = Foo()
  >>> IFoo(foo) is foo
  True
  >>> getAdapter(foo, IFoo) is foo
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ...
  zope.component.interfaces.ComponentLookupError: (<__main__.Foo
    instance at 0xb7d0690c>, <InterfaceClass __main__.IFoo>, u'')

which strikes me as wildly disjoint:  the IFoo behavior is "expected"
(short-circuit the lookup if the object already provides the interface),
while the getAdapter behavior is a puzzlement.


Tres.
- --
===================================================================
Tres Seaver          +1 540-429-0999          [email protected]
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

iEYEARECAAYFAksNmQIACgkQ+gerLs4ltQ7vgQCgyJqce5aMgNksSziaz8oBis1x
ZpUAoKcVmJxbIY0gHw4L39wxaV1jbW9T
=E7Cn
-----END PGP SIGNATURE-----

_______________________________________________
Zope-Dev maillist  -  [email protected]
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.