[Zope] objectmanager contains object test

Dieter Maurer dieter@handshake.de
Thu, 19 Dec 2002 00:34:25 +0100


Ben Avery writes:
 > I want to test to see if a folder contains a dtml method with a known 
 > id. how do I do this from python?
 > 
 > I've tried
 > if context.data.news[ object_id ]
 > which breaks with a key error, if it doesn't exist.
 > 
 > I want something like context.data.news.has_key( object_id )
 > but object manager doesn't seem to have any methods like that.
 > 
 > and doing a try, and catching key errors seems a messy way to do it.
You have several options:

  *  "try: ... except: ..." around the code above

  *  "hasattr(object.aq_explicit, attribute)"
     This is not fool proof

  *  an external method "hasOwnAttr" providing the missing function

     from Acquisition import aq_base
     def hasOwnAttr(self,attr):
       return hasattr(aq_base(self),attr)

  *  making the above method available to DTML and Python Script
     by modifying the Zope source.


Dieter