Hash: SHA1

Chris Withers wrote:
> Tres Seaver wrote:
>> We were discussion a (notional) "value adapter", whose factory would
>> have the contract of returning an object of a specific concrete type,
>> rather than on implementing an interface.
> Right, but the CA supports the use of classes instead of interfaces and 
> that works just fine here...
>> There are reasonable usecases
>> for such adapters, but the CA machinery doesn't permit registering them:
>>  it requires that the 'provided' argument be either an interface or None
>> (although the 'required' args can be concrete types).
> Nah, for both "provides" and "adapts" classes can be used in place of 
> interfaces just fine, and I've got this working just how I want it now :-)

This doctest blows up on my machine when run against the Zope3 trunk:

  >>> from zope.component import getAdapter
  >>> from zope.component import provideAdapter
  >>> from zope.interface import Interface
  >>> from zope.interface import implements
  >>> class IFoo(Interface):
  ...     pass
  >>> class Foo(object):
  ...     implements(IFoo)
  >>> foo = Foo()
  >>> def get_a(x):
  ...     return 'a'
  >>> def get_b(x):
  ...     return 'b'
  >>> provideAdapter(get_a, adapts=(IFoo,), provides=str, name='a')
  >>> provideAdapter(get_b, adapts=(IFoo,), provides=str, name='b')
  >>> getAdapter(object=foo, interface=str, name='a')
  >>> getAdapter(object=foo, interface=str, name='b')

The first 'provideAdapter' call raises an exeption because 'str' doesn't
have an '__iro__'.  The second *doesn't* raise, because the code which
raised the first exception leaves an artifact in a module global.

Bot lookups fail with 'ComponentLookupError'.

- --
Tres Seaver          +1 202-558-7113          [EMAIL PROTECTED]
Palladion Software   "Excellence by Design"    http://palladion.com
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

Zope3-dev mailing list
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com

Reply via email to