I am using parsed xml … I have a parsed xml file in a folder. 

I tried to lockdown my plone site, by following the link in http://plone.org/documentation/howto/HowToCreateAPrivatePloneSite

This works great ( basically set a whole bunch of workflow state permissions to authenticated then run the update security settings) if you don't have a parsed xml file inside your site, but if you do you get a nastly little error

TypeError: hasattr expected 2 arguments, got 1

The even.log file says:
2004-07-15T16:12:32 ERROR(200) SiteError http://localhost:5555/nerwa/portal_workflow/updateRoleMappings
Traceback (most recent call last):
  File "C:\plone\Plone\Zope\lib\python\ZPublisher\Publish.py", line 100, in publish
    request, bind=1)
  File "C:\plone\Plone\Zope\lib\python\ZPublisher\mapply.py", line 88, in mapply
    if debug is not None: return debug(object,args,context)
  File "C:\plone\Plone\Zope\lib\python\ZPublisher\Publish.py", line 40, in call_object
    result=apply(object,args) # Type s<cr> to step into published object.
  File "C:\plone\Plone\Data\Products\CMFCore\WorkflowTool.py", line 490, in updateRoleMappings
    count = self._recursiveUpdateRoleMappings(portal, wfs)
  File "C:\plone\Plone\Data\Products\CMFCore\WorkflowTool.py", line 673, in _recursiveUpdateRoleMappings
    count = count + self._recursiveUpdateRoleMappings(v, wfs)
  File "C:\plone\Plone\Data\Products\CMFCore\WorkflowTool.py", line 673, in _recursiveUpdateRoleMappings
    count = count + self._recursiveUpdateRoleMappings(v, wfs)
  File "C:\plone\Plone\Data\Products\CMFCore\WorkflowTool.py", line 673, in _recursiveUpdateRoleMappings
    count = count + self._recursiveUpdateRoleMappings(v, wfs)
  File "C:\plone\Plone\Data\Products\CMFCore\WorkflowTool.py", line 669, in _recursiveUpdateRoleMappings
    obs = ob.objectItems()
  File "C:\plone\Plone\Zope\lib\python\Products\ParsedXML\ParsedXML.py", line 283, in objectItems
    return ManageableDocument.objectItems(self, spec)
  File "C:\plone\Plone\Zope\lib\python\Products\ParsedXML\ManageableDOM.py", line 241, in objectItems
    for ob in self.objectValues(spec): a((ob.getId(), ob))
  File "C:\plone\Plone\Zope\lib\python\Products\ParsedXML\ManageableDOM.py", line 193, in getId
    if hasattr(self.aq_base):
TypeError: hasattr expected 2 arguments, got 1

I found the problem on line 193 it says :

    # partial ObjectManagerItem interface

    def getId(self):
        "Return the id of the object as a string."
        if hasattr(self.aq_base):
            base = self.aq_base
        else:
            base = self
        name=getattr(base, 'id', None)
        if name is not None:
            return name
        return self.tpURL()

You can see straightaway that someone is using hasattr with only one parameter.  Not good is it.

Any suggestions how to fix.  The work around I have is just to remove my xml file, apply the security then put the xml file back … although this works it is not the ideal solution.

Maybe I shouldn't be using parsed xml maybe there is a better python xml parser out there??

____________________________________________
Peter Millar
Technical Project Manager
Parasyn Controls Pty Ltd

Peter.Millar@Parasyn.com.au
T: 61 7 3396 6388
F: 61 7 3396 6299
45 Millenium Place, Tingalpa QLD 4173
PO Box 400 Cannon Hill QLD 4170

Australia
www.parasyn.com.au