[Zope3-dev] Re: Can an adapter find out what name it was registered for?

Tres Seaver tseaver at palladion.com
Mon Nov 27 22:11:28 EST 2006


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

Chris Withers wrote:
> Stephan Richter wrote:
>> On Friday 17 November 2006 03:43, Chris Withers wrote:
>>> What do you suggest I do when the adapter needs to know the name it was
>>> registered for?
>> You can make the name part of the adapter API.
> 
> Not sure what you mean by this?
> 
>> However, I would suggest revising the design; I have never come across a 
>> scenario where I wanted the name of the adapter be known within the adapter. 
>> This seems to be a recipe for trouble. 
> 
> I don't think it'll be a common pattern, but it doesn't feel right to me 
> that a named adapter (ie: one registered with a specific name) has no 
> way of finding out what name it has been registered with...

The classic pattern here would be to create the "guts" of your adapter
as a class, and then curry the "factory" part which governs
instantiation of the class.  You could double-curry the factory, as
well, if you wanted to avoid the class.  E.g.:

  class MyNamedAdapter(object):
      def __init__(self, context, name):
          self.context = context
          self.name = name

      def causeBrowToSweat(self):
          return 'Sweating: %s' % self.name

  def MNA_factory_maker(name):
      def _curried(context, name=name):
          return MyNamedAdapter(context, name)
      return _curried

  for name in ('vindaloo', 'madras', 'tiki_masala'):
       globals()[name] = MNA_factory_maker(name)

and then in ZCML:

   <adapter for=".interfaces.IChicken"
            provides=".interfaces.ICurry"
            name="vindaloo"
            factory=".adapters.vindaloo" />


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

iD8DBQFFa6jg+gerLs4ltQ4RAoSlAJwJvyp3gWfI72Pt+t2wiE5ozPFQxQCfWxwU
yVagPjfHMhjbK7wfeDghjI8=
=7BoL
-----END PGP SIGNATURE-----



More information about the Zope3-dev mailing list