[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - converted one more tool

Yvo Schubbe y.2011 at wcm-solutions.de
Fri Sep 23 09:35:09 EST 2011


Log message for revision 122908:
  - converted one more tool

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  U   Products.CMFCore/trunk/Products/CMFCore/CachingPolicyManager.py
  UU  Products.CMFCore/trunk/Products/CMFCore/ContentTypeRegistry.py
  U   Products.CMFCore/trunk/Products/CMFCore/DynamicType.py
  UU  Products.CMFCore/trunk/Products/CMFCore/PortalFolder.py
  U   Products.CMFCore/trunk/Products/CMFCore/TypesTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/WorkflowTool.py
  UU  Products.CMFCore/trunk/Products/CMFCore/exportimport/content.py
  U   Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_content.py
  U   Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py
  UU  Products.CMFCore/trunk/Products/CMFCore/exportimport/typeinfo.py
  UU  Products.CMFCore/trunk/Products/CMFCore/namespace.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_OpaqueItems.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalContent.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_WorkflowTool.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2011-09-23 14:35:09 UTC (rev 122908)
@@ -9,8 +9,8 @@
 
 - tools: Converted several tools into utilities.
   ActionsTool, CatalogTool, CookieCrumbler, MemberDataTool, MembershipTool,
-  RegistrationTool, SkinsTool, URLTool and WorkflowTool are now local
-  utilities.
+  RegistrationTool, SkinsTool, TypesTool, URLTool and WorkflowTool are now
+  local utilities.
 
 - MemberDataTool: Changed property modes to 'w' and added 'fullname' property.
 

Modified: Products.CMFCore/trunk/Products/CMFCore/CachingPolicyManager.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CachingPolicyManager.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/CachingPolicyManager.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -818,34 +818,30 @@
     #
     #   'portal_caching' interface methods
     #
-    security.declareProtected( View, 'getHTTPCachingHeaders' )
-    def getHTTPCachingHeaders( self, content, view_method, keywords, time=None):
+    security.declareProtected(View, 'getHTTPCachingHeaders')
+    def getHTTPCachingHeaders(self, content, view_method, keywords, time=None):
         """
             Return a list of HTTP caching headers based on 'content',
             'view_method', and 'keywords'.
         """
-        # XXX: this method violates the rules for tools/utilities:
-        # createCPContext depends on a non-utility tool
-        context = createCPContext( content, view_method, keywords, time=time )
-        for policy_id, policy in self.listPolicies():
+        context = createCPContext(content, view_method, keywords, time=time)
+        for _policy_id, policy in self.listPolicies():
 
-            headers = policy.getHeaders( context )
+            headers = policy.getHeaders(context)
             if headers:
                 return headers
 
         return ()
 
-    security.declareProtected( View, 'getModTimeAndETag' )
-    def getModTimeAndETag( self, content, view_method, keywords, time=None):
+    security.declareProtected(View, 'getModTimeAndETag')
+    def getModTimeAndETag(self, content, view_method, keywords, time=None):
         """ Return the modification time and ETag for the content object,
             view method, and keywords as the tuple (modification_time, etag,
             set_last_modified_header), where modification_time is a DateTime,
             or None.
         """
-        # XXX: this method violates the rules for tools/utilities:
-        # createCPContext depends on a non-utility tool
-        context = createCPContext( content, view_method, keywords, time=time )
-        for policy_id, policy in self.listPolicies():
+        context = createCPContext(content, view_method, keywords, time=time)
+        for _policy_id, policy in self.listPolicies():
             if policy.getEnable304s() and policy.testPredicate(context):
 
                 last_modified = policy._mtime_func(context)

Modified: Products.CMFCore/trunk/Products/CMFCore/ContentTypeRegistry.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/ContentTypeRegistry.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/ContentTypeRegistry.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """ Basic Site content type registry
-
-$Id$
 """
 
 import os
@@ -24,14 +22,15 @@
 from App.special_dtml import DTMLFile
 from OFS.SimpleItem import SimpleItem
 from Persistence import PersistentMapping
+from zope.component import getUtility
 from zope.interface import implements
 from ZPublisher.mapply import mapply
 
 from Products.CMFCore.interfaces import IContentTypeRegistry
 from Products.CMFCore.interfaces import IContentTypeRegistryPredicate
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.permissions import ManagePortal
 from Products.CMFCore.utils import _dtmldir
-from Products.CMFCore.utils import getToolByName
 
 
 class MajorMinorPredicate( SimpleItem ):
@@ -168,7 +167,7 @@
         if self.extensions is None:
             return 0
 
-        base, ext = os.path.splitext( name )
+        _base, ext = os.path.splitext(name)
         if ext and ext[ 0 ] == '.':
             ext = ext[ 1: ]
 
@@ -426,26 +425,23 @@
                               + '?manage_tabs_message=Predicate+removed.'
                               )
 
-    security.declareProtected( ManagePortal, 'manage_testRegistry' )
-    manage_testRegistry = DTMLFile( 'registryTest', _dtmldir )
+    security.declareProtected(ManagePortal, 'manage_testRegistry')
+    manage_testRegistry = DTMLFile('registryTest', _dtmldir)
 
-    security.declareProtected( ManagePortal, 'doTestRegistry' )
-    def doTestRegistry( self, name, content_type, body, REQUEST ):
+    security.declareProtected(ManagePortal, 'doTestRegistry')
+    def doTestRegistry(self, name, content_type, body, REQUEST):
         """
         """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
-        typeName = self.findTypeName( name, content_type, body )
+        typeName = self.findTypeName(name, content_type, body)
         if typeName is None:
             typeName = '<unknown>'
         else:
-            types_tool = getToolByName(self, 'portal_types')
-            typeName = types_tool.getTypeInfo(typeName).Title()
-        REQUEST[ 'RESPONSE' ].redirect( self.absolute_url()
-                               + '/manage_testRegistry'
-                               + '?testResults=Type:+%s'
-                                       % urllib.quote( typeName )
-                               )
+            ttool = getUtility(ITypesTool)
+            typeName = ttool.getTypeInfo(typeName).Title()
+        REQUEST['RESPONSE'].redirect(self.absolute_url()
+                                     + '/manage_testRegistry'
+                                     + '?testResults=Type:+%s'
+                                     % urllib.quote(typeName))
 
     #
     #   Predicate manipulation
@@ -532,7 +528,7 @@
         """
             Bind the given predicate to a particular type object.
         """
-        pred, oldTypeObjName = self.predicates[ predicate_id ]
+        pred, _oldTypeObjName = self.predicates[predicate_id]
         self.predicates[ predicate_id ] = ( pred, typeObjectName )
 
     #


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

Modified: Products.CMFCore/trunk/Products/CMFCore/DynamicType.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/DynamicType.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/DynamicType.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -18,14 +18,15 @@
 from App.class_init import InitializeClass
 from zope.component import getUtility
 from zope.component import queryMultiAdapter
+from zope.component import queryUtility
 from zope.component.interfaces import ComponentLookupError
 from zope.interface import implements
 from zope.publisher.defaultview import queryDefaultViewName
 
 from Products.CMFCore.Expression import getExprContext
 from Products.CMFCore.interfaces import IDynamicType
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.interfaces import IURLTool
-from Products.CMFCore.utils import getToolByName
 
 
 class DynamicType:
@@ -68,7 +69,7 @@
     def getTypeInfo(self):
         """ Get the TypeInformation object specified by the portal type.
         """
-        tool = getToolByName(self, 'portal_types', None)
+        tool = queryUtility(ITypesTool)
         if tool is None:
             return None
         return tool.getTypeInfo(self)  # Can return None.

Modified: Products.CMFCore/trunk/Products/CMFCore/PortalFolder.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/PortalFolder.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/PortalFolder.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """ PortalFolder: CMF-enabled Folder objects.
-
-$Id$
 """
 
 import base64
@@ -25,6 +23,7 @@
 from App.class_init import InitializeClass
 from OFS.Folder import Folder
 from OFS.OrderSupport import OrderSupport
+from zope.component import getUtility
 from zope.component.factory import Factory
 from zope.interface import implements
 
@@ -36,6 +35,7 @@
 from Products.CMFCore.interfaces import IFolderish
 from Products.CMFCore.interfaces import IMutableMinimalDublinCore
 from Products.CMFCore.interfaces import ISiteRoot
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.permissions import AddPortalContent
 from Products.CMFCore.permissions import AddPortalFolders
 from Products.CMFCore.permissions import DeleteObjects
@@ -125,9 +125,9 @@
             List type info objects for types which can be added in
             this folder.
         """
-        portal_types = getToolByName(self, 'portal_types')
-        myType = portal_types.getTypeInfo(self)
-        result = portal_types.listTypeInfo()
+        ttool = getUtility(ITypesTool)
+        myType = ttool.getTypeInfo(self)
+        result = ttool.listTypeInfo()
 
         if myType is not None:
             return [t for t in result if myType.allowType(t.getId()) and
@@ -149,8 +149,8 @@
         pt = filt.get('portal_type', [])
         if isinstance(pt, basestring):
             pt = [pt]
-        types_tool = getToolByName(self, 'portal_types')
-        allowed_types = types_tool.listContentTypes()
+        ttool = getUtility(ITypesTool)
+        allowed_types = ttool.listContentTypes()
         if not pt:
             pt = allowed_types
         else:
@@ -284,14 +284,14 @@
     def invokeFactory(self, type_name, id, RESPONSE=None, *args, **kw):
         """ Invokes the portal_types tool.
         """
-        pt = getToolByName(self, 'portal_types')
-        myType = pt.getTypeInfo(self)
+        ttool = getUtility(ITypesTool)
+        myType = ttool.getTypeInfo(self)
 
         if myType is not None:
             if not myType.allowType( type_name ):
                 raise ValueError('Disallowed subobject type: %s' % type_name)
 
-        return pt.constructContent(type_name, self, id, RESPONSE, *args, **kw)
+        return ttool.constructContent(type_name, self, id, RESPONSE, *args, **kw)
 
     security.declareProtected(AddPortalContent, 'checkIdAvailable')
     def checkIdAvailable(self, id):
@@ -405,15 +405,15 @@
 
             if type_name is not None:
 
-                pt = getToolByName(self, 'portal_types')
-                myType = pt.getTypeInfo(self)
+                ttool = getUtility(ITypesTool)
+                myType = ttool.getTypeInfo(self)
 
                 if myType is not None and not myType.allowType(type_name):
                     raise ValueError('Disallowed subobject type: %s'
                                         % type_name)
 
                 # Check for workflow guards
-                objType = pt.getTypeInfo(type_name)
+                objType = ttool.getTypeInfo(type_name)
                 if ( objType is not None and
                      not objType._checkWorkflowAllowed(self) ):
                     raise ValueError('Pasting not allowed in this workflow')


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

Modified: Products.CMFCore/trunk/Products/CMFCore/TypesTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/TypesTool.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/TypesTool.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -22,15 +22,16 @@
 from Acquisition import aq_get
 from App.class_init import InitializeClass
 from App.special_dtml import DTMLFile
+from OFS.ObjectManager import IFAwareObjectManager
 from OFS.OrderedFolder import OrderedFolder
-from OFS.ObjectManager import IFAwareObjectManager
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from zope.component import getUtility
 from zope.component import queryUtility
 from zope.component.interfaces import IFactory
+from zope.container.contained import notifyContainerModified
 from zope.container.contained import ObjectAddedEvent
-from zope.container.contained import notifyContainerModified
 from zope.event import notify
+from zope.globalrequest import getRequest
 from zope.i18nmessageid import Message
 from zope.interface import implements
 from zope.lifecycleevent import ObjectCreatedEvent
@@ -51,6 +52,7 @@
 from Products.CMFCore.utils import _checkPermission
 from Products.CMFCore.utils import _dtmldir
 from Products.CMFCore.utils import _wwwdir
+from Products.CMFCore.utils import registerToolInterface
 from Products.CMFCore.utils import SimpleItemWithProperties
 from Products.CMFCore.utils import UniqueObject
 
@@ -537,8 +539,6 @@
 
         Does not do any security checks.
         """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on self.REQUEST
         id = str(id)
 
         if self.product:
@@ -547,7 +547,10 @@
 
             if getattr(aq_base(m), 'isDocTemp', 0):
                 kw['id'] = id
-                newid = m(m.aq_parent, self.REQUEST, *args, **kw)
+                request = aq_get(self, 'REQUEST', None)
+                if request is None:
+                    request = getRequest()
+                newid = m(m.aq_parent, request, *args, **kw)
             else:
                 newid = m(id, *args, **kw)
             # allow factory to munge ID
@@ -855,10 +858,11 @@
         _dict = {}
         for ti in self.listTypeInfo():
             aliases = ti.getMethodAliases()
-            for k, v in aliases.items():
+            for k in aliases.keys():
                 _dict[k] = 1
         rval = _dict.keys()
         rval.sort()
         return rval
 
 InitializeClass(TypesTool)
+registerToolInterface('portal_types', ITypesTool)

Modified: Products.CMFCore/trunk/Products/CMFCore/WorkflowTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/WorkflowTool.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/WorkflowTool.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -27,14 +27,14 @@
 from zope.component import adapts
 from zope.component import getMultiAdapter
 from zope.component import queryMultiAdapter
+from zope.component import queryUtility
 from zope.event import notify
-from zope.globalrequest import getRequest
 from zope.interface import implementer
 from zope.interface import implements
-from ZPublisher.BaseRequest import RequestContainer
 
 from Products.CMFCore.ActionProviderBase import ActionProviderBase
 from Products.CMFCore.interfaces import IConfigurableWorkflowTool
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.interfaces import IWorkflowAware
 from Products.CMFCore.interfaces import IWorkflowDefinition
 from Products.CMFCore.interfaces import IWorkflowHistory
@@ -42,7 +42,6 @@
 from Products.CMFCore.interfaces import IWorkflowTool
 from Products.CMFCore.permissions import ManagePortal
 from Products.CMFCore.utils import _dtmldir
-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
@@ -470,9 +469,7 @@
     def getDefaultChainFor(self, ob):
         """ Get the default chain, if applicable, for ob.
         """
-        request_container = RequestContainer(REQUEST=getRequest())
-        rich_context = self.__of__(request_container)
-        ttool = getToolByName(rich_context, 'portal_types', None)
+        ttool = queryUtility(ITypesTool)
         if ttool is not None and ttool.getTypeInfo(ob) is not None:
             return self._default_chain
         return ()
@@ -506,9 +503,7 @@
     def _listTypeInfo(self):
         """ List the portal types which are available.
         """
-        request_container = RequestContainer(REQUEST=getRequest())
-        rich_context = self.__of__(request_container)
-        ttool = getToolByName(rich_context, 'portal_types', None)
+        ttool = queryUtility(ITypesTool)
         if ttool is not None:
             return ttool.listTypeInfo()
         return ()
@@ -549,7 +544,6 @@
 
     security.declarePrivate( '_recursiveUpdateRoleMappings' )
     def _recursiveUpdateRoleMappings(self, ob, wfs):
-
         """ Update roles-permission mappings recursively, and
             reindex special index.
         """
@@ -576,7 +570,7 @@
         if hasattr(aq_base(ob), 'objectItems'):
             obs = ob.objectItems()
             if obs:
-                for k, v in obs:
+                for _k, v in obs:
                     changed = getattr(v, '_p_changed', 0)
                     count = count + self._recursiveUpdateRoleMappings(v, wfs)
                     if changed is None:

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/content.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/content.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/content.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """Filesystem exporter / importer adapters.
-
-$Id$
 """
 
 from csv import reader
@@ -20,12 +18,13 @@
 from ConfigParser import ConfigParser
 from StringIO import StringIO
 
+from zope.component import getUtility
 from zope.interface import implements
 
+from Products.CMFCore.interfaces import ITypesTool
+from Products.GenericSetup.content import _globtest
 from Products.GenericSetup.interfaces import IFilesystemExporter
 from Products.GenericSetup.interfaces import IFilesystemImporter
-from Products.GenericSetup.content import _globtest
-from Products.CMFCore.utils import getToolByName
 
 #
 #   setup_tool handlers
@@ -197,7 +196,7 @@
         context = self.context
         properties = import_context.readDataFile('.properties',
                                                  '%s/%s' % (subdir, id))
-        tool = getToolByName(context, 'portal_types')
+        tool = getUtility(ITypesTool)
 
         try:
             tool.constructContent(portal_type, context, id)


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

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_content.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_content.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_content.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -20,8 +20,10 @@
 from ConfigParser import ConfigParser
 from StringIO import StringIO
 
+from zope.component import getSiteManager
 from zope.testing.cleanup import cleanUp
 
+from Products.CMFCore.interfaces import ITypesTool
 from Products.GenericSetup.tests.common import DummyExportContext
 from Products.GenericSetup.tests.common import DummyImportContext
 
@@ -591,7 +593,7 @@
         after = site.objectIds()
         self.assertEqual(len(after), 0)
         self.assertEqual(len(context._notes), len(ITEM_IDS))
-        for level, component, message in context._notes:
+        for _level, component, message in context._notes:
             self.assertEqual(component, 'SFWA')
             self.failUnless(message.startswith("Couldn't make"))
 
@@ -912,11 +914,12 @@
     folder = PortalFolder(id)
     folder.portal_type = TEST_FOLDER
     if site_folder:
-        tool = folder.portal_types = TypesTool()
-        tool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE))
-        tool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE))
-        tool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT))
-        tool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER))
+        ttool = TypesTool()
+        ttool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE))
+        ttool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE))
+        ttool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT))
+        ttool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER))
+        getSiteManager().registerUtility(ttool, ITypesTool)
 
     return folder
 

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -17,15 +17,17 @@
 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
 from Products.GenericSetup.tests.common import DummyExportContext
 from Products.GenericSetup.tests.common import DummyImportContext
 
-from Products.CMFCore.permissions import View
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.permissions import AccessContentsInformation
 from Products.CMFCore.permissions import ModifyPortalContent
+from Products.CMFCore.permissions import View
 from Products.CMFCore.testing import ExportImportZCMLLayer
 from Products.CMFCore.tests.base.testcase import WarningInterceptor
 from Products.CMFCore.TypesTool import FactoryTypeInformation
@@ -398,9 +400,9 @@
         self._free_warning_output()
 
     def _initSite(self, foo=0):
-        self.root.site = Folder(id='site')
-        site = self.root.site
-        ttool = site.portal_types = TypesTool()
+        site = Folder(id='site').__of__(self.app)
+        ttool = TypesTool()
+        getSiteManager().registerUtility(ttool, ITypesTool)
 
         if foo == 1:
             fti = _TI_LIST[0].copy()
@@ -413,7 +415,7 @@
             sti = _TI_LIST_WITH_FILENAME[1].copy()
             ttool._setObject(sti['id'], ScriptableTypeInformation(**sti))
 
-        return site
+        return site, ttool
 
 
 class exportTypesToolTests(_TypeInfoSetup):
@@ -436,7 +438,7 @@
     def test_normal(self):
         from Products.CMFCore.exportimport.typeinfo import exportTypesTool
 
-        site = self._initSite(1)
+        site, _ttool = self._initSite(1)
         context = DummyExportContext(site)
         exportTypesTool(context)
 
@@ -459,7 +461,7 @@
     def test_with_filenames(self):
         from Products.CMFCore.exportimport.typeinfo import exportTypesTool
 
-        site = self._initSite(2)
+        site, _ttool = self._initSite(2)
         context = DummyExportContext(site)
         exportTypesTool(context)
 
@@ -489,8 +491,7 @@
     def test_empty_default_purge(self):
         from Products.CMFCore.exportimport.typeinfo import importTypesTool
 
-        site = self._initSite(1)
-        tool = site.portal_types
+        site, tool = self._initSite(1)
 
         self.assertEqual(len(tool.objectIds()), 2)
 
@@ -503,8 +504,7 @@
     def test_empty_explicit_purge(self):
         from Products.CMFCore.exportimport.typeinfo import importTypesTool
 
-        site = self._initSite(1)
-        tool = site.portal_types
+        site, tool = self._initSite(1)
 
         self.assertEqual(len(tool.objectIds()), 2)
 
@@ -517,8 +517,7 @@
     def test_empty_skip_purge(self):
         from Products.CMFCore.exportimport.typeinfo import importTypesTool
 
-        site = self._initSite(1)
-        tool = site.portal_types
+        site, tool = self._initSite(1)
 
         self.assertEqual(len(tool.objectIds()), 2)
 
@@ -531,8 +530,7 @@
     def test_normal(self):
         from Products.CMFCore.exportimport.typeinfo import importTypesTool
 
-        site = self._initSite()
-        tool = site.portal_types
+        site, tool = self._initSite()
 
         self.assertEqual(len(tool.objectIds()), 0)
 
@@ -549,8 +547,7 @@
     def test_with_filenames(self):
         from Products.CMFCore.exportimport.typeinfo import importTypesTool
 
-        site = self._initSite()
-        tool = site.portal_types
+        site, tool = self._initSite()
 
         self.assertEqual(len(tool.objectIds()), 0)
 
@@ -567,8 +564,7 @@
     def test_migration(self):
         from Products.CMFCore.exportimport.typeinfo import importTypesTool
 
-        site = self._initSite()
-        tool = site.portal_types
+        site, tool = self._initSite()
 
         self.assertEqual(len(tool.objectIds()), 0)
 
@@ -586,8 +582,7 @@
     def test_normal_update(self):
         from Products.CMFCore.exportimport.typeinfo import importTypesTool
 
-        site = self._initSite()
-        tool = site.portal_types
+        site, tool = self._initSite()
 
         context = DummyImportContext(site)
         context._files['types.xml'] = self._NORMAL_TOOL_EXPORT
@@ -617,8 +612,7 @@
     def test_action_remove(self):
         from Products.CMFCore.exportimport.typeinfo import importTypesTool
 
-        site = self._initSite()
-        tool = site.portal_types
+        site, tool = self._initSite()
 
         self.assertEqual(len(tool.objectIds()), 0)
 

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/typeinfo.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/typeinfo.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/typeinfo.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -11,11 +11,10 @@
 #
 ##############################################################################
 """Types tool 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
@@ -27,7 +26,6 @@
 
 from Products.CMFCore.interfaces import ITypeInformation
 from Products.CMFCore.interfaces import ITypesTool
-from Products.CMFCore.utils import getToolByName
 
 
 class TypeInformationXMLAdapter(XMLAdapterBase, PropertyManagerHelpers):
@@ -214,8 +212,8 @@
 def importTypesTool(context):
     """Import types tool and content types from XML files.
     """
-    site = context.getSite()
-    tool = getToolByName(site, 'portal_types', None)
+    sm = getSiteManager(context.getSite())
+    tool = sm.queryUtility(ITypesTool)
     if tool is None:
         logger = context.getLogger('types')
         logger.debug('Nothing to import.')
@@ -226,8 +224,8 @@
 def exportTypesTool(context):
     """Export types tool content types as a set of XML files.
     """
-    site = context.getSite()
-    tool = getToolByName(site, 'portal_types', None)
+    sm = getSiteManager(context.getSite())
+    tool = sm.queryUtility(ITypesTool)
     if tool is None:
         logger = context.getLogger('types')
         logger.debug('Nothing to export.')


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

Modified: Products.CMFCore/trunk/Products/CMFCore/namespace.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/namespace.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/namespace.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -11,11 +11,10 @@
 #
 ##############################################################################
 """Namespace for CMF specific add views.
-
-$Id$
 """
 
 from zope.component import adapts
+from zope.component import getUtility
 from zope.component import queryMultiAdapter
 from zope.interface import implements
 from zope.interface import Interface
@@ -23,7 +22,7 @@
 from zope.traversing.interfaces import ITraversable
 
 from interfaces import IFolderish
-from utils import getToolByName
+from Products.CMFCore.interfaces import ITypesTool
 
 
 class AddViewTraverser(object):
@@ -39,7 +38,7 @@
         self.request = request
 
     def traverse(self, name, ignored):
-        ttool = getToolByName(self.context, 'portal_types')
+        ttool = getUtility(ITypesTool)
         ti = ttool.getTypeInfo(name)
         if ti is not None:
             add_view = queryMultiAdapter((self.context, self.request, ti),


Property changes on: Products.CMFCore/trunk/Products/CMFCore/namespace.py
___________________________________________________________________
Deleted: svn:mime-type
   - text/plain
Deleted: svn:keywords
   - Id

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_CachingPolicyManager.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_CachingPolicyManager.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_CachingPolicyManager.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -31,6 +31,7 @@
 from Products.CMFCore.FSDTMLMethod import FSDTMLMethod
 from Products.CMFCore.FSPageTemplate import FSPageTemplate
 from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.testing import FunctionalZCMLLayer
 from Products.CMFCore.testing import TraversingZCMLLayer
 from Products.CMFCore.tests.base.dummy import DummyContent
@@ -645,8 +646,9 @@
 
         # Create a fake portal and the tools we need
         self.portal = DummySite(id='portal').__of__(self.app)
-        self.portal._setObject('portal_types', DummyTool())
-        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
+        sm = getSiteManager()
+        sm.registerUtility(DummyTool(), IMembershipTool)
+        sm.registerUtility(DummyTool(), ITypesTool)
 
         # This is a FSPageTemplate that will be used as the View for
         # our content objects. It doesn't matter what it returns.
@@ -713,7 +715,9 @@
                       enable_304s = 0)
 
     def tearDown(self):
-        getSiteManager().unregisterUtility(provided=IMembershipTool)
+        sm = getSiteManager()
+        sm.unregisterUtility(provided=IMembershipTool)
+        sm.registerUtility(provided=ITypesTool)
         TransactionalTest.tearDown(self)
         FSDVTest.tearDown(self)
 
@@ -894,9 +898,10 @@
 
         # Create a fake portal and the tools we need
         self.portal = DummySite(id='portal').__of__(self.app)
-        self.portal._setObject('portal_types', DummyTool())
         CachingPolicyManager.manage_addCachingPolicyManager(self.portal)
-        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
+        sm = getSiteManager()
+        sm.registerUtility(DummyTool(), IMembershipTool)
+        sm.registerUtility(DummyTool(), ITypesTool)
 
     def tearDown(self):
         TransactionalTest.tearDown(self)

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -36,6 +36,7 @@
 
 from Products.CMFCore.DynamicType import DynamicType
 from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.interfaces import IURLTool
 from Products.CMFCore.tests.base.dummy import DummyObject
 from Products.CMFCore.tests.base.dummy import DummySite
@@ -73,9 +74,10 @@
 
     def setUp(self):
         self.site = DummySite('site')
-        self.site._setObject( 'portal_types', TypesTool() )
+        ttool = TypesTool()
+        getSiteManager().registerUtility(ttool, ITypesTool)
         fti = FTIDATA_CMF[0].copy()
-        self.site.portal_types._setObject( 'Dummy Content 15', FTI(**fti) )
+        ttool._setObject( 'Dummy Content 15', FTI(**fti) )
         self.site._setObject( 'foo', DummyContent() )
         dummy_view = self.site._setObject( 'dummy_view', DummyObject() )
 
@@ -153,14 +155,15 @@
 
     def setUp(self):
         SecurityTest.setUp(self)
-        self.site = DummySite('site').__of__(self.root)
+        self.site = DummySite('site').__of__(self.app)
+        ttool = TypesTool()
+        fti = FTIDATA_CMF[0].copy()
+        ttool._setObject( 'Dummy Content 15', FTI(**fti) )
+        self.site._setObject( 'foo', DummyContent() )
         sm = getSiteManager()
         sm.registerUtility(DummyTool(), IMembershipTool)
         sm.registerUtility(DummyTool().__of__(self.site), IURLTool)
-        self.site._setObject( 'portal_types', TypesTool() )
-        fti = FTIDATA_CMF[0].copy()
-        self.site.portal_types._setObject( 'Dummy Content 15', FTI(**fti) )
-        self.site._setObject( 'foo', DummyContent() )
+        sm.registerUtility(ttool, ITypesTool)
 
     def tearDown(self):
         cleanUp()

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_OpaqueItems.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_OpaqueItems.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_OpaqueItems.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -16,11 +16,13 @@
 import unittest
 import Testing
 
+from zope.component import getSiteManager
 from zope.interface import implements
 
 from Products.CMFCore.interfaces import ICallableOpaqueItem
 from Products.CMFCore.interfaces import ICallableOpaqueItemEvents
 from Products.CMFCore.interfaces import IContentish
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.PortalFolder import PortalFolder
 from Products.CMFCore.testing import TraversingEventZCMLLayer
 from Products.CMFCore.tests.base.dummy \
@@ -85,7 +87,7 @@
         self.id = id
         setattr(obj, id, self)
 
-    def __call__():
+    def __call__(self):
         return
 
     def getId(self):
@@ -137,23 +139,21 @@
     def setUp(self):
         SecurityTest.setUp(self)
 
-        root = self.root
-
         # setting up types tool
-        root._setObject( 'portal_types', TypesTool() )
+        getSiteManager().registerUtility(TypesTool(), ITypesTool)
 
         # setup portal
         try:
-            root._delObject('test')
+            self.app._delObject('test')
         except AttributeError:
             pass
-        root._setObject('test', PortalFolder('test', ''))
-        self.test = test = self.root.test
+        self.app._setObject('test', PortalFolder('test', ''))
+        self.test = test = self.app.test
 
         # setting up folders
-        test._setObject( 'folder', PortalFolder( 'folder', '' ) )
+        test._setObject('folder', PortalFolder('folder', ''))
         folder = self.folder = test.folder
-        folder._setObject( 'sub', PortalFolder( 'sub', '' ) )
+        folder._setObject('sub', PortalFolder('sub', ''))
         sub = self.sub = folder.sub
 
         #----- hacks to allow pasting (see also test_PortalFolder)
@@ -177,7 +177,7 @@
         dummy = addDummyContent(folder, 'dummy', None)
 
         # WAAAA! must get _p_jar set
-        old, dummy._p_jar = sub._p_jar, self.root._p_jar
+        old, dummy._p_jar = sub._p_jar, self.app._p_jar
         try:
             cp = folder.manage_copyObjects(ids=['dummy'])
             sub.manage_pasteObjects(cp)
@@ -194,7 +194,7 @@
         self.failIf(dummy.isNotifiedByBeforeDelete())
 
         # WAAAA! must get _p_jar set
-        old, dummy._p_jar = sub._p_jar, self.root._p_jar
+        old, dummy._p_jar = sub._p_jar, self.app._p_jar
         try:
             cp = folder.manage_copyObjects(ids=['dummy'])
             sub.manage_pasteObjects(cp)
@@ -215,7 +215,7 @@
         self.failIf(dummy.isNotifiedByBeforeDelete())
 
         # WAAAA! must get _p_jar set
-        old, dummy._p_jar = sub._p_jar, self.root._p_jar
+        old, dummy._p_jar = sub._p_jar, self.app._p_jar
         try:
             cp = folder.manage_copyObjects(ids=['dummy'])
             sub.manage_pasteObjects(cp)
@@ -236,7 +236,7 @@
         self.failIf(dummy.isNotifiedByBeforeDelete())
 
         # WAAAA! must get _p_jar set
-        old, dummy._p_jar = sub._p_jar, self.root._p_jar
+        old, dummy._p_jar = sub._p_jar, self.app._p_jar
         try:
             cp = folder.manage_copyObjects(ids=['dummy'])
             sub.manage_pasteObjects(cp)
@@ -258,7 +258,7 @@
         self.failIf(dummy.isNotifiedByBeforeDelete())
 
         # WAAAA! must get _p_jar set
-        old, dummy._p_jar = sub._p_jar, self.root._p_jar
+        old, dummy._p_jar = sub._p_jar, self.app._p_jar
         try:
             cp = folder.manage_copyObjects(ids=['dummy'])
             sub.manage_pasteObjects(cp)

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalContent.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalContent.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalContent.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -19,10 +19,12 @@
 from AccessControl.SecurityManagement import newSecurityManager
 from Acquisition import aq_base
 from OFS.Folder import Folder
+from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
 from zope.testing.cleanup import cleanUp
 
 from Products.CMFCore.exceptions import NotFound
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.testing import TraversingEventZCMLLayer
 from Products.CMFCore.tests.base.dummy import DummyContent
 from Products.CMFCore.tests.base.dummy import DummyObject
@@ -47,15 +49,16 @@
 
     def _setupCallTests(self, aliases):
         # root
-        root = Folder( 'root' )
+        root = Folder('root')
 
         # set up dummy type info with problematic double-default alias
-        root._setObject( 'portal_types', DummyTool() )
-        root.portal_types._type_actions = aliases
+        ttool = DummyTool()
+        ttool._type_actions = aliases
+        getSiteManager().registerUtility(ttool, ITypesTool)
 
         # dummy content and skin
-        root._setObject( 'dummycontent', DummyContent() )
-        root._setObject( 'dummy_view', DummyObject() )
+        root._setObject('dummycontent', DummyContent())
+        root._setObject('dummy_view', DummyObject())
         return root.dummycontent
 
     def test_DoubleDefaultAlias(self):
@@ -91,8 +94,8 @@
     def setUp(self):
         SecurityTest.setUp(self)
 
-        self.root._setObject('site', DummySite('site'))
-        self.site = self.root.site
+        self.app._setObject('site', DummySite('site'))
+        self.site = self.app.site
         self.acl_users = self.site._setObject('acl_users', DummyUserFolder())
 
     def _initContent(self, folder, id):

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -34,7 +34,6 @@
 from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.interfaces import IWorkflowTool
 from Products.CMFCore.testing import ConformsToFolder
-from Products.CMFCore.testing import FunctionalZCMLLayer
 from Products.CMFCore.testing import TraversingEventZCMLLayer
 from Products.CMFCore.tests.base.dummy import DummyContent
 from Products.CMFCore.tests.base.dummy import DummyFactoryDispatcher
@@ -95,13 +94,11 @@
         from Products.CMFCore.PortalFolder import PortalFolder
 
         SecurityTest.setUp(self)
-        sm = getSiteManager()
-        sm.registerUtility(self._getTargetObject(), IFactory, 'cmf.folder')
         self.site = DummySite('site').__of__(self.app)
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         newSecurityManager(None, acl_users.all_powerful_Oz)
 
-        ttool = self.site._setObject('portal_types', TypesTool())
+        self.ttool = ttool = TypesTool()
         ttool._setObject(self._PORTAL_TYPE,
                          FTI(id=self._PORTAL_TYPE,
                              title='Folder or Directory',
@@ -109,6 +106,9 @@
                              factory='cmf.folder',
                              filter_content_types=0))
         ttool._setObject('Dummy Content', FTI(**FTIDATA_DUMMY[0].copy()))
+        sm = getSiteManager()
+        sm.registerUtility(ttool, ITypesTool)
+        sm.registerUtility(self._getTargetObject(), IFactory, 'cmf.folder')
 
         self.f = self.site._setObject('container', PortalFolder('container'))
         self.f._setPortalTypeName(self._PORTAL_TYPE)
@@ -128,7 +128,7 @@
 
     def test_invokeFactory_disallowed_type(self):
         f = self.f
-        ftype = getattr(self.site.portal_types, self._PORTAL_TYPE)
+        ftype = getattr(self.ttool, self._PORTAL_TYPE)
         ftype.filter_content_types = 1
         self.assertRaises(ValueError,
                           f.invokeFactory, self._PORTAL_TYPE, 'sub')
@@ -154,7 +154,7 @@
 
 class PortalFolderSecurityTests(SecurityTest):
 
-    layer = FunctionalZCMLLayer
+    layer = TraversingEventZCMLLayer
 
     def _getTargetClass(self):
         from Products.CMFCore.PortalFolder import PortalFolder
@@ -173,7 +173,9 @@
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         newSecurityManager(None, acl_users.all_powerful_Oz)
 
-        ttool = self.site._setObject( 'portal_types', TypesTool() )
+        ttool = TypesTool()
+        getSiteManager().registerUtility(ttool, ITypesTool)
+
         f = self._makeOne('foo')
         self.assertEqual( f.objectValues(), [] )
         self.assertEqual( f.contentIds(), [] )
@@ -252,10 +254,11 @@
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         newSecurityManager(None, acl_users.all_powerful_Oz)
         test = self._makeOne('test')
-        self.site._setObject('portal_types', TypesTool())
         ctool = DummyCatalogTool()
-        getSiteManager().registerUtility(ctool, ICatalogTool)
         self.assertEqual(len(ctool), 0)
+        sm = getSiteManager()
+        sm.registerUtility(ctool, ICatalogTool)
+        sm.registerUtility(TypesTool(), ITypesTool)
 
         test._setObject('foo', DummyContent('foo' , catalog=1))
         foo = test.foo
@@ -269,26 +272,21 @@
         self.failUnless(foo.before_delete_called)
         self.assertEqual(len(ctool), 0)
 
-        getSiteManager().unregisterUtility(provided=ICatalogTool)
-
     def test_portalfolder_cataloging(self):
         #
         # Test to ensure a portal folder itself is *not* cataloged upon
         # instantiation (Tracker issue 309)
         #
-        self.site._setObject('portal_types', TypesTool())
-        sm = getSiteManager()
         ctool = DummyCatalogTool()
-        sm.registerUtility(ctool, ICatalogTool)
         wtool = WorkflowTool()
+        sm = getSiteManager()
+        sm.registerUtility(ctool, ICatalogTool)
         sm.registerUtility(wtool, IWorkflowTool)
+
         test = self._makeOne('test')
         wtool.notifyCreated(test)
         self.assertEqual(len(ctool), 0)
 
-        sm.unregisterUtility(provided=ICatalogTool)
-        sm.unregisterUtility(provided=IWorkflowTool)
-
     def test_tracker261(self):
         #
         #   Tracker issue #261 says that content in a deleted folder
@@ -300,7 +298,6 @@
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         newSecurityManager(None, acl_users.all_powerful_Oz)
         test = self._makeOne('test')
-        self.site._setObject('portal_types', TypesTool())
         ctool = DummyCatalogTool()
         getSiteManager().registerUtility(ctool, ICatalogTool)
         self.assertEqual(len(ctool), 0)
@@ -321,19 +318,18 @@
         self.failUnless( foo.before_delete_called )
         self.assertEqual( len(ctool), 0 )
 
-        getSiteManager().unregisterUtility(provided=ICatalogTool)
-
     def test_manageAddFolder(self):
         #
         #   Does MKDIR/MKCOL intercept work?
         #
         from Products.CMFCore.PortalFolder import PortalFolder
+        from Products.CMFCore.PortalFolder import PortalFolderFactory
 
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         newSecurityManager(None, acl_users.all_powerful_Oz)
         test = self._makeOne('test')
 
-        ttool = self.site._setObject( 'portal_types', TypesTool() )
+        ttool = TypesTool()
         ttool._setObject( 'Folder'
                         , FTI( id='Folder'
                              , title='Folder or Directory'
@@ -349,6 +345,9 @@
                              , factory='cmf.folder'
                              )
                         )
+        sm = getSiteManager()
+        sm.registerUtility(ttool, ITypesTool)
+        sm.registerUtility(PortalFolderFactory, IFactory, 'cmf.folder')
 
         # First, test default behavior
         test.manage_addFolder(id='simple', title='Simple')
@@ -384,7 +383,8 @@
         #
         #   _verifyObjectPaste() should honor allowed content types
         #
-        ttool = self.site._setObject( 'portal_types', TypesTool() )
+        ttool = TypesTool()
+        getSiteManager().registerUtility(ttool, ITypesTool)
         fti = FTIDATA_DUMMY[0].copy()
         ttool._setObject( 'Dummy Content', FTI(**fti) )
         ttool._setObject( 'Folder', FTI(**fti) )
@@ -413,13 +413,15 @@
         #
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         newSecurityManager(None, acl_users.all_powerful_Oz)
-        ttool = self.site._setObject('portal_types', TypesTool())
+        ttool = TypesTool()
         fti = FTIDATA_DUMMY[0].copy()
         ttool._setObject('Dummy Content', FTI(**fti))
         ttool._setObject('Folder', FTI(**fti))
         folder = self._makeOne('folder', 'Folder')
         content = self._makeOne('content')
         folder._setObject('content', content)
+        sm = getSiteManager()
+        sm.registerUtility(ttool, ITypesTool)
 
         # Allow adding of Dummy Content
         ttool.Folder.manage_changeProperties(filter_content_types=False)
@@ -445,11 +447,9 @@
                 return self._workflows
 
         # Now copy/paste verification should raise a ValueError
-        getSiteManager().registerUtility(DummyWorkflowTool(), IWorkflowTool)
+        sm.registerUtility(DummyWorkflowTool(), IWorkflowTool)
         self.assertRaises(ValueError, folder._verifyObjectPaste, content)
 
-        getSiteManager().unregisterUtility(provided=IWorkflowTool)
-
     def test_setObjectRaisesBadRequest(self):
         #
         #   _setObject() should raise BadRequest on duplicate id
@@ -485,8 +485,9 @@
         newSecurityManager(None, acl_users.all_powerful_Oz)
         test = self._makeOne('test')
         test._setPortalTypeName('Dummy Content 15')
-        ttool = self.site._setObject('portal_types', TypesTool())
+        ttool = TypesTool()
         ttool._setObject('Dummy Content 15', FTI(**FTIDATA_CMF[0]))
+        getSiteManager().registerUtility(ttool, ITypesTool)
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         test._checkId('view.html')
         newSecurityManager(None, acl_users.user_foo)
@@ -548,9 +549,10 @@
 
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         newSecurityManager(None, acl_users.all_powerful_Oz)
-        self.site._setObject( 'portal_types', TypesTool() )
         ctool = DummyCatalogTool()
-        getSiteManager().registerUtility(ctool, ICatalogTool)
+        sm = getSiteManager()
+        sm.registerUtility(TypesTool(), ITypesTool)
+        sm.registerUtility(ctool, ICatalogTool)
         self.assertEqual( len(ctool), 0 )
 
         folder = self._makeOne('folder')
@@ -597,14 +599,16 @@
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         newSecurityManager(None, acl_users.all_powerful_Oz)
         ctool = DummyCatalogTool()
-        getSiteManager().registerUtility(ctool, ICatalogTool)
-        ttool = self.site._setObject( 'portal_types', TypesTool() )
+        ttool = TypesTool()
         fti = FTIDATA_DUMMY[0].copy()
         ttool._setObject( 'Dummy Content', FTI(**fti) )
         sub1 = self._makeOne('sub1')
         sub2 = self._makeOne('sub2')
         sub3 = self._makeOne('sub3')
         self.assertEqual( len(ctool), 0 )
+        sm = getSiteManager()
+        sm.registerUtility(ctool, ICatalogTool)
+        sm.registerUtility(ttool, ITypesTool)
 
         sub1._setObject( 'dummy', DummyContent( 'dummy', catalog=1 ) )
         self.failUnless( 'dummy' in sub1.objectIds() )
@@ -976,7 +980,7 @@
 
 class PortalFolderCopySupportTests(SecurityTest):
 
-    layer = FunctionalZCMLLayer
+    layer = TraversingEventZCMLLayer
 
     def _initFolders(self):
         from Products.CMFCore.PortalFolder import PortalFolder
@@ -1166,19 +1170,7 @@
                                              + '.*%s' % ADD_IMAGES_AND_FILES
                                    )
 
-    def test_move_cant_delete_source( self ):
-
-        #
-        #   This test fails on Zope's earlier than 2.7.3 because of the
-        #   changes required to 'OFS.CopytSupport.manage_pasteObjects'
-        #   which must pass 'validate_src' of 2 to '_verifyObjectPaste'
-        #   to indicate that the object is being moved, rather than
-        #   simply copied.
-        #
-        #   If you are running with such a Zope, this test will fail,
-        #   because the move (which should raise Unauthorized) will be
-        #   allowed.
-        #
+    def test_move_cant_delete_source(self):
         from AccessControl.Permissions import delete_objects as DeleteObjects
         from Products.CMFCore.PortalFolder import PortalFolder
 
@@ -1188,8 +1180,6 @@
         folder1._setObject( 'sub', PortalFolder( 'sub' ) )
         transaction.savepoint(optimistic=True) # get a _p_jar for 'sub'
 
-        self.app.portal_types = DummyTypesTool()
-
         def _no_delete_objects(permission, object, context):
             return permission != DeleteObjects
 
@@ -1203,7 +1193,6 @@
                                    )
 
     def test_paste_with_restricted_item_content_type_not_allowed(self):
-
         #   Test from CMF Collector #216 (Plone #2186), for the case
         #   in which the item being pasted does not allow adding such
         #   objects to containers which do not explicitly grant access.
@@ -1218,10 +1207,9 @@
 
         self._initPolicyAndUser() # ensure that sec. machinery allows paste
 
-        self.app._setObject( 'portal_types', TypesTool() )
-        types_tool = self.app.portal_types
-        types_tool._setObject( RESTRICTED_TYPE
-                             , FTI( id=RESTRICTED_TYPE
+        ttool = TypesTool()
+        ttool._setObject(RESTRICTED_TYPE,
+                                FTI(id=RESTRICTED_TYPE
                                   , title=RESTRICTED_TYPE
                                   , meta_type=PortalFolder.meta_type
                                   , product='CMFCore'
@@ -1229,8 +1217,8 @@
                                   , global_allow=0
                                   )
                              )
-        types_tool._setObject( UNRESTRICTED_TYPE
-                             , FTI( id=UNRESTRICTED_TYPE
+        ttool._setObject(UNRESTRICTED_TYPE,
+                                FTI(id=UNRESTRICTED_TYPE
                                   , title=UNRESTRICTED_TYPE
                                   , meta_type=PortalFolder.meta_type
                                   , product='CMFCore'
@@ -1238,17 +1226,14 @@
                                   , filter_content_types=0
                                   )
                              )
+        getSiteManager().registerUtility(ttool, ITypesTool)
 
         # copy and pasting the object into the folder should raise
         # an exception
-        copy_cookie = self.app.manage_copyObjects( ids=[ 'folder2' ] )
-        self.assertRaises( ValueError
-                         , folder1.manage_pasteObjects
-                         , copy_cookie
-                         )
+        copy_cookie = self.app.manage_copyObjects(ids=['folder2'])
+        self.assertRaises(ValueError, folder1.manage_pasteObjects, copy_cookie)
 
     def test_paste_with_restricted_item_content_type_allowed(self):
-
         #   Test from CMF Collector #216 (Plone #2186), for the case
         #   in which the item being pasted *does8 allow adding such
         #   objects to containers which *do* explicitly grant access.
@@ -1263,10 +1248,9 @@
 
         self._initPolicyAndUser() # ensure that sec. machinery allows paste
 
-        self.app._setObject( 'portal_types', TypesTool() )
-        types_tool = self.app.portal_types
-        types_tool._setObject( RESTRICTED_TYPE
-                             , FTI( id=RESTRICTED_TYPE
+        ttool = TypesTool()
+        ttool._setObject(RESTRICTED_TYPE,
+                                FTI(id=RESTRICTED_TYPE
                                   , title=RESTRICTED_TYPE
                                   , meta_type=PortalFolder.meta_type
                                   , product='CMFCore'
@@ -1274,25 +1258,25 @@
                                   , global_allow=0
                                   )
                              )
-        types_tool._setObject( UNRESTRICTED_TYPE
-                             , FTI( id=UNRESTRICTED_TYPE
+        ttool._setObject(UNRESTRICTED_TYPE,
+                                FTI(id=UNRESTRICTED_TYPE
                                   , title=UNRESTRICTED_TYPE
                                   , meta_type=PortalFolder.meta_type
                                   , product='CMFCore'
                                   , factory='manage_addPortalFolder'
                                   , filter_content_types=1
-                                  , allowed_content_types=[ RESTRICTED_TYPE ]
+                                  , allowed_content_types=[RESTRICTED_TYPE]
                                   )
                              )
+        getSiteManager().registerUtility(ttool, ITypesTool)
 
         # copy and pasting the object into the folder should *not* raise
         # an exception, because the folder's type allows it.
-        copy_cookie = self.app.manage_copyObjects( ids=[ 'folder2' ] )
-        folder1.manage_pasteObjects( copy_cookie )
-        self.failUnless( 'folder2' in folder1.objectIds() )
+        copy_cookie = self.app.manage_copyObjects(ids=['folder2'])
+        folder1.manage_pasteObjects(copy_cookie)
+        self.failUnless('folder2' in folder1.objectIds())
 
     def test_paste_with_restricted_container_content_type(self):
-
         #   Test from CMF Collector #216 (Plone #2186), for the case
         #   in which the container does not allow adding items of the
         #   type being pasted.
@@ -1307,10 +1291,9 @@
 
         self._initPolicyAndUser() # ensure that sec. machinery allows paste
 
-        self.app._setObject( 'portal_types', TypesTool() )
-        types_tool = self.app.portal_types
-        types_tool._setObject( RESTRICTED_TYPE
-                             , FTI( id=RESTRICTED_TYPE
+        ttool = TypesTool()
+        ttool._setObject(RESTRICTED_TYPE,
+                                FTI(id=RESTRICTED_TYPE
                                   , title=RESTRICTED_TYPE
                                   , meta_type=PortalFolder.meta_type
                                   , product='CMFCore'
@@ -1319,8 +1302,8 @@
                                   , allowed_content_types=()
                                   )
                              )
-        types_tool._setObject( UNRESTRICTED_TYPE
-                             , FTI( id=UNRESTRICTED_TYPE
+        ttool._setObject(UNRESTRICTED_TYPE,
+                                FTI(id=UNRESTRICTED_TYPE
                                   , title=UNRESTRICTED_TYPE
                                   , meta_type=PortalFolder.meta_type
                                   , product='CMFCore'
@@ -1328,29 +1311,14 @@
                                   , global_allow=1
                                   )
                              )
+        getSiteManager().registerUtility(ttool, ITypesTool)
 
         # copy and pasting the object into the folder should raise
         # an exception
-        copy_cookie = self.app.manage_copyObjects( ids=[ 'folder2' ] )
-        self.assertRaises( ValueError
-                         , folder1.manage_pasteObjects
-                         , copy_cookie
-                         )
+        copy_cookie = self.app.manage_copyObjects(ids=['folder2'])
+        self.assertRaises(ValueError, folder1.manage_pasteObjects, copy_cookie)
 
-class DummyTypeInfo:
 
-    def allowType( self, portal_type ):
-        return True
-
-class DummyTypesTool( Implicit ):
-
-    implements(ITypesTool)
-
-    def getTypeInfo( self, portal_type ):
-
-        return DummyTypeInfo()
-
-
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(PortalFolderFactoryTests),

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_WorkflowTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_WorkflowTool.py	2011-09-23 14:20:30 UTC (rev 122907)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_WorkflowTool.py	2011-09-23 14:35:09 UTC (rev 122908)
@@ -18,6 +18,7 @@
 
 from OFS.SimpleItem import SimpleItem
 from zope.component import adapter
+from zope.component import getSiteManager
 from zope.component import provideHandler
 from zope.interface import implements
 from zope.interface.verify import verifyClass
@@ -27,6 +28,7 @@
 from Products.CMFCore.interfaces import IActionSucceededEvent
 from Products.CMFCore.interfaces import IActionWillBeInvokedEvent
 from Products.CMFCore.interfaces import IContentish
+from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.interfaces import IWorkflowAware
 from Products.CMFCore.interfaces import IWorkflowDefinition
 from Products.CMFCore.testing import TraversingEventZCMLLayer
@@ -168,12 +170,11 @@
 
         return tool
 
-    def _makeRoot( self ):
+    def _makeRoot(self):
+        from OFS.Folder import Folder
 
-        from OFS.Folder import Folder
-        root = Folder( 'root' )
-        tt = DummyTypesTool()
-        root._setObject( 'portal_types', tt )
+        root = Folder('root')
+        getSiteManager().registerUtility(DummyTypesTool(), ITypesTool)
         return root
 
     def _makeWithTypes( self ):



More information about the checkins mailing list