[Zope] Indirect calling of extensions?
Tres Seaver
tseaver@palladion.com
Sat, 25 Mar 2000 23:02:44 -0600
Glenn Rogers <zope-list@gacela.demon.co.uk>
> To: zope@zope.org
> Subject: Re:
>
> On Fri, Mar 24, 2000 at 03:28:09PM -0600, Tres Seaver wrote:
> > Glenn Rogers <zope-list@gacela.demon.co.uk> wrote:
> >
> > > Imagine I have a python extension, with zope id pyFetch
> > >
> > > def Fetch (self, href):
> > > ...
> > >
> > > I want to call this in a manner similar to:
> > >
> > > <!--#let call_method="'pyFetch'"-->
> > > <!--#in sql-method-returns-href-->
> > > <!--#var "_[call_method]( href )"-->
> > > <!--#/in-->
> > > <!--#/let-->
> > >
> >
> > I don't know what you mean by "python extension" -- is this an
> > ExternalMethod?
> >
> Yes. It lives in the zope extensions directory though - blame lack of sleep.
>
> > In a DTML method contained/acquired by that folder::
> >
> > <ul>
> > <dtml-in list_hrefs mapping>
> > <li><dtml-var "this().pyFetch( href )"></li>
> > </dtml-in>
> > </ul>
> >
> Problem: In real life, I don't know that I'm calling pyFetch, it could be
> pyDontFetch or pyGoToSleep etc (the "#let call_method" is in another DTML
> method and there are a few alternatives). All I know is that it shares
> the same signature. Works fine if you call it directly.
>
> Is there a better method than the equivalent of
>
> <!--#if "call_method=='pyFetch'"-->
> <!--#var pyFetch( href )-->
> <!--#elif "call_method=='pyDontFetch'"-->
> <!--#var pyDontFetch( href )-->
> ...
Try this (untested), assuming the name of the method you want to call is stored
somehow in the variable 'methodName'::
<dtml-let methodToCall="_[ methodName ]">
<dtml-in list_hrefs mapping>
<dtml-var "methodToCall( this(), href )">
</dtml-in>
</dtml-let>
--
=========================================================
Tres Seaver tseaver@palladion.com 713-523-6582
Palladion Software http://www.palladion.com