Hi Jens,

Jens Vagelpohl wrote:
> - I'll be happy to mark those places in the code where I had to
> manually wrap after a straight getUtility/queryUtility call so these
> places stand out as a reminder to do something about it.

I haven't marked those places yet, but attached you can find a patch
against the current CMFCore branch, that in combination with the small
change to DCWorkflow/Expressions.py noted earlier is needed to get most
of the tests for Plone running.

I still have one problem in the test case setup for functional tests,
where the portal isn't set as a site and thus the utility lookups don't
work, but as far as I can tell this is only a test case problem.

Hanno
Index: MembershipTool.py
===================================================================
--- MembershipTool.py   (revision 71776)
+++ MembershipTool.py   (working copy)
@@ -503,6 +503,7 @@
         # Delete member data in portal_memberdata.
         mdtool = queryUtility(IMemberDataTool)
         if mdtool is not None:
+            mdtool = mdtool.__of__(self)
             for member_id in member_ids:
                 mdtool.deleteMemberData(member_id)
 
@@ -513,7 +514,7 @@
 
         # Delete members' local roles.
         if delete_localroles:
-            utool = getUtility(IURLTool)
+            utool = getUtility(IURLTool).__of__(self)
             self.deleteLocalRoles( utool.getPortalObject(), member_ids,
                                    reindex=1, recursive=1 )
 
Index: MemberDataTool.py
===================================================================
--- MemberDataTool.py   (revision 71776)
+++ MemberDataTool.py   (working copy)
@@ -184,7 +184,7 @@
     def pruneMemberDataContents(self):
         """ Delete data contents of all members not listet in acl_users.
         """
-        membertool= getUtility(IMembershipTool)
+        membertool= getUtility(IMembershipTool).__of__(self)
         members = self._members
         user_list = membertool.listMemberIds()
 
Index: RegistrationTool.py
===================================================================
--- RegistrationTool.py (revision 71776)
+++ RegistrationTool.py (working copy)
@@ -159,7 +159,7 @@
         # Anyone is always allowed to grant the 'Member' role.
         _limitGrantedRoles(roles, self, ('Member',))
 
-        membership = getUtility(IMembershipTool)
+        membership = getUtility(IMembershipTool).__of__(self)
         membership.addMember(id, password, roles, domains, properties)
 
         member = membership.getMemberById(id)
Index: URLTool.py
===================================================================
--- URLTool.py  (revision 71776)
+++ URLTool.py  (working copy)
@@ -24,6 +24,7 @@
 from zope.interface import implements
 
 from ActionProviderBase import ActionProviderBase
+from interfaces import ISiteRoot
 from interfaces import IURLTool
 from interfaces.portal_url import portal_url as z2IURLTool
 from permissions import ManagePortal
@@ -74,7 +75,15 @@
     def getPortalObject(self):
         """ Get the portal object itself.
         """
-        return aq_parent( aq_inner(self) )
+        portal = aq_inner(self)
+        while True:
+            portal = getattr(portal, 'aq_parent', None)
+            if portal is None:
+                break
+            if ISiteRoot.providedBy(portal):
+                return portal
+        # Portal could not be found, log an error or raise one?
+        return aq_inner(self)
 
     security.declarePublic('getRelativeContentPath')
     def getRelativeContentPath(self, content):
Index: ActionInformation.py
===================================================================
--- ActionInformation.py        (revision 71776)
+++ ActionInformation.py        (working copy)
@@ -504,7 +504,7 @@
 
     def __init__( self, tool, folder, object=None ):
         self.portal = portal = aq_parent(aq_inner(tool))
-        membership = getUtility(IMembershipTool)
+        membership = getUtility(IMembershipTool).__of__(portal)
         self.isAnonymous = membership.isAnonymousUser()
         self.user_id = membership.getAuthenticatedMember().getId()
         self.portal_url = portal.absolute_url()
Index: PortalFolder.py
===================================================================
--- PortalFolder.py     (revision 71776)
+++ PortalFolder.py     (working copy)
@@ -125,7 +125,7 @@
             this folder.
         """
         result = []
-        portal_types = getUtility(ITypesTool)
+        portal_types = getUtility(ITypesTool).__of__(self)
         myType = portal_types.getTypeInfo(self)
 
         if myType is not None:
Index: CMFCatalogAware.py
===================================================================
--- CMFCatalogAware.py  (revision 71776)
+++ CMFCatalogAware.py  (working copy)
@@ -118,6 +118,7 @@
         if catalog is None:
             return
         path = '/'.join(self.getPhysicalPath())
+        catalog = catalog.__of__(self)
 
         # XXX if _getCatalogTool() is overriden we will have to change
         # this method for the sub-objects.
_______________________________________________
Zope-CMF maillist  -  Zope-CMF@lists.zope.org
http://mail.zope.org/mailman/listinfo/zope-cmf

See http://collector.zope.org/CMF for bug reports and feature requests

Reply via email to