[Zope] Calling PythonMethods from PythonMethods?

Evan Simpson evan@4-am.com
Mon, 13 Dec 1999 13:24:33 -0600


Jim Harrison wrote:

> Sorry to be dense--I know something similar to this was discussed on the
> list sometime back--but it would be helpful if someone could give me a hint
> on the syntax for calling a PythonMethod in an arbitrary folder from within
> a PythonMethod (in a different folder).

To get at any other object from a PythonMethod, you first need to pass in
either a client object (such as this()) or a namespace like '_'.

Once you've done that, you can access the other object as an attribute of the
client or namespace.  Arbitrary paths are a bit trickier, but here's an
example Python Method which does it:

PythonMethod FetchObj takes an object or namespace, pathname of another
object, and optional attribute name to evaluate:
<params>_, fetchStr, attr=None</params>
obj = _
for p in string.split(fetchStr, '/'):
  obj = obj[p]
if attr is None:
  return obj
else:
  return render(_.getattr(obj, attr))

This could be called from DTML like this:

<dtml-var expr="FetchObj(_, 'hie/dee/hoe', 'id')">

Cheers,

Evan @ 4-am