[Zope3-Users] To Subclass, or to Adapt?

Dominik Huber dominik.huber at perse.ch
Mon Aug 15 04:46:02 EDT 2005


James Allwyn wrote:

>Thanks Stephan and Dominik for all the help so far.
>I've decided to go down the route Stephan suggested,
>since I was more able to get my head around it.
>
>I've got a question about adapters / ZPT:
>
>* Is is possible to access the output of an adapter
>directly from ZPT?
>  
>
There was such a proposal:
http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/TALESPathExpressionAdapters

IMO only the IPathAdapter is implemented yet, but I'm not shure. I never 
used those features...

>My adapter provides a method getRating. I've used the
>following to get it to also provide this as a
>property:
>
>rating = property(getRating)
>
>which seems to work. At the moment I am having to use
>view/rating in my ZPT; the view class can say either:
>
>rating = self.rate.getRating()
>or
>rating = self.rate.rating
>
>depending on whether I want to access the method or
>the property - both seem to work OK. 
>
Yes, but I would not offer both. I would limit the interface to the 
property only, because the property can used more easily generating 
generic view such as schemadisplay, add/editform and form...

>However, I would
>like to change from view/rating to context/rating or
>context/getRating in the ZPT - this would seem cleaner
>and more logical to me - I could do away with the view
>class, so it would be one less piece of code to
>maintain.
>  
>
The view-layer definitly make sense, but sometimes it brings a certain 
implementation/registration overhead/burden.

If you are to lazy to map your views manualy to your adapters or if you 
like to omit a lot of extra code, then you could use/ write generic 
views which can be registered using zcml-registrations.

In your case it might possible to use the schemadisplay directive, maybe 
you have to write an additional widget for the rating field and a custom 
template.

>My understanding of the adapter is that it has adapted
>my object so it now provides the getRating() method
>and rating property of the adapter interface - it
>would seem to me that this should mean I can access it
>like any other method or property the object provides,
>but it does not seem to be the case.
>  
>
No, you have to adapt explicitly:
obj = object()
adaptedobject  = IRating(obj)
or any equivalent or extending zapi method for example getAdapter or 
getMultiAdapter

Regards,
Dominik




More information about the Zope3-users mailing list