[Zope-dev] Getting to container from a method called by the factory

Itamar Shtull-Trauring itamar@maxnm.com
Wed, 07 Jun 2000 10:44:16 +0300


Kevin Dangoor wrote:

>     I'm trying to check if the container from which the user selected a
> product from the add menu has an "acl_users" folder. When the user selects
> the option from the add menu, they get a form. When they submit the form,
> the method (a PythonMethod) does this:
> 
> folder=self.Destination()
> if hasattr(folder, 'acl_users'):
>   ...do something...
> else:
>   ...complain...
> 
> Even though I know the folder has an acl_users (and having this function
> return folder.objectIds() proves it), the above code will always complain.
> Is there a problem with using hasattr in this context?

Well, first of all, because of acquisition, if there's a acl_users at the
top level this will always return true.  Next, PythonMethods have trouble
with hasattr AFAIK - so instead do:

folder=self.Destination()
if 'acl_users' in folder.objectIds():
   ...do something...
else:
   ...complain...

-- 
Itamar S.T.  itamar@maxnm.com   
"It don't get thingier than that!"