[Zope] Retrieve calling object from python script
Robin Breathe
rbreathe at brookes.ac.uk
Thu Feb 5 06:48:24 EST 2004
I've written a cache parameter script in Python, which is designed to be
called without arguments from a dtml page, zpt or as a precondition to a
File or Image object. It needs to get a handle on the item which called
it (I'll call that handle 'object'), to retrieve optional script
parameters stored as properties of the calling object. This allows per
instance configuration of ZPTs, and suchlike.
Here's the start of the script:
#start
request = context.REQUEST
object = request.PUBLISHED
response = request.RESPONSE
# DEBUG: look at PUBLISHED
response.setHeader('Published-Object', repr(object))
try:
object.getId()
except:
object = context
# function shortcuts
hasProperty = object.propertysheets.hasProperty
getProperty = object.propertysheets.getProperty
#...
#end
So, for ZPTs I call the script with 'here/cache', and I get:
Published-Object: <ZopePageTemplate at index_html>
...'context' alone gives a handle on the item's container (e.g. Folder).
This is fine.
Now, for Files and Images, a set the Precondition to 'cache' and I get:
Published-Object: <bound method File.index_html of <File instance
at a045230>>
...the .getId() fails, and it uses context, which works (e.g. I can
access the File's propertysheets), but isn't beautiful.
However, this fails for ZCGI objects. I get:
Published-Object: <bound method ZCGIFolder.index_html of <ZCGIFolder at
/Base/ht-bin>>
...but 'context' refers to the <CMFSite instance>, /Base, not to the
ZCGIFolder, /Base/ht-bin.
So the question is this: what's the proper way to identify the object
whose method has been bound to REQUEST.PUBLISHED, or if that's the wrong
route, to simply, reliably identify the caller of a python script which
can be called from a range of different object types?
Thanks,
- Robin
--
Robin Breathe, Computer Services, Oxford Brookes University, Oxford, UK
rbreathe at brookes.ac.uk Tel: +44 1865 483323 Fax: +44 1865 483073
More information about the Zope
mailing list