[Checkins] SVN: Products.CMFCore/trunk/ - converted several tools into utilities

Yvo Schubbe y.2011 at wcm-solutions.de
Tue Sep 13 04:19:30 EST 2011


Log message for revision 122784:
  - converted several tools into utilities

Changed:
  UU  Products.CMFCore/trunk/Products/CMFCore/ActionInformation.py
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  UU  Products.CMFCore/trunk/Products/CMFCore/CachingPolicyManager.py
  UU  Products.CMFCore/trunk/Products/CMFCore/CookieCrumbler.py
  UU  Products.CMFCore/trunk/Products/CMFCore/DiscussionTool.py
  UU  Products.CMFCore/trunk/Products/CMFCore/Expression.py
  U   Products.CMFCore/trunk/Products/CMFCore/MemberDataTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/MembershipTool.py
  UU  Products.CMFCore/trunk/Products/CMFCore/RegistrationTool.py
  UU  Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/configure.zcml
  UU  Products.CMFCore/trunk/Products/CMFCore/exportimport/cookieauth.py
  U   Products.CMFCore/trunk/Products/CMFCore/exportimport/memberdata.py
  U   Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_cookieauth.py
  U   Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_mailhost.py
  U   Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_memberdata.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionInformation.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionProviderBase.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionsTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_CachingPolicyManager.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_Expression.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_MemberDataTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_MembershipTool.py
  U   Products.CMFCore/trunk/setup.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/ActionInformation.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/ActionInformation.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/ActionInformation.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """ Information about customizable actions.
-
-$Id$
 """
 
 from UserDict import UserDict
@@ -24,6 +22,7 @@
 from OFS.OrderedFolder import OrderedFolder
 from OFS.PropertyManager import PropertyManager
 from OFS.SimpleItem import SimpleItem
+from zope.component import getUtility
 from zope.i18nmessageid import Message
 from zope.interface import implements
 
@@ -31,6 +30,7 @@
 from Products.CMFCore.interfaces import IAction
 from Products.CMFCore.interfaces import IActionCategory
 from Products.CMFCore.interfaces import IActionInfo
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.permissions import View
 from Products.CMFCore.utils import _checkPermission
 from Products.CMFCore.utils import getToolByName
@@ -572,9 +572,9 @@
 
     def __init__( self, tool, folder, object=None ):
         self.portal = portal = aq_parent(aq_inner(tool))
-        membership = getToolByName(tool, 'portal_membership')
-        self.isAnonymous = membership.isAnonymousUser()
-        self.user_id = membership.getAuthenticatedMember().getId()
+        mtool = getUtility(IMembershipTool)
+        self.isAnonymous = mtool.isAnonymousUser()
+        self.user_id = mtool.getAuthenticatedMember().getId()
         self.portal_url = portal.absolute_url()
         if folder is not None:
             self.folder_url = folder.absolute_url()


Property changes on: Products.CMFCore/trunk/Products/CMFCore/ActionInformation.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2011-09-13 09:19:30 UTC (rev 122784)
@@ -4,6 +4,10 @@
 2.3.0-alpha (unreleased)
 ------------------------
 
+- tools: Converted several tools into utilities.
+  CookieCrumbler, MemberDataTool, MembershipTool and RegistrationTool are now
+  local utilities.
+
 - MemberDataTool: Changed property modes to 'w' and added 'fullname' property.
 
 - setup handlers: Improved content type registry handler.

Modified: Products.CMFCore/trunk/Products/CMFCore/CachingPolicyManager.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CachingPolicyManager.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/CachingPolicyManager.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """Caching tool implementation.
-
-$Id$
 """
 
 from AccessControl.SecurityInfo import ClassSecurityInfo
@@ -29,18 +27,19 @@
 from Persistence import PersistentMapping
 from Products.PageTemplates.Expressions import getEngine
 from Products.PageTemplates.Expressions import SecureModuleImporter
+from zope.component import getUtility
 from zope.container.interfaces import IObjectMovedEvent
 from zope.interface import implements
 
 from Products.CMFCore.Expression import Expression
 from Products.CMFCore.interfaces import ICachingPolicy
 from Products.CMFCore.interfaces import ICachingPolicyManager
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.permissions import ManagePortal
 from Products.CMFCore.permissions import View
 from Products.CMFCore.utils import _dtmldir
 from Products.CMFCore.utils import _setCacheHeaders
 from Products.CMFCore.utils import _ViewEmulator
-from Products.CMFCore.utils import getToolByName
 from Products.CMFCore.utils import registerToolInterface
 
 # This is lame :(
@@ -60,11 +59,11 @@
         Construct an expression context for TALES expressions,
         for use by CachingPolicy objects.
     """
-    pm = getToolByName( content, 'portal_membership', None )
-    if not pm or pm.isAnonymousUser():
+    mtool = getUtility(IMembershipTool)
+    if mtool.isAnonymousUser():
         member = None
     else:
-        member = pm.getAuthenticatedMember()
+        member = mtool.getAuthenticatedMember()
 
     if time is None:
         time = DateTime()
@@ -876,8 +875,7 @@
 
         return cache
 
-
-InitializeClass( CachingPolicyManager )
+InitializeClass(CachingPolicyManager)
 registerToolInterface('caching_policy_manager', ICachingPolicyManager)
 
 


Property changes on: Products.CMFCore/trunk/Products/CMFCore/CachingPolicyManager.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFCore/trunk/Products/CMFCore/CookieCrumbler.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CookieCrumbler.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/CookieCrumbler.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -11,8 +11,6 @@
 # 
 ##############################################################################
 """ Cookie Crumbler: Enable cookies for non-cookie user folders.
-
-$Id$
 """
 
 from base64 import encodestring, decodestring
@@ -25,16 +23,20 @@
 from App.class_init import InitializeClass
 from App.special_dtml import HTMLFile
 from DateTime.DateTime import DateTime
+from OFS.interfaces import IObjectWillBeMovedEvent
+from OFS.PropertyManager import PropertyManager
 from OFS.SimpleItem import SimpleItem
-from OFS.PropertyManager import PropertyManager
-from OFS.interfaces import IObjectWillBeMovedEvent
 from zope.container.interfaces import IObjectMovedEvent
+from zope.globalrequest import getRequest
 from zope.interface import implements
 from ZPublisher import BeforeTraverse
+from ZPublisher.BaseRequest import RequestContainer
 from ZPublisher.HTTPRequest import HTTPRequest
 
 from Products.CMFCore.interfaces import ICookieCrumbler
-from Products.CMFCore.utils import UniqueObject, getToolByName
+from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import registerToolInterface
+from Products.CMFCore.utils import UniqueObject
 
 
 # Constants.
@@ -137,10 +139,8 @@
 
     security.declarePrivate('defaultSetAuthCookie')
     def defaultSetAuthCookie(self, resp, cookie_name, cookie_value):
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on self.REQUEST
         kw = {}
-        req = getattr(self, 'REQUEST', None)
+        req = getRequest()
         if req is not None and req.get('SERVER_URL', '').startswith('https:'):
             # Ask the client to send back the cookie only in SSL mode
             kw['secure'] = 'y'
@@ -266,7 +266,7 @@
         Updates cookie credentials if user details are changed.
         """
         if request is None:
-            request = self.REQUEST # BBB for Membershiptool
+            request = getRequest() # BBB for Membershiptool
         reponse = request['RESPONSE']
         ac = encodestring('%s:%s' % (name, pw)).rstrip()
         method = self.getCookieMethod('setAuthCookie',
@@ -280,8 +280,10 @@
         """
         target = None
         if response is None:
-            response = self.REQUEST['RESPONSE'] # BBB for App.Management
-            atool = getToolByName(self, 'portal_actions')
+            response = getRequest()['RESPONSE'] # BBB for App.Management
+            request_container = RequestContainer(REQUEST=getRequest())
+            rich_context = self.__of__(request_container)
+            atool = getToolByName(rich_context, 'portal_actions')
             target = atool.getActionInfo('user/logout')['url']
         method = self.getCookieMethod('expireAuthCookie',
                                        self.defaultExpireAuthCookie)
@@ -300,6 +302,7 @@
         return id
 
 InitializeClass(CookieCrumbler)
+registerToolInterface('cookie_authentication', ICookieCrumbler)
 
 
 def handleCookieCrumblerEvent(ob, event):


Property changes on: Products.CMFCore/trunk/Products/CMFCore/CookieCrumbler.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFCore/trunk/Products/CMFCore/DiscussionTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/DiscussionTool.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/DiscussionTool.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """ Basic portal discussion access tool.
-
-$Id$
 """
 
 import urllib
@@ -23,9 +21,11 @@
 from App.special_dtml import DTMLFile
 from DateTime.DateTime import DateTime
 from OFS.SimpleItem import SimpleItem
+from zope.component import getUtility
 from zope.interface import implements
 
 from Products.CMFCore.ActionProviderBase import ActionProviderBase
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import IOldstyleDiscussable
 from Products.CMFCore.interfaces import IOldstyleDiscussionTool
 from Products.CMFCore.permissions import AccessContentsInformation
@@ -66,8 +66,8 @@
         # It is not yet clear to me what the correct location for this hook is
 
         # Find the folder designated for replies, creating if missing
-        membershiptool = getToolByName(self.content, 'portal_membership')
-        home = membershiptool.getHomeFolder()
+        mtool = getUtility(IMembershipTool)
+        home = mtool.getHomeFolder()
         if not hasattr(home, 'Correspondence'):
             home.manage_addPortalFolder('Correspondence')
         location = home.Correspondence


Property changes on: Products.CMFCore/trunk/Products/CMFCore/DiscussionTool.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFCore/trunk/Products/CMFCore/Expression.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/Expression.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/Expression.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """ Expressions in a web-configurable workflow.
-
-$Id$
 """
 
 from AccessControl.SecurityInfo import ClassSecurityInfo
@@ -23,7 +21,9 @@
 from Persistence import Persistent
 from Products.PageTemplates.Expressions import getEngine
 from Products.PageTemplates.Expressions import SecureModuleImporter
+from zope.component import getUtility
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.utils import getToolByName
 
 
@@ -89,15 +89,15 @@
     '''
     An expression context provides names for TALES expressions.
     '''
-    pm = getToolByName(portal, 'portal_membership')
+    mtool = getUtility(IMembershipTool)
     if object is None:
         object_url = ''
     else:
         object_url = object.absolute_url()
-    if pm.isAnonymousUser():
+    if mtool.isAnonymousUser():
         member = None
     else:
-        member = pm.getAuthenticatedMember()
+        member = mtool.getAuthenticatedMember()
     data = {
         'object_url':   object_url,
         'folder_url':   folder.absolute_url(),


Property changes on: Products.CMFCore/trunk/Products/CMFCore/Expression.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFCore/trunk/Products/CMFCore/MemberDataTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/MemberDataTool.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/MemberDataTool.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -27,17 +27,20 @@
 from Persistence import Persistent
 from zope.component import adapts
 from zope.component import getMultiAdapter
+from zope.component import getUtility
+from zope.component import queryUtility
 from zope.interface import implements
 from ZPublisher.Converters import type_converters
 
 from Products.CMFCore.exceptions import BadRequest
 from Products.CMFCore.interfaces import IMember
 from Products.CMFCore.interfaces import IMemberDataTool
+from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.interfaces import IRegistrationTool
 from Products.CMFCore.permissions import ManagePortal
 from Products.CMFCore.permissions import SetOwnProperties
 from Products.CMFCore.permissions import ViewManagementScreens
 from Products.CMFCore.utils import _dtmldir
-from Products.CMFCore.utils import getToolByName
 from Products.CMFCore.utils import registerToolInterface
 from Products.CMFCore.utils import UniqueObject
 
@@ -100,12 +103,10 @@
         Return the number of members stored in the _members
         BTree and some other useful info
         '''
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
-        membertool   = getToolByName(self, 'portal_membership')
-        members      = self._members
-        user_list    = membertool.listMemberIds()
-        member_list  = members.keys()
+        mtool = getUtility(IMembershipTool)
+        members = self._members
+        user_list = mtool.listMemberIds()
+        member_list = members.keys()
         member_count = len(members)
         orphan_count = 0
 
@@ -119,14 +120,12 @@
     security.declarePrivate('searchMemberData')
     def searchMemberData(self, search_param, search_term, attributes=()):
         """ Search members. """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
         res = []
 
         if not search_param:
             return res
 
-        membership = getToolByName(self, 'portal_membership')
+        mtool = getUtility(IMembershipTool)
 
         if len(attributes) == 0:
             attributes = ('id', 'email')
@@ -135,7 +134,7 @@
             search_param = 'id'
 
         for user_id in self._members.keys():
-            u = membership.getMemberById(user_id)
+            u = mtool.getMemberById(user_id)
 
             if u is not None:
                 memberProperty = u.getProperty
@@ -157,14 +156,12 @@
     security.declarePrivate( 'searchMemberDataContents' )
     def searchMemberDataContents( self, search_param, search_term ):
         """ Search members. This method will be deprecated soon. """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
         res = []
 
         if search_param == 'username':
             search_param = 'id'
 
-        mtool   = getToolByName(self, 'portal_membership')
+        mtool = getUtility(IMembershipTool)
 
         for member_id in self._members.keys():
 
@@ -186,11 +183,9 @@
     def pruneMemberDataContents(self):
         """ Delete data contents of all members not listet in acl_users.
         """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
-        membertool = getToolByName(self, 'portal_membership')
+        mtool = getUtility(IMembershipTool)
         members = self._members
-        user_list = membertool.listMemberIds()
+        user_list = mtool.listMemberIds()
 
         for member_id in list(members.keys()):
             if member_id not in user_list:
@@ -267,14 +262,12 @@
         Accepts either keyword arguments or a mapping for the "properties"
         argument.
         '''
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
-        mtool = getToolByName(self._tool, 'portal_membership')
+        mtool = getUtility(IMembershipTool)
         if not mtool.isMemberAccessAllowed(self._user.getId()):
             raise BadRequest(u'Only own properties can be set.')
         if properties is None:
             properties = kw
-        rtool = getToolByName(self._tool, 'portal_registration', None)
+        rtool = queryUtility(IRegistrationTool)
         if rtool is not None:
             failMessage = rtool.testPropertiesValidity(properties, self)
             if failMessage is not None:

Modified: Products.CMFCore/trunk/Products/CMFCore/MembershipTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/MembershipTool.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/MembershipTool.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -30,11 +30,15 @@
 from Persistence import PersistentMapping
 from ZODB.POSException import ConflictError
 from zope.component import getUtility
+from zope.component import queryUtility
 from zope.interface import implements
 
 from Products.CMFCore.exceptions import AccessControl_Unauthorized
 from Products.CMFCore.exceptions import BadRequest
+from Products.CMFCore.interfaces import ICookieCrumbler
+from Products.CMFCore.interfaces import IMemberDataTool
 from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.interfaces import IRegistrationTool
 from Products.CMFCore.interfaces import ISiteRoot
 from Products.CMFCore.permissions import AccessContentsInformation
 from Products.CMFCore.permissions import ChangeLocalRoles
@@ -45,7 +49,7 @@
 from Products.CMFCore.permissions import View
 from Products.CMFCore.utils import _checkPermission
 from Products.CMFCore.utils import _dtmldir
-from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import registerToolInterface
 from Products.CMFCore.utils import UniqueObject
 
 logger = logging.getLogger('CMFCore.MembershipTool')
@@ -92,13 +96,11 @@
     def setPassword(self, password, domains=None, REQUEST=None):
         '''Allows the authenticated member to set his/her own password.
         '''
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
-        registration = getToolByName(self, 'portal_registration', None)
         if not self.isAnonymousUser():
             member = self.getAuthenticatedMember()
-            if registration:
-                failMessage = registration.testPasswordValidity(password)
+            rtool = queryUtility(IRegistrationTool)
+            if rtool is not None:
+                failMessage = rtool.testPasswordValidity(password)
                 if failMessage is not None:
                     raise BadRequest(failMessage)
             member.setSecurityProfile(password=password, domains=domains)
@@ -123,8 +125,6 @@
         Provides an opportunity for a portal_memberdata tool to retrieve and
         store member data independently of the user object.
         """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
         b = getattr(u, 'aq_base', None)
         if b is None:
             # u isn't wrapped at all.  Wrap it in self.acl_users.
@@ -143,7 +143,7 @@
                         portal_role not in u.roles):
                     u.roles.append(portal_role)
 
-        mdtool = getToolByName(self, 'portal_memberdata', None)
+        mdtool = queryUtility(IMemberDataTool)
         if mdtool is not None:
             try:
                 u = mdtool.wrapUser(u)
@@ -338,12 +338,9 @@
             name = user.getUserName()
             # this really does need to be the user name, and not the user id,
             # because we're dealing with authentication credentials
-            try:
-                cctool = getToolByName(self, 'cookie_authentication')
+            cctool = queryUtility(ICookieCrumbler)
+            if cctool is not None:
                 cctool.credentialsChanged(user, name, password, REQUEST)
-            except AttributeError:
-                # No CookieCrumbler
-                pass
 
     security.declareProtected(ManageUsers, 'getMemberById')
     def getMemberById(self, id):
@@ -401,14 +398,13 @@
         return map(self.wrapUser, self.acl_users.getUsers())
 
     security.declareProtected(ListPortalMembers, 'searchMembers')
-    def searchMembers( self, search_param, search_term ):
+    def searchMembers(self, search_param, search_term):
         """ Search the membership """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
-        md = getToolByName( self, 'portal_memberdata' )
+        mdtool = queryUtility(IMemberDataTool)
+        if mdtool is not None:
+            return mdtool.searchMemberData(search_param, search_term)
+        return None
 
-        return md.searchMemberData( search_param, search_term )
-
     security.declareProtected(View, 'getCandidateLocalRoles')
     def getCandidateLocalRoles(self, obj):
         """ What local roles can I assign?
@@ -480,9 +476,6 @@
                       delete_localroles=1, REQUEST=None):
         """ Delete members specified by member_ids.
         """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
-
         # Delete members in acl_users.
         acl_users = self.acl_users
         if _checkPermission(ManageUsers, acl_users):
@@ -502,7 +495,7 @@
                                  'permission for the underlying User Folder.')
 
         # Delete member data in portal_memberdata.
-        mdtool = getToolByName(self, 'portal_memberdata', None)
+        mdtool = queryUtility(IMemberDataTool)
         if mdtool is not None:
             for member_id in member_ids:
                 mdtool.deleteMemberData(member_id)
@@ -536,3 +529,4 @@
         return None
 
 InitializeClass(MembershipTool)
+registerToolInterface('portal_membership', IMembershipTool)

Modified: Products.CMFCore/trunk/Products/CMFCore/RegistrationTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/RegistrationTool.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/RegistrationTool.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """ Basic user registration tool.
-
-$Id$
 """
 
 from random import choice
@@ -23,8 +21,10 @@
 from App.class_init import InitializeClass
 from App.special_dtml import DTMLFile
 from OFS.SimpleItem import SimpleItem
+from zope.component import getUtility
 from zope.interface import implements
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import IRegistrationTool
 from Products.CMFCore.permissions import AddPortalMember
 from Products.CMFCore.permissions import MailForgottenPassword
@@ -32,8 +32,8 @@
 from Products.CMFCore.utils import _checkPermission
 from Products.CMFCore.utils import _dtmldir
 from Products.CMFCore.utils import _limitGrantedRoles
-from Products.CMFCore.utils import getToolByName
 from Products.CMFCore.utils import Message as _
+from Products.CMFCore.utils import registerToolInterface
 from Products.CMFCore.utils import UniqueObject
 
 
@@ -140,8 +140,6 @@
         role that can always be granted); these conditions should be
         detected before the fact so that a cleaner message can be printed.
         '''
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
         if not self.isMemberIdAllowed(id):
             raise ValueError(_(u'The login name you selected is already in '
                                u'use or is not valid. Please choose another.'))
@@ -159,10 +157,10 @@
         # Anyone is always allowed to grant the 'Member' role.
         _limitGrantedRoles(roles, self, ('Member',))
 
-        membership = getToolByName(self, 'portal_membership')
-        membership.addMember(id, password, roles, domains, properties)
+        mtool = getUtility(IMembershipTool)
+        mtool.addMember(id, password, roles, domains, properties)
 
-        member = membership.getMemberById(id)
+        member = mtool.getMemberById(id)
         self.afterAdd(member, id, password, properties)
         return member
 
@@ -170,14 +168,12 @@
     def isMemberIdAllowed(self, id):
         '''Returns 1 if the ID is not in use and is not reserved.
         '''
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
         if len(id) < 1 or id == 'Anonymous User':
             return 0
         if not self._ALLOWED_MEMBER_ID_PATTERN.match( id ):
             return 0
-        membership = getToolByName(self, 'portal_membership')
-        if membership.getMemberById(id) is not None:
+        mtool = getUtility(IMembershipTool)
+        if mtool.getMemberById(id) is not None:
             return 0
         return 1
 
@@ -195,3 +191,4 @@
         raise NotImplementedError
 
 InitializeClass(RegistrationTool)
+registerToolInterface('portal_registration', IRegistrationTool)


Property changes on: Products.CMFCore/trunk/Products/CMFCore/RegistrationTool.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """Portal skins tool.
-
-$Id$
 """
 
 from difflib import unified_diff
@@ -29,12 +27,14 @@
 from Persistence import PersistentMapping
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 from Products.PythonScripts.PythonScript import PythonScript
+from zope.component import getUtility
 from zope.interface import implements
 
 from Products.CMFCore.ActionProviderBase import ActionProviderBase
 from Products.CMFCore.DirectoryView import base_ignore
 from Products.CMFCore.DirectoryView import ignore
 from Products.CMFCore.DirectoryView import ignore_re
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import ISkinsTool
 from Products.CMFCore.permissions import AccessContentsInformation
 from Products.CMFCore.permissions import ManagePortal
@@ -47,7 +47,6 @@
 def modifiedOptions():
     # Remove the existing "Properties" option and add our own.
     rval = []
-    pos = -1
     for o in Folder.manage_options:
         label = o.get('label', None)
         if label != 'Properties':
@@ -307,7 +306,7 @@
         """
         # XXX: this method violates the rules for tools/utilities:
         # it depends on a non-utility tool and uses self.REQUEST
-        mtool = getToolByName(self, 'portal_membership')
+        mtool = getUtility(IMembershipTool)
         utool = getToolByName(self, 'portal_url')
         member = mtool.getAuthenticatedMember()
         if hasattr(aq_base(member), 'getProperty'):


Property changes on: Products.CMFCore/trunk/Products/CMFCore/SkinsTool.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFCore/trunk/Products/CMFCore/configure.zcml
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/configure.zcml	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/configure.zcml	2011-09-13 09:19:30 UTC (rev 122784)
@@ -1,8 +1,10 @@
 <configure
     xmlns="http://namespaces.zope.org/zope">
 
-  <include package="five.localsitemanager" />
+  <include package="five.globalrequest"/>
 
+  <include package="five.localsitemanager"/>
+
   <include file="permissions.zcml"/>
 
   <include package=".browser"/>

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/cookieauth.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/cookieauth.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/cookieauth.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -11,11 +11,10 @@
 #
 ##############################################################################
 """Cookie crumbler xml adapters and setup handlers.
-
-$Id$
 """
 
 from zope.component import adapts
+from zope.component import getSiteManager
 
 from Products.GenericSetup.interfaces import ISetupEnviron
 from Products.GenericSetup.utils import exportObjects
@@ -24,7 +23,6 @@
 from Products.GenericSetup.utils import XMLAdapterBase
 
 from Products.CMFCore.interfaces import ICookieCrumbler
-from Products.CMFCore.utils import getToolByName
 
 
 class CookieCrumblerXMLAdapter(XMLAdapterBase, PropertyManagerHelpers):
@@ -73,8 +71,8 @@
 def importCookieCrumbler(context):
     """Import cookie crumbler settings from an XML file.
     """
-    site = context.getSite()
-    tool = getToolByName(site, 'cookie_authentication', None)
+    sm = getSiteManager(context.getSite())
+    tool = sm.queryUtility(ICookieCrumbler)
     if tool is None:
         logger = context.getLogger('cookies')
         logger.debug('Nothing to import.')
@@ -85,8 +83,8 @@
 def exportCookieCrumbler(context):
     """Export cookie crumbler settings as an XML file.
     """
-    site = context.getSite()
-    tool = getToolByName(site, 'cookie_authentication', None)
+    sm = getSiteManager(context.getSite())
+    tool = sm.queryUtility(ICookieCrumbler)
     if tool is None:
         logger = context.getLogger('cookies')
         logger.debug('Nothing to export.')


Property changes on: Products.CMFCore/trunk/Products/CMFCore/exportimport/cookieauth.py
___________________________________________________________________
Deleted: svn:keywords
   - Id

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/memberdata.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/memberdata.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/memberdata.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -14,6 +14,7 @@
 """
 
 from zope.component import adapts
+from zope.component import getSiteManager
 
 from Products.GenericSetup.interfaces import ISetupEnviron
 from Products.GenericSetup.utils import exportObjects
@@ -22,7 +23,6 @@
 from Products.GenericSetup.utils import XMLAdapterBase
 
 from Products.CMFCore.interfaces import IMemberDataTool
-from Products.CMFCore.utils import getToolByName
 
 
 class MemberDataToolXMLAdapter(XMLAdapterBase, PropertyManagerHelpers):
@@ -59,8 +59,8 @@
 def importMemberDataTool(context):
     """Import member data tool settings from an XML file.
     """
-    site = context.getSite()
-    tool = getToolByName(site, 'portal_memberdata', None)
+    sm = getSiteManager(context.getSite())
+    tool = sm.queryUtility(IMemberDataTool)
     if tool is None:
         logger = context.getLogger('memberdata')
         logger.debug('Nothing to import.')
@@ -71,8 +71,8 @@
 def exportMemberDataTool(context):
     """Export member data tool settings as an XML file.
     """
-    site = context.getSite()
-    tool = getToolByName(site, 'portal_memberdata', None)
+    sm = getSiteManager(context.getSite())
+    tool = sm.queryUtility(IMemberDataTool)
     if tool is None:
         logger = context.getLogger('memberdata')
         logger.debug('Nothing to export.')

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_cookieauth.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_cookieauth.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_cookieauth.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -17,6 +17,7 @@
 import Testing
 
 from OFS.Folder import Folder
+from zope.component import getSiteManager
 
 from Products.GenericSetup.testing import BodyAdapterTestCase
 from Products.GenericSetup.tests.common import BaseRegistryTests
@@ -24,6 +25,7 @@
 from Products.GenericSetup.tests.common import DummyImportContext
 
 from Products.CMFCore.CookieCrumbler import CookieCrumbler
+from Products.CMFCore.interfaces import ICookieCrumbler
 from Products.CMFCore.testing import ExportImportZCMLLayer
 
 _COOKIECRUMBLER_BODY = """\
@@ -102,7 +104,8 @@
     def _initSite(self, use_changed=False):
         self.root.site = Folder(id='site')
         site = self.root.site
-        cc = site.cookie_authentication = CookieCrumbler()
+        cc = CookieCrumbler()
+        getSiteManager().registerUtility(cc, ICookieCrumbler)
 
         if use_changed:
             cc.auth_cookie = 'value1'
@@ -158,7 +161,7 @@
                 import importCookieCrumbler
 
         site = self._initSite()
-        cc = site.cookie_authentication
+        cc = getSiteManager().getUtility(ICookieCrumbler)
 
         context = DummyImportContext(site)
         context._files['cookieauth.xml'] = _CHANGED_EXPORT
@@ -177,7 +180,7 @@
                 import importCookieCrumbler
 
         site = self._initSite()
-        cc = site.cookie_authentication
+        cc = getSiteManager().getUtility(ICookieCrumbler)
 
         context = DummyImportContext(site)
         context._files['cookieauth.xml'] = _CMF22_IMPORT

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_mailhost.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_mailhost.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_mailhost.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -47,9 +47,8 @@
 
         self.root.site = Folder(id='site')
         site = self.root.site
-        mh = site.MailHost = MailHost('MailHost')
-        sm = getSiteManager()
-        sm.registerUtility(site.MailHost, IMailHost)
+        mh = MailHost('MailHost')
+        getSiteManager().registerUtility(mh, IMailHost)
  
         if use_changed:
             mh.smtp_port='1'
@@ -99,7 +98,7 @@
         from Products.CMFCore.exportimport.mailhost import importMailHost
 
         site = self._initSite()
-        mh = site.MailHost
+        mh = getSiteManager().getUtility(IMailHost)
 
         context = DummyImportContext(site)
         context._files['mailhost.xml'] = _CHANGED_EXPORT

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_memberdata.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_memberdata.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_memberdata.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -18,12 +18,14 @@
 
 from DateTime.DateTime import DateTime
 from OFS.Folder import Folder
+from zope.component import getSiteManager
 
 from Products.GenericSetup.testing import BodyAdapterTestCase
 from Products.GenericSetup.tests.common import BaseRegistryTests
 from Products.GenericSetup.tests.common import DummyExportContext
 from Products.GenericSetup.tests.common import DummyImportContext
 
+from Products.CMFCore.interfaces import IMemberDataTool
 from Products.CMFCore.MemberDataTool import MemberDataTool
 from Products.CMFCore.testing import ExportImportZCMLLayer
 
@@ -85,7 +87,8 @@
     def _initSite(self, use_changed=False):
         self.root.site = Folder(id='site')
         site = self.root.site
-        mdtool = site.portal_memberdata = MemberDataTool()
+        mdtool = MemberDataTool()
+        getSiteManager().registerUtility(mdtool, IMemberDataTool)
 
         if use_changed:
             mdtool._updateProperty('email', 'value1')
@@ -141,7 +144,7 @@
                 import importMemberDataTool
 
         site = self._initSite()
-        mdtool = site.portal_memberdata
+        mdtool = getSiteManager().getUtility(IMemberDataTool)
 
         context = DummyImportContext(site)
         context._files['memberdata.xml'] = _CHANGED_EXPORT

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionInformation.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionInformation.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionInformation.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -18,10 +18,13 @@
 
 from OFS.Folder import manage_addFolder
 from Products.PythonScripts.PythonScript import manage_addPythonScript
+from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
+from zope.testing.cleanup import cleanUp
 
 from Products.CMFCore.Expression import createExprContext
 from Products.CMFCore.Expression import Expression
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.testing import FunctionalZCMLLayer
 from Products.CMFCore.tests.base.dummy import DummyContent
 from Products.CMFCore.tests.base.dummy import DummySite
@@ -231,9 +234,14 @@
 
     def setUp(self):
         SecurityTest.setUp(self)
-        self.site = DummySite('site').__of__(self.root)
-        self.site._setObject( 'portal_membership', DummyMembershipTool() )
+        self.site = DummySite('site').__of__(self.app)
+        sm = getSiteManager()
+        sm.registerUtility(DummyMembershipTool(), IMembershipTool)
 
+    def tearDown(self):
+        cleanUp()
+        SecurityTest.tearDown(self)
+
     def _makeOne(self, *args, **kw):
         from Products.CMFCore.ActionInformation import ActionInfo
 
@@ -345,13 +353,17 @@
     def setUp(self):
         TransactionalTest.setUp(self)
 
-        root = self.root
-        root._setObject('portal', DummyContent('portal', 'url_portal'))
-        portal = self.portal = root.portal
-        portal.portal_membership = DummyMembershipTool()
+        self.app._setObject('portal', DummyContent('portal'))
+        self.portal = self.app.portal
+        sm = getSiteManager()
+        sm.registerUtility(DummyMembershipTool(), IMembershipTool)
         self.folder = DummyContent('foo', 'url_foo')
         self.object = DummyContent('bar', 'url_bar')
 
+    def tearDown(self):
+        getSiteManager().unregisterUtility(provided=IMembershipTool)
+        TransactionalTest.tearDown(self)
+
     def _makeOne(self, *args, **kw):
         from Products.CMFCore.ActionInformation import ActionInformation
 
@@ -389,7 +401,6 @@
         self.assertEqual(ai.getPermissions(), ())
 
     def test_setActionExpression_with_string_prefix(self):
-        from Products.CMFCore.Expression import Expression
         ai = self._makeOne(id='view', category='folder')
         ai.setActionExpression('string:blah')
         self.failUnless(isinstance(ai.action,Expression))
@@ -430,8 +441,8 @@
         portal = self.portal
         folder = self.folder
         object = self.object
-        manage_addPythonScript(self.root, 'test_script')
-        script = self.root.test_script
+        manage_addPythonScript(self.app, 'test_script')
+        script = self.app.test_script
         script.ZPythonScript_edit('', 'return context.getId()')
         ai = self._makeOne( id='view',
                             title='View',

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionProviderBase.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionProviderBase.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionProviderBase.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -16,9 +16,11 @@
 import unittest
 import Testing
 
+from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
 from zope.testing.cleanup import cleanUp
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyTool
 from Products.CMFCore.tests.base.testcase import SecurityTest
@@ -65,8 +67,8 @@
         self._trap_warning_output()
         SecurityTest.setUp(self)
         self.site = DummySite('site').__of__(self.root)
-        utool = self.site._setObject( 'portal_url', DummyTool() )
-        mtool = self.site._setObject( 'portal_membership', DummyTool() )
+        self.site._setObject('portal_url', DummyTool())
+        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
 
     def tearDown(self):
         cleanUp()

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionsTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionsTool.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionsTool.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -25,6 +25,7 @@
 from Products.CMFCore.ActionInformation import ActionCategory
 from Products.CMFCore.ActionInformation import ActionInformation
 from Products.CMFCore.Expression import Expression
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import ISiteRoot
 from Products.CMFCore.MembershipTool import MembershipTool
 from Products.CMFCore.tests.base.security import OmnipotentUser
@@ -127,20 +128,22 @@
     def setUp(self):
         SecurityTest.setUp(self)
 
-        root = self.root
         sm = getSiteManager()
-        sm.registerUtility(root, ISiteRoot)
-        root._setObject( 'portal_actions', self._makeOne() )
-        root._setObject( 'portal_url', URLTool() )
-        root._setObject( 'foo', URLTool() )
-        root._setObject('portal_membership', MembershipTool())
-        self.tool = root.portal_actions
+        sm.registerUtility(self.app, ISiteRoot)
+        self.app._setObject('portal_actions', self._makeOne())
+        self.app._setObject('portal_url', URLTool())
+        self.app._setObject('foo', URLTool())
+        sm.registerUtility(MembershipTool(), IMembershipTool)
+        self.tool = self.app.portal_actions
         self.tool.action_providers = ('portal_actions',)
 
+    def tearDown(self):
+        cleanUp()
+        SecurityTest.tearDown(self)
+
     def test_listActionInformationActions(self):
         # Check that listFilteredActionsFor works for objects that return
         # ActionInformation objects
-        root = self.root
         tool = self.tool
         tool._actions = (
               ActionInformation(id='folderContents',
@@ -159,7 +162,7 @@
             )
 
         newSecurityManager(None, OmnipotentUser().__of__(self.app.acl_users))
-        self.assertEqual(tool.listFilteredActionsFor(root.foo),
+        self.assertEqual(tool.listFilteredActionsFor(self.app.foo),
                          {'workflow': [],
                           'user': [],
                           'object': [],
@@ -175,11 +178,7 @@
                                       'link_target': '_top'}],
                           'global': []})
 
-    def tearDown(self):
-        cleanUp()
-        SecurityTest.tearDown(self)
 
-
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(ActionsToolTests),

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_CachingPolicyManager.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_CachingPolicyManager.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_CachingPolicyManager.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -25,17 +25,19 @@
 from App.Common import rfc1123_date
 from DateTime.DateTime import DateTime
 from OFS.Cache import Cacheable
+from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
 
 from Products.CMFCore.FSDTMLMethod import FSDTMLMethod
 from Products.CMFCore.FSPageTemplate import FSPageTemplate
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.testing import FunctionalZCMLLayer
 from Products.CMFCore.testing import TraversingZCMLLayer
 from Products.CMFCore.tests.base.dummy import DummyContent
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyTool
 from Products.CMFCore.tests.base.testcase import FSDVTest
-from Products.CMFCore.tests.base.testcase import RequestTest
+from Products.CMFCore.tests.base.testcase import TransactionalTest
 
 ACCLARK = DateTime( '2001/01/01' )
 portal_owner = 'portal_owner'
@@ -103,6 +105,7 @@
 
     def setUp(self):
         self._epoch = DateTime(0)
+        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
 
     def test_interfaces(self):
         from Products.CMFCore.CachingPolicyManager import CachingPolicy
@@ -432,6 +435,7 @@
 
     def setUp(self):
         self._epoch = DateTime()
+        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
 
     def assertEqualDelta( self, lhs, rhs, delta ):
         self.failUnless( abs( lhs - rhs ) <= delta )
@@ -627,28 +631,29 @@
         self.assertEqual( headers[2][1] , 'max-age=86400' )
 
 
-class CachingPolicyManager304Tests(RequestTest, FSDVTest):
+class CachingPolicyManager304Tests(TransactionalTest, FSDVTest):
 
     layer = FunctionalZCMLLayer
 
     def setUp(self):
         from Products.CMFCore import CachingPolicyManager
 
-        RequestTest.setUp(self)
+        TransactionalTest.setUp(self)
         FSDVTest.setUp(self)
 
         now = DateTime()
 
         # Create a fake portal and the tools we need
-        self.portal = DummySite(id='portal').__of__(self.root)
+        self.portal = DummySite(id='portal').__of__(self.app)
         self.portal._setObject('portal_types', DummyTool())
+        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
 
         # This is a FSPageTemplate that will be used as the View for
         # our content objects. It doesn't matter what it returns.
         path = os.path.join(self.skin_path_name, 'testPT2.pt')
         self.portal._setObject('dummy_view', FSPageTemplate('dummy_view', path))
 
-        uf = self.root.acl_users
+        uf = self.app.acl_users
         password = 'secret'
         uf.userFolderAddUser(portal_owner, password, ['Manager'], [])
         user = uf.getUserById(portal_owner)
@@ -708,7 +713,8 @@
                       enable_304s = 0)
 
     def tearDown(self):
-        RequestTest.tearDown(self)
+        getSiteManager().unregisterUtility(provided=IMembershipTool)
+        TransactionalTest.tearDown(self)
         FSDVTest.tearDown(self)
 
     def _cleanup(self):
@@ -843,7 +849,6 @@
         self._cleanup()
 
     def testConditionalGETDisabled(self):
-        yesterday = DateTime() - 1
         doc3 = self.portal.doc3
         request = doc3.REQUEST
         response = request.RESPONSE
@@ -876,23 +881,25 @@
         path = path_join(self.skin_path_name, filename)
         return FSDTMLMethod( id, path )
 
-class NestedTemplateTests( RequestTest, FSObjMaker ):
 
+class NestedTemplateTests(TransactionalTest, FSObjMaker):
+
     layer = TraversingZCMLLayer
 
     def setUp(self):
+        from Products.CMFCore import CachingPolicyManager
+
         FSObjMaker.setUp(self)
-        RequestTest.setUp(self)
+        TransactionalTest.setUp(self)
 
         # Create a fake portal and the tools we need
-        self.portal = DummySite(id='portal').__of__(self.root)
+        self.portal = DummySite(id='portal').__of__(self.app)
         self.portal._setObject('portal_types', DummyTool())
-
-        from Products.CMFCore import CachingPolicyManager
         CachingPolicyManager.manage_addCachingPolicyManager(self.portal)
+        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
 
     def tearDown(self):
-        RequestTest.tearDown(self)
+        TransactionalTest.tearDown(self)
         FSObjMaker.tearDown(self)
 
     def test_subtemplate_cpm_1( self ):
@@ -1003,7 +1010,7 @@
         portal._setObject('nested_view_1', nested_view_1)
         portal._setObject('nested_view_2', nested_view_2)
 
-        data = portal.doc1()
+        portal.doc1()
 
         # no headers should be added by the CPM if all is well
         headers = [x.lower() for x in self.RESPONSE.headers.keys()]
@@ -1195,35 +1202,40 @@
                          )
 
 
-class OFSCacheTests(RequestTest):
+class OFSCacheTests(TransactionalTest):
 
     layer = FunctionalZCMLLayer
 
     def setUp(self):
         from Products.CMFCore import CachingPolicyManager
 
-        RequestTest.setUp(self)
+        TransactionalTest.setUp(self)
 
         # Create a fake portal and the tools we need
-        self.portal = DummySite(id='portal').__of__(self.root)
+        self.portal = DummySite(id='portal').__of__(self.app)
         self.portal._setObject('doc1', CacheableDummyContent('doc1'))
         self.portal._setObject('doc2', CacheableDummyContent('doc2'))
         CachingPolicyManager.manage_addCachingPolicyManager(self.portal)
         cpm = self.portal.caching_policy_manager
+        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
 
         # This policy only applies to doc1. It will not emit any ETag header
         # but it enables If-modified-since handling.
-        cpm.addPolicy(policy_id = 'policy_1',
-                      predicate = 'python:object.getId()=="doc1"',
-                      mtime_func = '',
-                      max_age_secs = 100,
-                      no_cache = 0,
-                      no_store = 0,
-                      must_revalidate = 0,
-                      vary = 'doc1',
-                      etag_func = '',
-                      enable_304s = 0)
+        cpm.addPolicy(policy_id='policy_1',
+                      predicate='python:object.getId()=="doc1"',
+                      mtime_func='',
+                      max_age_secs=100,
+                      no_cache=0,
+                      no_store=0,
+                      must_revalidate=0,
+                      vary='doc1',
+                      etag_func='',
+                      enable_304s=0)
 
+    def tearDown(self):
+        getSiteManager().unregisterUtility(provided=IMembershipTool)
+        TransactionalTest.tearDown(self)
+
     def test_empty(self):
 
         from Products.CMFCore.CachingPolicyManager import CPMCache

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -20,6 +20,7 @@
 
 from Acquisition import Implicit
 from Products.Five.browser import BrowserView
+from zope.component import getSiteManager
 from zope.component import provideAdapter
 from zope.interface import alsoProvides
 from zope.interface.verify import verifyClass
@@ -27,13 +28,14 @@
 from zope.publisher.interfaces.browser import IBrowserView
 try:
     from zope.publisher.interfaces import IDefaultViewName
-except ImportError:  # zope.component had this before the ZTK
+except ImportError:  # BBB: zope.component had this before the ZTK
     from zope.component.interfaces import IDefaultViewName
 from zope.testing.cleanup import cleanUp
 from ZPublisher.HTTPRequest import HTTPRequest
 from ZPublisher.HTTPResponse import HTTPResponse
 
 from Products.CMFCore.DynamicType import DynamicType
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.tests.base.dummy import DummyObject
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyTool
@@ -151,7 +153,7 @@
     def setUp(self):
         SecurityTest.setUp(self)
         self.site = DummySite('site').__of__(self.root)
-        self.site._setObject( 'portal_membership', DummyTool() )
+        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
         self.site._setObject( 'portal_types', TypesTool() )
         self.site._setObject( 'portal_url', DummyTool() )
         fti = FTIDATA_CMF[0].copy()

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_Expression.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_Expression.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_Expression.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -16,9 +16,13 @@
 import unittest
 import Testing
 
+from zope.component import getSiteManager
+from zope.testing.cleanup import cleanUp
+
 from Products.CMFCore.ActionInformation import ActionInformation
 from Products.CMFCore.Expression import createExprContext
 from Products.CMFCore.Expression import Expression
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.tests.base.dummy import DummyContent
 from Products.CMFCore.tests.base.dummy import DummyTool as DummyMembershipTool
 from Products.CMFCore.tests.base.testcase import SecurityTest
@@ -43,20 +47,27 @@
                                   , category='global'
                                   , visible=1)
 
+    def tearDown(self):
+        cleanUp()
+        SecurityTest.tearDown(self)
+
     def test_anonymous_ec(self):
-        self.portal.portal_membership = DummyMembershipTool()
+        sm = getSiteManager()
+        sm.registerUtility(DummyMembershipTool(), IMembershipTool)
         ec = createExprContext(self.folder, self.portal, self.object)
         member = ec.contexts['member']
         self.failIf(member)
 
     def test_authenticatedUser_ec(self):
-        self.portal.portal_membership = DummyMembershipTool(anon=0)
+        sm = getSiteManager()
+        sm.registerUtility(DummyMembershipTool(anon=0), IMembershipTool)
         ec = createExprContext(self.folder, self.portal, self.object)
         member = ec.contexts['member']
         self.assertEqual(member.getId(), 'dummy')
 
     def test_ec_context(self):
-        self.portal.portal_membership = DummyMembershipTool()
+        sm = getSiteManager()
+        sm.registerUtility(DummyMembershipTool(), IMembershipTool)
         ec = createExprContext(self.folder, self.portal, self.object)
         object = ec.contexts['object']
         portal = ec.contexts['portal']

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_MemberDataTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_MemberDataTool.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_MemberDataTool.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -19,9 +19,12 @@
 import Acquisition
 from AccessControl.SecurityManagement import newSecurityManager
 from DateTime.DateTime import DateTime
+from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
+from zope.testing.cleanup import cleanUp
 
 from Products.CMFCore.exceptions import BadRequest
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.tests.base.security import DummyUser as BaseDummyUser
 
 
@@ -64,6 +67,9 @@
     def _makeOne(self, *args, **kw):
         return self._getTargetClass()(*args, **kw)
 
+    def tearDown(self):
+        cleanUp()
+
     def test_interfaces(self):
         from Products.CMFCore.interfaces import IMemberDataTool
 
@@ -93,7 +99,8 @@
         from Products.CMFCore.MembershipTool import MembershipTool
         folder = Folder('test')
         folder._setObject('portal_memberdata', self._makeOne())
-        folder._setObject('portal_membership', MembershipTool())
+        sm = getSiteManager()
+        sm.registerUtility(MembershipTool().__of__(folder), IMembershipTool)
         folder._setObject('acl_users', DummyUserFolder())
         tool = folder.portal_memberdata
 
@@ -134,9 +141,13 @@
 
         self.site = Folder('test')
         self.site._setObject('portal_memberdata', MemberDataTool())
-        self.site._setObject('portal_membership', MembershipTool())
+        sm = getSiteManager()
+        sm.registerUtility(MembershipTool(), IMembershipTool)
         self.site._setObject('acl_users', DummyUserFolder())
 
+    def tearDown(self):
+        cleanUp()
+
     def test_interfaces(self):
         from AccessControl.interfaces import IUser
         from Products.CMFCore.interfaces import IMember

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_MembershipTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_MembershipTool.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_MembershipTool.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -23,6 +23,7 @@
 from zope.testing.cleanup import cleanUp
 
 from Products.CMFCore.CMFBTreeFolder import CMFBTreeFolder
+from Products.CMFCore.interfaces import IMemberDataTool
 from Products.CMFCore.interfaces import ISiteRoot
 from Products.CMFCore.MemberDataTool import MemberDataTool
 from Products.CMFCore.PortalFolder import PortalFolder
@@ -175,9 +176,10 @@
         sm = getSiteManager()
         sm.registerUtility(site, ISiteRoot)
         mtool = site.portal_membership
-        members = site._setObject( 'Members', PortalFolder('Members') )
-        acl_users = site._setObject( 'acl_users', DummyUserFolder() )
-        mdtool = site._setObject( 'portal_memberdata', MemberDataTool() )
+        members = site._setObject('Members', PortalFolder('Members'))
+        acl_users = site._setObject('acl_users', DummyUserFolder())
+        mdtool = MemberDataTool()
+        sm.registerUtility(mdtool, IMemberDataTool)
         newSecurityManager(None, acl_users.all_powerful_Oz)
 
         self.assertEqual( acl_users.getUserById('user_foo'),
@@ -200,12 +202,13 @@
         # http://www.zope.org/Collectors/CMF/481
         # Make sure we get the right exception
         site = self._makeSite()
+        sm = getSiteManager()
+        sm.registerUtility(site, ISiteRoot)
         mtool = site.portal_membership
-        members = site._setObject( 'Members', PortalFolder('Members') )
-        acl_users = site._setObject( 'acl_users', DummyUserFolder() )
-        utool = site._setObject( 'portal_url', DummyTool() )
-        wtool = site._setObject( 'portal_workflow', DummyTool() )
-        mdtool = site._setObject( 'portal_memberdata', MemberDataTool() )
+        members = site._setObject('Members', PortalFolder('Members'))
+        acl_users = site._setObject('acl_users', DummyUserFolder())
+        mdtool = MemberDataTool()
+        sm.registerUtility(mdtool, IMemberDataTool)
         newSecurityManager(None, acl_users.all_powerful_Oz)
 
         self.assertEqual( acl_users.getUserById('user_foo'),
@@ -228,6 +231,7 @@
 
         # Cleanup
         DummyUserFolder.userFolderDelUsers = deletion_method
+        cleanUp()
 
     def test_getMemberById_nonesuch(self):
         INVALID_USER_ID = 'nonesuch'

Modified: Products.CMFCore/trunk/setup.py
===================================================================
--- Products.CMFCore/trunk/setup.py	2011-09-13 09:02:57 UTC (rev 122783)
+++ Products.CMFCore/trunk/setup.py	2011-09-13 09:19:30 UTC (rev 122784)
@@ -47,6 +47,7 @@
       install_requires=[
           'setuptools',
           'Zope2 >= 2.13.4',
+          'five.globalrequest',
           'five.localsitemanager',
           'Products.BTreeFolder2',
           'Products.GenericSetup',



More information about the checkins mailing list