[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - finished converting tools into local utilities

Yvo Schubbe y.2011 at wcm-solutions.de
Mon Sep 26 03:51:29 EST 2011


Log message for revision 122941:
  - finished converting tools into local utilities

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
  U   Products.CMFDefault/trunk/Products/CMFDefault/DublinCore.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/Favorite.py
  UU  Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py
  UU  Products.CMFDefault/trunk/Products/CMFDefault/SyndicationInfo.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/syndication.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/tests/test_syndication.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/authentication.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/utils.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/formlib/form.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/formlib/widgets.txt
  U   Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/componentregistry.xml
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/disableSyndication.py
  UU  Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/editSynProperties.py
  UU  Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/enableSyndication.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/get_permalink.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Discussions.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DublinCore.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_File.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Image.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Portal.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_PropertiesTool.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_SyndicationInfo.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_SyndicationTool.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py
  UU  Products.CMFDefault/trunk/Products/CMFDefault/utils.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2011-09-26 08:51:28 UTC (rev 122941)
@@ -4,10 +4,7 @@
 2.3.0-alpha (unreleased)
 ------------------------
 
-- tools: Converted several tools into utilities.
-  ActionsTool, CatalogTool, CookieCrumbler, MemberDataTool, MembershipTool,
-  RegistrationTool, SkinsTool, TypesTool, URLTool and WorkflowTool are now
-  local utilities.
+- tools: Converted all tools into local utilities.
 
 - skins and browser views: setRedirect now checks Action conditions.
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/DublinCore.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/DublinCore.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/DublinCore.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -20,12 +20,13 @@
 from App.special_dtml import DTMLFile
 from DateTime.DateTime import DateTime
 from OFS.PropertyManager import PropertyManager
+from zope.component import queryUtility
 from zope.interface import implements
 
 from Products.CMFCore.interfaces import ICatalogableDublinCore
 from Products.CMFCore.interfaces import IDublinCore
+from Products.CMFCore.interfaces import IMetadataTool
 from Products.CMFCore.interfaces import IMutableDublinCore
-from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.permissions import ModifyPortalContent
 from Products.CMFDefault.permissions import View
 from Products.CMFDefault.utils import _dtmldir
@@ -156,11 +157,10 @@
         return self.description
 
     security.declareProtected(View, 'Publisher')
-    def Publisher( self ):
+    def Publisher(self):
         """ Dublin Core Publisher element - resource publisher.
         """
-        tool = getToolByName(self, 'portal_metadata', None)
-
+        tool = queryUtility(IMetadataTool)
         if tool is not None:
             return tool.getPublisher()
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/Favorite.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/Favorite.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/Favorite.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -20,19 +20,22 @@
 from App.class_init import InitializeClass
 from zope.component import adapter
 from zope.component import getUtility
+from zope.component import queryUtility
 from zope.component.factory import Factory
 from zope.container.interfaces import IObjectAddedEvent
 from zope.interface import implements
 
 from Products.CMFCore.interfaces import ISiteRoot
 from Products.CMFCore.interfaces import IURLTool
-from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl
 from Products.CMFDefault.interfaces import IFavorite
 from Products.CMFDefault.interfaces import IMutableFavorite
 from Products.CMFDefault.Link import Link
 from Products.CMFDefault.permissions import View
+from Products.CMFDefault.utils import PRODUCTS_CMFUID_INSTALLED
 
+if PRODUCTS_CMFUID_INSTALLED:
+    from Products.CMFUid.interfaces import IUniqueIdHandler
 
 def addFavorite(self, id, title='', remote_url='', description=''):
     """Add a Favorite.
@@ -67,20 +70,20 @@
         the unique id handler tool is available.
         """
         # check for unique id handler tool
-        handler = getToolByName(self, 'portal_uidhandler', None)
-        if handler is None:
+        uidtool = queryUtility(IUniqueIdHandler)
+        if uidtool is None:
             return
 
         obj = getUtility(ISiteRoot).restrictedTraverse(self.remote_url)
-        return handler.register(obj)
+        return uidtool.register(obj)
 
     def _getObjectByUid(self):
         """Registers and returns the uid of the remote object if
         the unique id handler tool is available.
         """
         # check for unique id handler tool
-        handler = getToolByName(self, 'portal_uidhandler', None)
-        if handler is None:
+        uidtool = queryUtility(IUniqueIdHandler)
+        if uidtool is None:
             return
 
         # check for remote uid info on object
@@ -88,7 +91,7 @@
         if uid is None:
             return
 
-        return handler.queryObject(uid, None)
+        return uidtool.queryObject(uid, None)
 
     security.declareProtected(View, 'getRemoteUrl')
     def getRemoteUrl(self):

Modified: Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """ CMFDefault portal_metadata tool.
-
-$Id$
 """
 
 from AccessControl.SecurityInfo import ClassSecurityInfo
@@ -555,7 +553,7 @@
     def setInitialMetadata( self, content ):
         """ See IMetadataTool.
         """
-        for schema_id, schema in self.listSchemas():
+        for _schema_id, schema in self.listSchemas():
             for element, policy in schema.listPolicies(
                                     content.getPortalTypeName()):
 
@@ -574,7 +572,7 @@
     def validateMetadata( self, content ):
         """ See IMetadataTool.
         """
-        for schema_id, schema in self.listSchemas():
+        for _schema_id, schema in self.listSchemas():
             for element, policy in schema.listPolicies(
                                     content.getPortalTypeName()):
 
@@ -591,5 +589,5 @@
                             'Value %s is not in allowed vocabulary for ' \
                             'metadata element %s.' % ( value, element )
 
-InitializeClass( MetadataTool )
+InitializeClass(MetadataTool)
 registerToolInterface('portal_metadata', IMetadataTool)


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

Modified: Products.CMFDefault/trunk/Products/CMFDefault/SyndicationInfo.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/SyndicationInfo.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/SyndicationInfo.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -14,13 +14,16 @@
 """
 
 from OFS.SimpleItem import SimpleItem
-
 from zope.component import adapts
-from zope.interface import implements, alsoProvides, noLongerProvides
+from zope.component import getUtility
+from zope.interface import alsoProvides
+from zope.interface import implements
+from zope.interface import noLongerProvides
 
-from Products.CMFCore.interfaces import (ISyndicatable, ISyndicationInfo,
-    IFolderish)
-from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.interfaces import IFolderish
+from Products.CMFCore.interfaces import ISyndicatable
+from Products.CMFCore.interfaces import ISyndicationInfo
+from Products.CMFCore.interfaces import ISyndicationTool
 
 
 class SyndicationInformation(SimpleItem):
@@ -52,7 +55,7 @@
     @property
     def site_settings(self):
         """Get site syndication tool"""
-        return getToolByName(self.context, "portal_syndication")
+        return getUtility(ISyndicationTool)
 
     def get_info(self):
         """


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

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -14,9 +14,11 @@
 """
 
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+from zope.component import getUtility
 from zope.formlib import form
 from zope.schema import getFieldNames
 
+from Products.CMFCore.interfaces import IPropertiesTool
 from Products.CMFDefault.formlib.form import EditFormBase
 from Products.CMFDefault.formlib.widgets import ChoiceRadioWidget
 from Products.CMFDefault.utils import Message as _
@@ -40,7 +42,7 @@
 
     def setUpWidgets(self, ignore_request=False):
         data = {}
-        ptool = self._getTool('portal_properties')
+        ptool = getUtility(IPropertiesTool)
         charset = ptool.getProperty('default_charset', None)
         for name in getFieldNames(IPortalConfig):
             value = ptool.getProperty(name)
@@ -56,7 +58,7 @@
                     ignore_request=ignore_request)
 
     def handle_success(self, action, data):
-        ptool = self._getTool('portal_properties')
+        ptool = getUtility(IPropertiesTool)
         ptool.editProperties(data)
         self.status = _(u"Portal settings changed.")
         self._setRedirect('portal_actions', 'global/configPortal')

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/syndication.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/syndication.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/syndication.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -15,6 +15,7 @@
 
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
 from zope.component import getAdapter
+from zope.component import getUtility
 from zope.formlib import form
 from zope.interface import Interface
 from zope.schema import Choice
@@ -22,6 +23,7 @@
 from zope.schema import Int
 
 from Products.CMFCore.interfaces import ISyndicationInfo
+from Products.CMFCore.interfaces import ISyndicationTool
 from Products.CMFDefault.browser.utils import memoize
 from Products.CMFDefault.formlib.form import EditFormBase
 from Products.CMFDefault.formlib.vocabulary import SimpleVocabulary
@@ -97,7 +99,7 @@
     @property
     @memoize
     def syndtool(self):
-        return self._getTool("portal_syndication")
+        return getUtility(ISyndicationTool)
 
     @memoize
     def enabled(self, action=None):
@@ -202,7 +204,7 @@
     @property
     @memoize
     def allowed(self):
-        syndtool = self._getTool('portal_syndication')
+        syndtool = getUtility(ISyndicationTool)
         return syndtool.isSiteSyndicationAllowed()
 
     def handle_enable(self, action, data):

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/tests/test_syndication.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/tests/test_syndication.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/tests/test_syndication.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -24,6 +24,7 @@
 from Products.CMFCore.interfaces import IFolderish
 from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import ISyndicationInfo
+from Products.CMFCore.interfaces import ISyndicationTool
 from Products.CMFCore.interfaces import IURLTool
 from Products.CMFCore.tests.base.dummy import DummyFolder
 from Products.CMFCore.tests.base.dummy import DummySite
@@ -51,9 +52,9 @@
 
     def setUp(self):
         """Setup a site"""
-        self.site = site = DummySite('site')
-        site.portal_syndication = DummySyndicationTool()
+        self.site = DummySite('site')
         sm = getSiteManager()
+        sm.registerUtility(DummySyndicationTool(), ISyndicationTool)
         sm.registerUtility(DummyTool(), IActionsTool)
         sm.registerUtility(DummyTool(), IMembershipTool)
         sm.registerUtility(DummyTool().__of__(self.site), IURLTool)
@@ -122,8 +123,9 @@
         from Products.CMFDefault.SyndicationInfo import SyndicationInfo
 
         self.site = DummySite('site')
-        self.site.portal_syndication = DummySyndicationTool()
+        self.syndtool = DummySyndicationTool()
         sm = getSiteManager()
+        sm.registerUtility(self.syndtool, ISyndicationTool)
         sm.registerAdapter(SyndicationInfo, [IFolderish], ISyndicationInfo)
         sm.registerUtility(DummyTool(), IActionsTool)
         sm.registerUtility(DummyTool(), IMembershipTool)
@@ -157,7 +159,7 @@
         self.assertTrue(view.disabled())
 
     def test_handle_enable(self):
-        self.site.portal_syndication.isAllowed = 1
+        self.syndtool.isAllowed = 1
         view = self._getTargetClass()
         view.handle_enable("enable", {})
         self.assertTrue(view.enabled())
@@ -167,7 +169,7 @@
             "Syndication%20enabled.")
 
     def test_handle_disable(self):
-        self.site.portal_syndication.isAllowed = 1
+        self.syndtool.isAllowed = 1
         view = self._getTargetClass()
         view.adapter.enable()
         view.handle_disable("disable", {})

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -18,6 +18,7 @@
 from ZTUtils import LazyFilter
 
 from Products.CMFCore.interfaces import ISyndicationInfo
+from Products.CMFCore.interfaces import ISyndicationTool
 from Products.CMFCore.interfaces import IURLTool
 from Products.CMFDefault.browser.utils import decode
 from Products.CMFDefault.browser.utils import memoize
@@ -37,9 +38,9 @@
     @decode
     def items(self):
         """Return items according to policy"""
-        stool = self._getTool("portal_syndication")
+        syndtool = getUtility(ISyndicationTool)
         key, reverse = self.context.getDefaultSorting()
-        items = stool.getSyndicatableContent(self.context)
+        items = syndtool.getSyndicatableContent(self.context)
         items = sort(items, ((key, 'cmp', reverse and 'desc' or 'asc'),))
         items = LazyFilter(items, skip='View')
         items = ({'title': o.Title(), 'description': o.Description(),

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/authentication.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/authentication.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/authentication.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -38,6 +38,7 @@
 from Products.CMFCore.interfaces import IActionsTool
 from Products.CMFCore.interfaces import ICookieCrumbler
 from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.interfaces import IPropertiesTool
 from Products.CMFCore.interfaces import IRegistrationTool
 from Products.CMFCore.interfaces import ISkinsTool
 from Products.CMFDefault.browser.utils import ViewBase, memoize
@@ -237,7 +238,7 @@
         now = DateTime()
         last_login = member.getProperty('login_time')
         never_logged_in = str(last_login).startswith('2000/01/01')
-        ptool = self._getTool('portal_properties')
+        ptool = getUtility(IPropertiesTool)
         if never_logged_in and ptool.getProperty('validate_email'):
             return self.first_login(member)
         else:

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -21,10 +21,19 @@
 from Products.CMFCore.interfaces import IActionsTool
 from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import IPropertiesTool
+from Products.CMFCore.interfaces import ISyndicationTool
 from Products.CMFCore.interfaces import IURLTool
 from Products.CMFCore.interfaces import IWorkflowTool
+from Products.CMFDefault.utils import PRODUCTS_CMFCALENDAR_INSTALLED
+from Products.CMFDefault.utils import PRODUCTS_CMFUID_INSTALLED
 
+if PRODUCTS_CMFCALENDAR_INSTALLED:
+    from Products.CMFCalendar.interfaces import ICalendarTool
 
+if PRODUCTS_CMFUID_INSTALLED:
+    from Products.CMFUid.interfaces import IUniqueIdHandler
+
+
 class UrsineGlobalsTests(unittest.TestCase, PlacelessSetup):
 
     def setUp(self):
@@ -112,19 +121,22 @@
 
     def test_wtool(self):
         view = self._makeOne()
-        tool = view.context.portal_workflow = DummyWorkflowTool()
+        tool = DummyWorkflowTool()
         getSiteManager().registerUtility(tool, IWorkflowTool)
         self.failUnless(view.wtool is tool)
 
     def test_syndtool(self):
         view = self._makeOne()
-        tool = view.context.portal_syndication = DummyTool()
+        tool = DummyTool()
+        getSiteManager().registerUtility(tool, ISyndicationTool)
         self.failUnless(view.syndtool is tool)
 
     def test_uidtool(self):
         view = self._makeOne()
-        tool = view.context.portal_uidhandler = DummyTool()
-        self.assertTrue(view.uidtool is tool)
+        if PRODUCTS_CMFUID_INSTALLED:
+            tool = DummyTool()
+            getSiteManager().registerUtility(tool, IUniqueIdHandler)
+            self.assertTrue(view.uidtool is tool)
 
     def test_uidtool_not_installed(self):
         view = self._makeOne()
@@ -132,13 +144,16 @@
 
     def test_uidtool_installed(self):
         view = self._makeOne()
-        view.context.portal_uidhandler = DummyTool()
-        self.assertTrue(view.uidtool_installed)
+        if PRODUCTS_CMFUID_INSTALLED:
+            getSiteManager().registerUtility(DummyTool(), IUniqueIdHandler)
+            self.assertTrue(view.uidtool_installed)
 
     def test_caltool(self):
         view = self._makeOne()
-        tool = view.context.portal_calendar = DummyTool()
-        self.assertTrue(view.caltool is tool)
+        if PRODUCTS_CMFCALENDAR_INSTALLED:
+            tool = DummyTool()
+            getSiteManager().registerUtility(tool, ICalendarTool)
+            self.assertTrue(view.caltool is tool)
 
     def test_caltool_not_installed(self):
         view = self._makeOne()
@@ -146,8 +161,9 @@
 
     def test_caltool_installed(self):
         view = self._makeOne()
-        view.context.portal_calendar = DummyTool()
-        self.assertTrue(view.caltool_installed)
+        if PRODUCTS_CMFCALENDAR_INSTALLED:
+            getSiteManager().registerUtility(DummyTool(), ICalendarTool)
+            self.assertTrue(view.caltool_installed)
 
     def test_portal_object(self):
         view = self._makeOne()
@@ -215,7 +231,7 @@
 
     def test_wf_state(self):
         view = self._makeOne()
-        tool = view.context.portal_workflow = DummyWorkflowTool()
+        tool = DummyWorkflowTool()
         getSiteManager().registerUtility(tool, IWorkflowTool)
         self.assertEqual(view.wf_state, 'DUMMY')
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -14,19 +14,28 @@
 """
 
 from zope.component import getUtility
+from zope.component import queryUtility
 
 from Products.CMFCore.interfaces import IActionsTool
 from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import IPropertiesTool
+from Products.CMFCore.interfaces import ISyndicationTool
 from Products.CMFCore.interfaces import IURLTool
 from Products.CMFCore.interfaces import IWorkflowTool
-from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.browser.utils import memoize
 from Products.CMFDefault.browser.utils import ViewBase
 from Products.CMFDefault.utils import decode
 from Products.CMFDefault.utils import Message as _
+from Products.CMFDefault.utils import PRODUCTS_CMFCALENDAR_INSTALLED
+from Products.CMFDefault.utils import PRODUCTS_CMFUID_INSTALLED
 
+if PRODUCTS_CMFCALENDAR_INSTALLED:
+    from Products.CMFCalendar.interfaces import ICalendarTool
 
+if PRODUCTS_CMFUID_INSTALLED:
+    from Products.CMFUid.interfaces import IUniqueIdHandler
+
+
 class UrsineGlobals(ViewBase):
     """ Provide lazy / efficient template-level globals.
 
@@ -71,12 +80,14 @@
     @property
     @memoize
     def syndtool(self):
-        return self._getTool('portal_syndication')
+        return queryUtility(ISyndicationTool)
 
     @property
     @memoize
     def caltool(self):
-        return getToolByName(self.context, 'portal_calendar', None)
+        if PRODUCTS_CMFCALENDAR_INSTALLED:
+            return queryUtility(ICalendarTool)
+        return None
 
     @property
     @memoize
@@ -86,7 +97,9 @@
     @property
     @memoize
     def uidtool(self):
-        return getToolByName(self.context, 'portal_uidhandler', None)
+        if PRODUCTS_CMFUID_INSTALLED:
+            return queryUtility(IUniqueIdHandler)
+        return None
 
     @property
     @memoize

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/utils.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/utils.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/utils.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -67,6 +67,7 @@
 
     @memoize
     def _getTool(self, name):
+        # BBB: _getTool is deprecated. Please use getUtility instead.
         return getToolByName(self.context, name)
 
     @memoize

Modified: Products.CMFDefault/trunk/Products/CMFDefault/formlib/form.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/formlib/form.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/formlib/form.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -34,6 +34,7 @@
 from Products.CMFCore.interfaces import IFolderish
 from Products.CMFCore.interfaces import ITypeInformation
 from Products.CMFCore.interfaces import ITypesTool
+from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.browser.utils import ViewBase
 from Products.CMFDefault.exceptions import AccessControl_Unauthorized
 from Products.CMFDefault.exceptions import zExceptions_Unauthorized
@@ -49,7 +50,7 @@
     template = ViewPageTemplateFile('editform.pt')
 
     def _setRedirect(self, provider_id, action_path, keys=''):
-        provider = self._getTool(provider_id)
+        provider = getToolByName(self.context, provider_id)
         try:
             target = provider.getActionInfo(action_path, self.context,
                                             check_condition=1)['url']

Modified: Products.CMFDefault/trunk/Products/CMFDefault/formlib/widgets.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/formlib/widgets.txt	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/formlib/widgets.txt	2011-09-26 08:51:28 UTC (rev 122941)
@@ -145,8 +145,7 @@
       >>> class DummyTool:
       ...     def listAllowedSubjects(self, context): return ('SPAM', 'EGGS')
       >>> view = DummyView()
-      >>> view.portal_metadata = DummyTool()
-      >>> getSiteManager().registerUtility(view.portal_metadata, IMetadataTool)
+      >>> getSiteManager().registerUtility(DummyTool(), IMetadataTool)
 
       >>> request = DummyRequest()
       >>> request.form['PREFIX.NAME.1'] = ['EGGS']

Modified: Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/componentregistry.xml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/componentregistry.xml	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/componentregistry.xml	2011-09-26 08:51:28 UTC (rev 122941)
@@ -5,8 +5,12 @@
  <utilities>
   <utility interface="Products.CMFCore.interfaces.IActionsTool"
      object="portal_actions"/>
+  <utility interface="Products.CMFCore.interfaces.ICachingPolicyManager"
+     object="caching_policy_manager"/>
   <utility interface="Products.CMFCore.interfaces.ICatalogTool"
      object="portal_catalog"/>
+  <utility interface="Products.CMFCore.interfaces.IContentTypeRegistry"
+     object="content_type_registry"/>
   <utility interface="Products.CMFCore.interfaces.ICookieCrumbler"
      object="cookie_authentication"/>
   <utility interface="Products.CMFCore.interfaces.IDiscussionTool"

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/disableSyndication.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/disableSyndication.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/disableSyndication.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -1,9 +1,11 @@
-## Script (Python) "disableSyndication"
+##parameters=
 ##title=Disable Syndication for a resource
-##parameters=
+##
+from Products.CMFCore.utils import getUtilityByInterfaceName
 
-if context.portal_syndication.isSyndicationAllowed(context):
-    context.portal_syndication.disableSyndication(context)
+syndtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.ISyndicationTool')
+if syndtool.isSyndicationAllowed(context):
+    syndtool.disableSyndication(context)
     return context.REQUEST.RESPONSE.redirect(context.absolute_url() +
                '/synPropertiesForm?portal_status_message=Syndication+Disabled')
 else:

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/editSynProperties.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/editSynProperties.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/editSynProperties.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -1,7 +1,14 @@
-## Script (Python) "editSynProperties"
+##parameters=
 ##title=Enable Syndication for a resource
-##parameters=
-REQUEST=context.REQUEST
-pSyn = context.portal_syndication
-pSyn.editSyInformationProperties(context, REQUEST['updatePeriod'], REQUEST['updateFrequency'], REQUEST['updateBase'], REQUEST['max_items'], REQUEST)
+##
+from Products.CMFCore.utils import getUtilityByInterfaceName
+
+REQUEST = context.REQUEST
+syndtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.ISyndicationTool')
+syndtool.editSyInformationProperties(context,
+                                     REQUEST['updatePeriod'],
+                                     REQUEST['updateFrequency'],
+                                     REQUEST['updateBase'],
+                                     REQUEST['max_items'],
+                                     REQUEST)
 return REQUEST.RESPONSE.redirect(context.absolute_url() + '/synPropertiesForm?portal_status_message=Syndication+Properties+Updated.')


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/editSynProperties.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/enableSyndication.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/enableSyndication.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/enableSyndication.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -1,9 +1,11 @@
-## Script (Python) "enableSyndication"
+##parameters=
 ##title=Enable Syndication for a resource
-##parameters=
+##
+from Products.CMFCore.utils import getUtilityByInterfaceName
 
-if context.portal_syndication.isSiteSyndicationAllowed():
-    context.portal_syndication.enableSyndication(context)
+syndtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.ISyndicationTool')
+if syndtool.isSiteSyndicationAllowed():
+    syndtool.enableSyndication(context)
     msg = 'Syndication+Enabled'
 else:
     msg = 'Syndication+Not+Allowed'


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/enableSyndication.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -6,21 +6,21 @@
 from Products.CMFDefault.utils import getBrowserCharset
 
 atool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IActionsTool',
-                                  # BBB: fallback for CMF 2.2 instances
+                                  # fallback for bootstrap
                                   getToolByName(script, 'portal_actions'))
-caltool = getToolByName(script, 'portal_calendar', None)
+caltool = getUtilityByInterfaceName('Products.CMFCalendar.interfaces.ICalendarTool', None)
 mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool',
-                                  # BBB: fallback for CMF 2.2 instances
+                                  # fallback for bootstrap
                                   getToolByName(script, 'portal_membership'))
 ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
 utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool',
-                                  # BBB: fallback for CMF 2.2 instances
+                                  # fallback for bootstrap
                                   getToolByName(script, 'portal_url'))
 wtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IWorkflowTool',
-                                  # BBB: fallback for CMF 2.2 instances
+                                  # fallback for bootstrap
                                   getToolByName(script, 'portal_workflow'))
-uidtool = getToolByName(script, 'portal_uidhandler', None)
-syndtool = getToolByName(script, 'portal_syndication', None)
+uidtool = getUtilityByInterfaceName('Products.CMFUid.interfaces.IUniqueIdHandler', None)
+syndtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.ISyndicationTool', None)
 portal_object = utool.getPortalObject()
 isAnon = mtool.isAnonymousUser()
 member = mtool.getAuthenticatedMember()

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/get_permalink.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/get_permalink.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/get_permalink.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -2,11 +2,10 @@
 ##title=Returns the permalink url or None
 ##
 from Products.CMFCore.utils import getUtilityByInterfaceName
-from Products.CMFCore.utils import getToolByName
 
 # calculate the permalink if the uid handler tool exists, permalinks
 # are configured to be shown and the object is not folderish
-uidtool = getToolByName(context, 'portal_uidhandler', None)
+uidtool = getUtilityByInterfaceName('Products.CMFUid.interfaces.IUniqueIdHandler', None)
 if uidtool is not None:
     ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
     showPermalink = getattr(ptool, 'enable_permalink', None)

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Discussions.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Discussions.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Discussions.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -32,7 +32,6 @@
 from Products.CMFCore.tests.base.tidata import FTIDATA_DUMMY
 from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI
 from Products.CMFCore.TypesTool import TypesTool
-from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.DiscussionTool import DiscussionTool
 from Products.CMFDefault.exceptions import DiscussionNotAllowed
 
@@ -316,8 +315,8 @@
         dtool = self.dtool
         talkback = dtool.getDiscussionFor(test)
         self.failUnless(hasattr(talkback, 'aq_base'))
-        # Acquire a portal tool
-        self.failUnless(getToolByName(talkback, 'portal_discussion'))
+        # Acquire REQUEST
+        self.failUnless(getattr(talkback, 'REQUEST'))
 
     def test_existingTalkbackIsWrapped(self):
         test = self._makeDummyContent('test')
@@ -326,8 +325,8 @@
         dtool.getDiscussionFor(test)
         talkback = dtool.getDiscussionFor(test)
         self.failUnless(hasattr(talkback, 'aq_base'))
-        # Acquire a portal tool
-        self.failUnless(getToolByName(talkback, 'portal_discussion'))
+        # Acquire REQUEST
+        self.failUnless(getattr(talkback, 'REQUEST'))
 
 
 def test_suite():

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DublinCore.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DublinCore.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DublinCore.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -19,9 +19,11 @@
 from AccessControl.SecurityManagement import newSecurityManager
 from Acquisition import Implicit
 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.interfaces import IMetadataTool
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyUserFolder
 from Products.CMFCore.tests.base.testcase import SecurityTest
@@ -151,7 +153,8 @@
     def test_publisher_with_metadata_tool(self):
         PUBLISHER = 'Some Publisher'
         site = DummySite('site').__of__(self.root)
-        site.portal_metadata = DummyMetadataTool(publisher=PUBLISHER)
+        tool = DummyMetadataTool(publisher=PUBLISHER)
+        getSiteManager().registerUtility(tool, IMetadataTool)
         item = self._makeDummyContent('item').__of__(site)
         self.assertEqual(item.Publisher(), PUBLISHER)
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_File.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_File.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_File.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -20,14 +20,16 @@
 
 import transaction
 from App.Common import rfc1123_date
+from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
 from zope.testing.cleanup import cleanUp
 
+from Products.CMFCore.interfaces import ICachingPolicyManager
 from Products.CMFCore.testing import ConformsToContent
 from Products.CMFCore.tests.base.dummy import DummyCachingManager
 from Products.CMFCore.tests.base.dummy import DummyCachingManagerWithPolicy
 from Products.CMFCore.tests.base.dummy import FAKE_ETAG
-from Products.CMFCore.tests.base.testcase import RequestTest
+from Products.CMFCore.tests.base.testcase import TransactionalTest
 from Products.CMFDefault import tests
 
 TESTS_HOME = tests.__path__[0]
@@ -82,7 +84,7 @@
         self.assertEqual(file.content_type, 'image/jpeg')
 
 
-class CachingTests(RequestTest):
+class CachingTests(TransactionalTest):
 
     def _getTargetClass(self):
         from Products.CMFDefault.File import File
@@ -92,9 +94,8 @@
     def _makeOne(self, *args, **kw):
         return self._getTargetClass()(*args, **kw)
 
-    def _extractFile( self ):
-
-        f = open( TEST_SWF, 'rb' )
+    def _extractFile(self):
+        f = open(TEST_SWF, 'rb')
         try:
             data = f.read()
         finally:
@@ -102,99 +103,100 @@
 
         return TEST_SWF, data
 
-    def _setupCachingPolicyManager(self, cpm_object):
-        self.root.caching_policy_manager = cpm_object
-
     def tearDown(self):
         cleanUp()
-        RequestTest.tearDown(self)
+        TransactionalTest.tearDown(self)
 
-    def test_index_html_with_304_from_cpm( self ):
-        self._setupCachingPolicyManager(DummyCachingManagerWithPolicy())
-        path, ref = self._extractFile()
-        file = self._makeOne( 'test_file', 'test_file.swf', file=ref )
-        file = file.__of__( self.root )
+    def test_index_html_with_304_from_cpm(self):
+        cpm = DummyCachingManagerWithPolicy()
+        getSiteManager().registerUtility(cpm, ICachingPolicyManager)
+        _path, ref = self._extractFile()
+        file = self._makeOne('test_file', 'test_file.swf', file=ref)
+        file = file.__of__(self.app)
 
         mod_time = file.modified().timeTime()
 
-        self.REQUEST.environ[ 'IF_MODIFIED_SINCE'
-                            ] = '%s;' % rfc1123_date( mod_time )
-        self.REQUEST.environ[ 'IF_NONE_MATCH'
+        self.REQUEST.environ['IF_MODIFIED_SINCE'
+                            ] = '%s;' % rfc1123_date(mod_time)
+        self.REQUEST.environ['IF_NONE_MATCH'
                             ] = '%s;' % FAKE_ETAG
 
-        data = file.index_html( self.REQUEST, self.RESPONSE )
-        self.assertEqual( len(data), 0 )
-        self.assertEqual( self.RESPONSE.getStatus(), 304 )
+        data = file.index_html(self.REQUEST, self.RESPONSE)
+        self.assertEqual(len(data), 0)
+        self.assertEqual(self.RESPONSE.getStatus(), 304)
 
-    def test_index_html_200_with_cpm( self ):
+    def test_index_html_200_with_cpm(self):
         # should behave the same as without cpm installed
-        self._setupCachingPolicyManager(DummyCachingManager())
-        path, ref = self._extractFile()
-        file = self._makeOne( 'test_file', 'test_file.swf', file=ref )
-        file = file.__of__( self.root )
+        cpm = DummyCachingManagerWithPolicy()
+        getSiteManager().registerUtility(cpm, ICachingPolicyManager)
+        _path, ref = self._extractFile()
+        file = self._makeOne('test_file', 'test_file.swf', file=ref)
+        file = file.__of__(self.app)
 
         mod_time = file.modified().timeTime()
 
-        data = file.index_html( self.REQUEST, self.RESPONSE )
+        data = file.index_html(self.REQUEST, self.RESPONSE)
 
-        self.assertEqual( len( data ), len( ref ) )
-        self.assertEqual( data, ref )
+        self.assertEqual(len(data), len(ref))
+        self.assertEqual(data, ref)
         # ICK!  'HTTPResponse.getHeader' doesn't case-flatten the key!
-        self.assertEqual( self.RESPONSE.getHeader( 'Content-Length'.lower() )
-                        , str(len(ref)) )
-        self.assertEqual( self.RESPONSE.getHeader( 'Content-Type'.lower() )
-                        , 'application/octet-stream' )
-        self.assertEqual( self.RESPONSE.getHeader( 'Last-Modified'.lower() )
-                        , rfc1123_date( mod_time ) )
+        self.assertEqual(self.RESPONSE.getHeader('Content-Length'.lower())
+                        , str(len(ref)))
+        self.assertEqual(self.RESPONSE.getHeader('Content-Type'.lower())
+                        , 'application/octet-stream')
+        self.assertEqual(self.RESPONSE.getHeader('Last-Modified'.lower())
+                        , rfc1123_date(mod_time))
 
-    def test_caching( self ):
-        large_file_data = '0' * 100000
+    def test_caching(self):
+        large_data = '0' * 100000
         def fake_response_write(data):
             return
         response_write = self.RESPONSE.write
         self.RESPONSE.write = fake_response_write
-        self._setupCachingPolicyManager(DummyCachingManager())
+        cpm = DummyCachingManager()
+        getSiteManager().registerUtility(cpm, ICachingPolicyManager)
         original_len = len(self.RESPONSE.headers)
-        file = self._makeOne('test_file', 'test_file.swf', file=large_file_data)
-        file = file.__of__(self.root)
-        file.index_html(self.REQUEST, self.RESPONSE)
+        obj = self._makeOne('test_file', 'test_file.swf', file=large_data)
+        obj = obj.__of__(self.app)
+        obj.index_html(self.REQUEST, self.RESPONSE)
         headers = self.RESPONSE.headers
         self.failUnless(len(headers) >= original_len + 3)
         self.failUnless('foo' in headers.keys())
         self.failUnless('bar' in headers.keys())
         self.assertEqual(headers['test_path'], '/test_file')
         self.RESPONSE.write = response_write
-    
+
     def test_caching_policy_headers_are_canonical(self):
         """Ensure that headers set by the caching policy manager trump
         any of the same name that from time to time may be set while 
         rendering the object."""
-        path, ref = self._extractFile()
+        _path, ref = self._extractFile()
 
-        self._setupCachingPolicyManager(LMDummyCachingManager())
+        cpm = LMDummyCachingManager()
+        getSiteManager().registerUtility(cpm, ICachingPolicyManager)
 
-        file = self._makeOne( 'test_file', 'test_file.swf', file=ref )
-                
+        obj = self._makeOne('test_file', 'test_file.swf', file=ref)
+
         # Cause persistent's modified time record to be set
-        self.root.foo = file
+        self.app.foo = obj
         transaction.commit()
-        file = self.root.foo
+        obj = self.app.foo
         # end
 
         # index_html in OFS will set Last-modified if ._p_mtime exists
-        file.index_html(self.REQUEST, self.RESPONSE)
-        
+        obj.index_html(self.REQUEST, self.RESPONSE)
+
         headers = self.RESPONSE.headers
-        self.assertEqual(headers['last-modified'], 
+        self.assertEqual(headers['last-modified'],
                          "Sun, 06 Nov 1994 08:49:37 GMT")
 
 # We set up a new type of dummy caching manager that sets a bogus
 # last modified date.  This should be visible in the request
 class LMDummyCachingManager(DummyCachingManager):
 
-    def getHTTPCachingHeaders( self, content, view_name, 
-                               keywords, time=None ):
-        return ('Last-modified', 'Sun, 06 Nov 1994 08:49:37 GMT'), 
+    def getHTTPCachingHeaders(self, content, view_name,
+                               keywords, time=None):
+        return ('Last-modified', 'Sun, 06 Nov 1994 08:49:37 GMT'),
 
 
 def test_suite():

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Image.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Image.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Image.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -23,17 +23,19 @@
 from AccessControl.SecurityManagement import newSecurityManager
 from AccessControl.User import UnrestrictedUser
 from App.Common import rfc1123_date
+from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
 from zope.site.hooks import setSite
 from zope.testing.cleanup import cleanUp
 
+from Products.CMFCore.interfaces import ICachingPolicyManager
 from Products.CMFCore.testing import ConformsToContent
 from Products.CMFCore.tests.base.dummy import DummyCachingManager
 from Products.CMFCore.tests.base.dummy import DummyCachingManagerWithPolicy
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyTool
 from Products.CMFCore.tests.base.dummy import FAKE_ETAG
-from Products.CMFCore.tests.base.testcase import RequestTest
+from Products.CMFCore.tests.base.testcase import TransactionalTest
 from Products.CMFDefault import tests
 from Products.CMFDefault.testing import FunctionalLayer
 
@@ -187,18 +189,8 @@
         self.assertEqual(review_state, 'published')
 
 
-class TestCaching(RequestTest):
+class CachingTests(TransactionalTest):
 
-    def _extractFile( self ):
-
-        f = open( TEST_JPG, 'rb' )
-        try:
-            data = f.read()
-        finally:
-            f.close()
-
-        return TEST_JPG, data
-
     def _getTargetClass(self):
         from Products.CMFDefault.Image import Image
 
@@ -207,41 +199,71 @@
     def _makeOne(self, *args, **kw):
         return self._getTargetClass()(*args, **kw)
 
-    def _setupCachingPolicyManager(self, cpm_object):
-        self.root.caching_policy_manager = cpm_object
+    def _extractFile(self):
+        f = open(TEST_JPG, 'rb')
+        try:
+            data = f.read()
+        finally:
+            f.close()
 
+        return TEST_JPG, data
+
     def tearDown(self):
         cleanUp()
-        RequestTest.tearDown(self)
+        TransactionalTest.tearDown(self)
 
-    def test_index_html_with_304_from_cpm( self ):
-        self._setupCachingPolicyManager(DummyCachingManagerWithPolicy())
-        path, ref = self._extractFile()
-        self.root.file = self._makeOne('test_file', 'test_image.jpg', file=ref)
-        file = self.root.file
+    def test_index_html_with_304_from_cpm(self):
+        cpm = DummyCachingManagerWithPolicy()
+        getSiteManager().registerUtility(cpm, ICachingPolicyManager)
+        _path, ref = self._extractFile()
+        file = self._makeOne('test_file', 'test_image.jpg', file=ref)
+        file = file.__of__(self.app)
 
-        mod_time = file.modified()
+        mod_time = file.modified().timeTime()
 
-        self.REQUEST.environ[ 'IF_MODIFIED_SINCE'
-                            ] = '%s;' % rfc1123_date( mod_time )
-        self.REQUEST.environ[ 'IF_NONE_MATCH'
+        self.REQUEST.environ['IF_MODIFIED_SINCE'
+                            ] = '%s;' % rfc1123_date(mod_time)
+        self.REQUEST.environ['IF_NONE_MATCH'
                             ] = '%s;' % FAKE_ETAG
 
-        data = file.index_html( self.REQUEST, self.RESPONSE )
-        self.assertEqual( len(data), 0 )
-        self.assertEqual( self.RESPONSE.getStatus(), 304 )
+        data = file.index_html(self.REQUEST, self.RESPONSE)
+        self.assertEqual(len(data), 0)
+        self.assertEqual(self.RESPONSE.getStatus(), 304)
 
-    def test_caching( self ):
+    def test_index_html_200_with_cpm(self):
+        # should behave the same as without cpm installed
+        cpm = DummyCachingManagerWithPolicy()
+        getSiteManager().registerUtility(cpm, ICachingPolicyManager)
+        _path, ref = self._extractFile()
+        file = self._makeOne('test_file', 'test_image.jpg', file=ref)
+        file = file.__of__(self.app)
+
+        mod_time = file.modified().timeTime()
+
+        data = file.index_html(self.REQUEST, self.RESPONSE)
+
+        self.assertEqual(len(data), len(ref))
+        self.assertEqual(data, ref)
+        # ICK!  'HTTPResponse.getHeader' doesn't case-flatten the key!
+        self.assertEqual(self.RESPONSE.getHeader('Content-Length'.lower())
+                        , str(len(ref)))
+        self.assertEqual(self.RESPONSE.getHeader('Content-Type'.lower())
+                        , 'image/jpeg')
+        self.assertEqual(self.RESPONSE.getHeader('Last-Modified'.lower())
+                        , rfc1123_date(mod_time))
+
+    def test_caching(self):
         large_data = '0' * 100000
         def fake_response_write(data):
             return
         response_write = self.RESPONSE.write
         self.RESPONSE.write = fake_response_write
-        self._setupCachingPolicyManager(DummyCachingManager())
+        cpm = DummyCachingManager()
+        getSiteManager().registerUtility(cpm, ICachingPolicyManager)
         original_len = len(self.RESPONSE.headers)
-        image = self._makeOne('test_image', 'test_image.jpg', file=large_data)
-        image = image.__of__(self.root)
-        image.index_html(self.REQUEST, self.RESPONSE)
+        obj = self._makeOne('test_image', 'test_image.jpg', file=large_data)
+        obj = obj.__of__(self.app)
+        obj.index_html(self.REQUEST, self.RESPONSE)
         headers = self.RESPONSE.headers
         self.failUnless(len(headers) >= original_len + 3)
         self.failUnless('foo' in headers.keys())
@@ -249,45 +271,25 @@
         self.assertEqual(headers['test_path'], '/test_image')
         self.RESPONSE.write = response_write
 
-    def test_index_html_200_with_cpm( self ):
-        self._setupCachingPolicyManager(DummyCachingManagerWithPolicy())
-        path, ref = self._extractFile()
-        file = self._makeOne( 'test_file', 'test_image.jpg', file=ref )
-        file = file.__of__( self.root )
-
-        mod_time = file.modified()
-
-        data = file.index_html( self.REQUEST, self.RESPONSE )
-
-        # should behave the same as without cpm
-        self.assertEqual( len( data ), len( ref ) )
-        self.assertEqual( data, ref )
-        # ICK!  'HTTPResponse.getHeader' doesn't case-flatten the key!
-        self.assertEqual( self.RESPONSE.getHeader( 'Content-Length'.lower() )
-                        , str(len(ref)) )
-        self.assertEqual( self.RESPONSE.getHeader( 'Content-Type'.lower() )
-                        , 'image/jpeg' )
-        self.assertEqual( self.RESPONSE.getHeader( 'Last-Modified'.lower() )
-                        , rfc1123_date( mod_time ) )
-
-    def test_index_html_with_304_and_caching( self ):
+    def test_index_html_with_304_and_caching(self):
         # See collector #355
-        self._setupCachingPolicyManager(DummyCachingManager())
+        cpm = DummyCachingManager()
+        getSiteManager().registerUtility(cpm, ICachingPolicyManager)
         original_len = len(self.RESPONSE.headers)
-        path, ref = self._extractFile()
-        self.root.image = self._makeOne( 'test_image', 'test_image.gif' )
-        image = self.root.image
+        _path, ref = self._extractFile()
+        self.app.image = self._makeOne('test_image', 'test_image.gif', file=ref)
+        image = self.app.image
         transaction.savepoint(optimistic=True)
 
         mod_time = image.modified()
 
-        self.REQUEST.environ[ 'IF_MODIFIED_SINCE'
-                            ] = '%s;' % rfc1123_date( mod_time+1 )
+        self.REQUEST.environ['IF_MODIFIED_SINCE'
+                            ] = '%s;' % rfc1123_date(mod_time + 1)
 
-        data = image.index_html( self.REQUEST, self.RESPONSE )
+        data = image.index_html(self.REQUEST, self.RESPONSE)
 
-        self.assertEqual( data, '' )
-        self.assertEqual( self.RESPONSE.getStatus(), 304 )
+        self.assertEqual(data, '')
+        self.assertEqual(self.RESPONSE.getStatus(), 304)
 
         headers = self.RESPONSE.headers
         self.failUnless(len(headers) >= original_len + 3)
@@ -299,23 +301,24 @@
         """Ensure that headers set by the caching policy manager trump
         any of the same name that from time to time may be set while 
         rendering the object."""
-        path, ref = self._extractFile()
+        _path, ref = self._extractFile()
 
-        self._setupCachingPolicyManager(LMDummyCachingManager())
+        cpm = LMDummyCachingManager()
+        getSiteManager().registerUtility(cpm, ICachingPolicyManager)
 
-        img = self._makeOne( 'test_image', 'test_image.gif' )
-                
+        obj = self._makeOne('test_image', 'test_image.gif', file=ref)
+
         # Cause persistent's modified time record to be set
-        self.root.foo = img
+        self.app.foo = obj
         transaction.commit()
-        img = self.root.foo
+        obj = self.app.foo
         # end
-        
+
         # index_html in OFS will set Last-modified if ._p_mtime exists
-        img.index_html(self.REQUEST, self.RESPONSE)
-        
+        obj.index_html(self.REQUEST, self.RESPONSE)
+
         headers = self.RESPONSE.headers
-        self.assertEqual(headers['last-modified'], 
+        self.assertEqual(headers['last-modified'],
                          "Sun, 06 Nov 1994 08:49:37 GMT")
 
 
@@ -323,5 +326,5 @@
     return unittest.TestSuite((
         unittest.makeSuite(TestImageElement),
         unittest.makeSuite(TestImageCopyPaste),
-        unittest.makeSuite(TestCaching),
+        unittest.makeSuite(CachingTests),
         ))

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Portal.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Portal.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_Portal.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -19,11 +19,16 @@
 from AccessControl.SecurityManagement import newSecurityManager
 from AccessControl.User import UnrestrictedUser
 from Acquisition import aq_base
+from zope.component import queryUtility
 from zope.site.hooks import setSite
 
 from Products.CMFDefault.testing import FunctionalLayer
+from Products.CMFDefault.utils import PRODUCTS_CMFUID_INSTALLED
 
+if PRODUCTS_CMFUID_INSTALLED:
+    from Products.CMFUid.interfaces import IUniqueIdHandler
 
+
 class CMFSiteTests(ZopeTestCase.FunctionalTestCase):
 
     layer = FunctionalLayer
@@ -51,7 +56,7 @@
         site = self.app.site
         catalog = site.portal_catalog
         ttool = site.portal_types
-        uid_handler = getattr(site, 'portal_uidhandler', None)
+        uidtool = queryUtility(IUniqueIdHandler)
 
         portal_types = [ x for x in ttool.listContentTypes()
                            if x not in ( 'Discussion Item'
@@ -71,7 +76,7 @@
             # in case of the CMFUid beeing installed this test
             # indexes also the site root because the 'Favorite'
             # references it by unique id
-            isUidEnabledFavorite = uid_handler and portal_type == 'Favorite'
+            isUidEnabledFavorite = uidtool and portal_type == 'Favorite'
             if isUidEnabledFavorite:
                 self.assertEqual( len( catalog ), 2 )
             else:

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_PropertiesTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_PropertiesTool.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_PropertiesTool.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -26,12 +26,13 @@
 from Products.MailHost.interfaces import IMailHost
 from Products.MailHost.MailHost import MailHost
 
-from Products.CMFCore.interfaces import IPropertiesTool
 from Products.CMFCore.interfaces import ISiteRoot
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.testcase import SecurityTest
 
+
 class PropertiedDummySite(PropertyManager, DummySite):
+
     _properties = (
         {'id':'title', 'type':'string', 'mode': 'w'},
         {'id':'description', 'type':'text', 'mode': 'w'},
@@ -55,14 +56,14 @@
         return PropertiesTool(*args, **kw)
 
     def setUp(self):
+        from Products.CMFCore.interfaces import IPropertiesTool
+
         SecurityTest.setUp(self)
         self.site = PropertiedDummySite('site')
         sm = getSiteManager()
+        sm.registerUtility(MailHost('MailHost'), IMailHost)
+        sm.registerUtility(self._makeOne(), IPropertiesTool)
         sm.registerUtility(self.site, ISiteRoot)
-        self.site._setObject('portal_properties', self._makeOne())
-        sm.registerUtility(self.site.portal_properties, IPropertiesTool)
-        self.site._setObject('MailHost', MailHost('MailHost'))
-        sm.registerUtility(self.site.MailHost, IMailHost)
 
     def tearDown(self):
         cleanUp()
@@ -75,6 +76,8 @@
         verifyClass(IPropertiesTool, PropertiesTool)
 
     def test_editProperties(self):
+        from Products.CMFCore.interfaces import IPropertiesTool
+
         # https://bugs.launchpad.net/zope-cmf/+bug/174246
         # PropertiesTool.editProperties fails with traceback due to
         # faulty invocation of the site's manage_changeProperties method

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_SyndicationInfo.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_SyndicationInfo.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_SyndicationInfo.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -1,43 +1,59 @@
+##############################################################################
+#
+# Copyright (c) 2010 Zope Foundation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" Unit tests for the SyndicationInfo adapter.
 """
-Unit tests for the SyndicationInfo adapter
-"""
 
 import unittest
+import Testing
 
 from DateTime.DateTime import DateTime
-
+from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
 
+from Products.CMFCore.interfaces import ISyndicationTool
 from Products.CMFCore.tests.base.testcase import TransactionalTest
 
 
 class SyndicationInfoTests(TransactionalTest):
-    
+
     def setUp(self):
+        from Products.CMFCore.PortalFolder import PortalFolder
+
         super(SyndicationInfoTests, self).setUp()
-        from Products.CMFCore.PortalFolder import PortalFolder
-        self.root._setObject('portal', PortalFolder('portal'))
-        self.portal = self.root.portal
-        tool = self.portal._setObject('portal_syndication',
-                                DummySyndicationTool())
-        self.syndication_tool = self.portal.portal_syndication
-    
+        self.app._setObject('portal', PortalFolder('portal'))
+        self.portal = self.app.portal
+        self.syndtool = DummySyndicationTool()
+        getSiteManager().registerUtility(self.syndtool, ISyndicationTool)
+
     def _getTargetClass(self):
         from Products.CMFDefault.SyndicationInfo import SyndicationInfo
+
         return SyndicationInfo
-    
+
     def _makeOne(self):
         from Products.CMFCore.PortalFolder import PortalFolder
+
         self.portal._setObject('folder', PortalFolder('folder'))
         return self._getTargetClass()(self.portal.folder)
     
-    def test_inteface(self):
+    def test_interfaces(self):
         from Products.CMFCore.interfaces import ISyndicationInfo
+
         verifyClass(ISyndicationInfo, self._getTargetClass())
     
     def test_site_settings(self):
         adapter = self._makeOne()
-        self.assertTrue(adapter.site_settings is self.syndication_tool)
+        self.assertTrue(adapter.site_settings is self.syndtool)
     
     def test_get_info(self):
         adapter = self._makeOne()
@@ -68,13 +84,13 @@
     
     def test_enable(self):
         adapter = self._makeOne()
-        self.syndication_tool.isAllowed = 1
+        self.syndtool.isAllowed = 1
         adapter.enable()
         self.assertTrue(adapter.enabled)
     
     def test_disable(self):
         adapter = self._makeOne()
-        self.syndication_tool.isAllowed = 1
+        self.syndtool.isAllowed = 1
         adapter.enable()
         self.assertTrue(adapter.enabled)
         adapter.disable()

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_SyndicationTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_SyndicationTool.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_SyndicationTool.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -236,8 +236,7 @@
         getSiteManager().registerUtility(TypesTool(), ITypesTool)
         self.app._setObject('pf', PortalFolder('pf'))
         self.app._setObject('bf', CMFBTreeFolder('bf'))
-        self.app._setObject('portal_syndication', self._makeOne())
-        tool = self.app.portal_syndication
+        tool = self._makeOne()
         tool.editProperties(updatePeriod=PERIOD,
                             updateFrequency=FREQUENCY,
                             updateBase=NOW,

Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -263,8 +263,11 @@
             logger.info("Member data tool property modes fixed.")
 
 _TOOL_UTILITIES = (
+    ('caching_policy_manager', 'Products.CMFCore.interfaces.ICachingPolicyManager'),
+    ('content_type_registry', 'Products.CMFCore.interfaces.IContentTypeRegistry'),
     ('cookie_authentication', 'Products.CMFCore.interfaces.ICookieCrumbler'),
     ('portal_actions', 'Products.CMFCore.interfaces.IActionsTool'),
+    ('portal_calendar', 'Products.CMFCalendar.interfaces.ICalendarTool'),
     ('portal_catalog', 'Products.CMFCore.interfaces.ICatalogTool'),
     ('portal_memberdata', 'Products.CMFCore.interfaces.IMemberDataTool'),
     ('portal_membership', 'Products.CMFCore.interfaces.IMembershipTool'),

Modified: Products.CMFDefault/trunk/Products/CMFDefault/utils.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/utils.py	2011-09-26 08:51:14 UTC (rev 122940)
+++ Products.CMFDefault/trunk/Products/CMFDefault/utils.py	2011-09-26 08:51:28 UTC (rev 122941)
@@ -11,39 +11,50 @@
 #
 ##############################################################################
 """ Utility functions.
-
-$Id$
 """
 
-from email.Header import make_header
-from email.MIMEText import MIMEText
 import os
 import re
 import rfc822
+import StringIO
+from email.Header import make_header
+from email.MIMEText import MIMEText
 from sgmllib import SGMLParser
-import StringIO
 
 from AccessControl.SecurityInfo import ModuleSecurityInfo
 from Acquisition import aq_get
 from App.Common import package_home
-from ZTUtils.Zope import complex_marshal
-
+from pkg_resources import DistributionNotFound
+from pkg_resources import get_distribution
+from zope import i18n # disambiguation
 from zope.component import getUtility
 from zope.component import queryUtility
-from zope import i18n # disambiguation
 from zope.i18n.interfaces import IUserPreferredCharsets
 from zope.i18nmessageid import MessageFactory
 from zope.publisher.interfaces.browser import IBrowserRequest
+from ZTUtils.Zope import complex_marshal
 
 from Products.CMFCore.interfaces import IPropertiesTool
-
-from Products.CMFDefault.interfaces import IHTMLScrubber
 from Products.CMFDefault.exceptions import EmailAddressInvalid
 from Products.CMFDefault.exceptions import IllegalHTML
+from Products.CMFDefault.interfaces import IHTMLScrubber
 
-
 security = ModuleSecurityInfo( 'Products.CMFDefault.utils' )
 
+try:
+    get_distribution('Products.CMFCalendar')
+except DistributionNotFound:
+    PRODUCTS_CMFCALENDAR_INSTALLED = False
+else:
+    PRODUCTS_CMFCALENDAR_INSTALLED = True
+
+try:
+    get_distribution('Products.CMFUid')
+except DistributionNotFound:
+    PRODUCTS_CMFUID_INSTALLED = False
+else:
+    PRODUCTS_CMFUID_INSTALLED = True
+
 security.declarePrivate('_dtmldir')
 _dtmldir = os.path.join( package_home( globals() ), 'dtml' )
 _wwwdir = os.path.join( package_home( globals() ), 'www' )


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



More information about the checkins mailing list