[Zope-dev] implementing zope.component 4.0

Shane Hathaway shane at hathawaymix.org
Mon Nov 30 13:16:35 EST 2009


Martijn Faassen wrote:
> Given some feedback about backwards compatibility, I'm leaning to the 
> following adjusted scenario:
> 
> * allow IFoo((a, b)) for multi adaptation. This breaks tuple adaptation. 
> It's not as pretty as IFoo(a, b), but it's pretty tolerable and it *is* 
> actually symmetric with registration.
> 
> * deprecate a non-explicit default such as IFoo(a, default), require 
> IFoo(a, default=default)

While this short spelling of component lookup is attractive and sensible 
for Zopistas, I wonder if it ever really was the best idea.  When a 
developer encounters the IFoo() pattern for the first time, what is 
he/she going to type into a search engine to find out what it means?  I 
can't think of any search phrase that is likely to give a good answer.

JQuery has a similar issue, but because JQuery is a smaller framework, 
the JQuery folks simply put that info right near the top of their 
documentation.  I'm not sure we can do that quite as effectively.

For an alternate spelling, consider what happens when component lookup 
fails: you get a ComponentLookupError.  "Lookup" is interesting.  It 
doesn't yet have any meaning in zope.interface, so I think using a 
method named lookup() would make code more comprehensible.  You would 
use it like this:

 >>> IFoo.lookup(a)
<SomeAdapter instance at ...>
 >>> IFoo.lookup(a, b)
<SomeMultiAdapter instance at ...>
 >>> IFoo.lookup(c)
Traceback...
ComponentLookupError(...)
 >>> IFoo.lookup(c, default='missing')
'missing'
 >>> IMyUtility.lookup()
<MyUtility instance at ...>

When developers encounter this for the first time, they might type 
"zope.interface lookup" in a search engine.  That phrase has a 
reasonable chance of hitting good documentation.

What do you think?

If adding lookup() is a good idea, then all we need to do is add 
lookup() to zope.interface 3.x and deprecate the 2nd parameter of 
IFoo().  After that, we can let multi-year evolution dictate whether 
IFoo() should be deprecated altogether.

Shane



More information about the Zope-Dev mailing list