Philipp von Weitershausen wrote:
Chris Withers wrote:
Chris Withers wrote:
Jean-Marc Orliaguet wrote:
once you have that utility / adapter you should be able to call it like:


  converter = getAdapterFor(123, type=IToStringConverter)
  strResult = converter.convert(123)

Not quite, what I'm looking to do is more along the lines of:

mystr = getAdapter(123,str)

OK, less talk, more do... and when I stop worrying about it, it all gets very easy:

 >>> from zope.component import provideAdapter
 >>> provideAdapter(str,(int,),str)
 >>> from zope.component import getAdapter
 >>> getAdapter(123,str)
'123'

Yay! That's _exactly_ what I want.

And that's exactly what I meant -- and wrote about half way up the thread. :)

Anyway, now all excited, I tried this:

 >>> def to_date(value):
...   try:
...     return DateTime(value)
...   except:
...     return None
...
 >>> provideAdapter(to_date,(str,int),DateTime)

This registers a multi adapter for (a_string, an_integer), like views are multi-adapters for (context, request). You want to say:

  >>> provideAdapter(to_date, (str,), DateTime)
  >>> provideAdapter(to_date, (int,), DateTime)


OK, but adaptation doesn't provide anything special here since "int" and "str" are not sufficiently typed, or formatted, so the adapter has to do all the guessing logic anyway, and there is no fundamental difference between 123456898374 as date representation and '2006-11-16', or 061116

you might as well write a method that does that:

def to_date(value):

   if isinstance(value, int):
       ...
   else if isinstance(value, basestring):
       ...

this is why usually you don't adapt str or int, unless you're interested in tracing nasty bugs?

/JM


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

Reply via email to