[Zope-dev] Re: ZCallable

Chris Withers chrisw@nipltd.com
Fri, 14 Jul 2000 22:33:18 +0100 (GMT)


Yup,

This looks good, as did your earlier post. However, it raises a question
:(

Something like a ZCatalog or a Squishdot Site (which I have a passing
interest in ;-) are both folderish. However, their __call__ method does
something quite different: it returns the results of searching the catalog
(I think this is the ZSearchable Interface, correct me if I'm wrong ;-)

I guess what's bothering me is why __call__ has this dual role and how the
rendering process manages to correctly render index_html even on a
Squishdot object which is actually callable?

Hmm... I guess the implication of this is that a normal folder will never
render itself to avoid confusion over the ZSearch interface and so if I
want this behaviour I'll have to roll-my-own folder which inherits from
ZCallable.

Any ideas/comments?

Chris

PS: Shane: what's the difference between ZCallable and the ZRenderable
base class that Maik Roeder mentioned on zope@zope.org a few days back?

On Fri, 14 Jul 2000, Steve Alexander wrote:

> Chris,
> 
> Related to your question earlier, have you seen Shane Hathaways' recent
> checkin into PTK?
> 
> "Added the ZCallable product, which is a very simple base class that
> makes it possible to call an class instance directly."
> 
> --------
> 
> from ExtensionClass import Base
> 
> class ZCallable (Base):
>     def __call__(self, *args, **kw):
>         '''Calls index_html, if it exists, to render this object.
>         '''
>         base = getattr(self, 'aq_base', self)
>         if hasattr(base, 'index_html'):
>             v = self.index_html
>             args = (self,) + tuple(args[1:])
>             return apply(v, args, kw)
>         else:
>             raise AttributeError, 'index_html'
> 
> def initialize(context):
>     context.registerBaseClass(ZCallable)
> 
> --------
> 
> --
> Steve Alexander
> Software Engineer
> Cat-Box limited
> http://www.cat-box.net
>