[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ Got rid of redundant icon related type info properties.

Hanno Schlichting hannosch at hannosch.eu
Fri Nov 13 09:58:28 EST 2009


Log message for revision 105607:
  Got rid of redundant icon related type info properties.
  

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  U   Products.CMFCore/trunk/Products/CMFCore/DynamicType.py
  U   Products.CMFCore/trunk/Products/CMFCore/TypesTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/base/tidata.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2009-11-13 14:57:54 UTC (rev 105606)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2009-11-13 14:58:28 UTC (rev 105607)
@@ -4,6 +4,9 @@
 2.2.0 (unreleased)
 ------------------
 
+- Got rid of redundant icon related type info properties.
+  (https://bugs.launchpad.net/zope-cmf/+bug/397795)
+
 - PortalFolder: Ensure that pasting an object into a folder takes 
   workflow instance creation conditions into account.
   (https://bugs.launchpad.net/zope-cmf/+bug/308947)

Modified: Products.CMFCore/trunk/Products/CMFCore/DynamicType.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/DynamicType.py	2009-11-13 14:57:54 UTC (rev 105606)
+++ Products.CMFCore/trunk/Products/CMFCore/DynamicType.py	2009-11-13 14:58:28 UTC (rev 105607)
@@ -94,17 +94,12 @@
         """
         ti = self.getTypeInfo()
         if ti is not None:
-            icon = quote(ti.getIcon())
-            if icon:
-                if relative_to_portal:
+            if relative_to_portal:
+                icon = quote(ti.getIcon())
+                if icon:
                     return icon
-                else:
-                    # Relative to REQUEST['BASEPATH1']
-                    portal_url = getToolByName( self, 'portal_url' )
-                    res = portal_url(relative=1) + '/' + icon
-                    while res[:1] == '/':
-                        res = res[1:]
-                    return res
+            else:
+                return ti.getIcon(absolute=True)
         return 'misc_/OFSP/dtmldoc.gif'
 
     security.declarePublic('icon')

Modified: Products.CMFCore/trunk/Products/CMFCore/TypesTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/TypesTool.py	2009-11-13 14:57:54 UTC (rev 105606)
+++ Products.CMFCore/trunk/Products/CMFCore/TypesTool.py	2009-11-13 14:58:28 UTC (rev 105607)
@@ -41,6 +41,7 @@
 from Products.CMFCore.exceptions import AccessControl_Unauthorized
 from Products.CMFCore.exceptions import BadRequest
 from Products.CMFCore.exceptions import zExceptions_Unauthorized
+from Products.CMFCore.Expression import getExprContext
 from Products.CMFCore.Expression import Expression
 from Products.CMFCore.interfaces import IAction
 from Products.CMFCore.interfaces import ITypeInformation
@@ -147,10 +148,22 @@
             and kw.has_key('meta_type')):
             kw['content_meta_type'] = kw['meta_type']
 
-        if (not kw.has_key('content_icon')
-            and kw.has_key('icon')):
-            kw['content_icon'] = kw['icon']
+        if 'content_icon' in kw or 'icon' in kw:
+            if 'icon' in kw:
+                kw['content_icon'] = kw['icon']
+                warn('TypeInformation got a deprecated argument icon.'
+                     'Support for the icon argument will be removed in '
+                     'CMF 2.4. Please use the icon_expr argument instead.',
+                     DeprecationWarning, stacklevel=2)
+            else:
+                warn('TypeInformation got a deprecated argument content_icon.'
+                     'Support for the content_icon argument will be removed in '
+                     'CMF 2.4. Please use the icon_expr argument instead.',
+                     DeprecationWarning, stacklevel=2)
 
+            if 'icon_expr' not in kw:
+                kw['icon_expr'] = 'string:${portal_url}/%s' % kw['content_icon']
+
         self.manage_changeProperties(**kw)
 
         actions = kw.get( 'actions', () )
@@ -230,11 +243,21 @@
         return self.content_meta_type
 
     security.declareProtected(View, 'getIcon')
-    def getIcon(self):
+    def getIcon(self, absolute=False):
         """
             Returns the icon for this content object.
         """
-        return self.content_icon
+        if self.content_icon:
+            return self.content_icon
+        icon_expr = getattr(self, 'icon_expr_object', None)
+        if icon_expr:
+            ec = getExprContext(self)
+            icon = icon_expr(ec)
+            if absolute:
+                return icon
+            if isinstance(icon, basestring):
+                return icon.split('/')[-1]
+        return ''
 
     security.declarePublic('allowType')
     def allowType( self, contentType ):

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py	2009-11-13 14:57:54 UTC (rev 105606)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py	2009-11-13 14:58:28 UTC (rev 105607)
@@ -29,6 +29,7 @@
 from Products.CMFCore.permissions import AccessContentsInformation
 from Products.CMFCore.permissions import ModifyPortalContent
 from Products.CMFCore.testing import ExportImportZCMLLayer
+from Products.CMFCore.tests.base.testcase import WarningInterceptor
 from Products.CMFCore.TypesTool import FactoryTypeInformation
 from Products.CMFCore.TypesTool import ScriptableTypeInformation
 from Products.CMFCore.TypesTool import TypesTool
@@ -281,7 +282,8 @@
 """
 
 
-class TypeInformationXMLAdapterTests(BodyAdapterTestCase, unittest.TestCase):
+class TypeInformationXMLAdapterTests(
+    BodyAdapterTestCase, unittest.TestCase, WarningInterceptor):
 
     layer = ExportImportZCMLLayer
 
@@ -320,10 +322,15 @@
     def setUp(self):
         self._obj = FactoryTypeInformation('foo_fti')
         self._BODY = _FTI_BODY
+        self._trap_warning_output()
 
+    def tearDown(self):
+        self._free_warning_output()
 
-class TypesToolXMLAdapterTests(BodyAdapterTestCase, unittest.TestCase):
 
+class TypesToolXMLAdapterTests(
+    BodyAdapterTestCase, unittest.TestCase, WarningInterceptor):
+
     layer = ExportImportZCMLLayer
 
     def _getTargetClass(self):
@@ -338,10 +345,21 @@
     def setUp(self):
         self._obj = TypesTool()
         self._BODY = _TYPESTOOL_BODY
+        self._trap_warning_output()
 
+    def tearDown(self):
+        self._free_warning_output()
 
-class _TypeInfoSetup(BaseRegistryTests):
 
+class _TypeInfoSetup(BaseRegistryTests, WarningInterceptor):
+
+    def setUp(self):
+        BaseRegistryTests.setUp(self)
+        self._trap_warning_output()
+
+    def tearDown(self):
+        self._free_warning_output()
+
     def _initSite(self, foo=0):
         self.root.site = Folder(id='site')
         site = self.root.site

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/base/tidata.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/base/tidata.py	2009-11-13 14:57:54 UTC (rev 105606)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/base/tidata.py	2009-11-13 14:58:28 UTC (rev 105607)
@@ -94,6 +94,41 @@
     )
 
 
+FTIDATA_CMF = (
+      { 'id' : 'Dummy Content 15'
+      , 'meta_type' : 'Dummy'
+      , 'description' : (
+           'Dummy Content.')
+      , 'icon_expr' : 'string:${portal_url}/dummy_icon.gif'
+      , 'product' : 'FooProduct'
+      , 'factory' : 'addFoo'
+      , 'immediate_view' : 'metadata.html'
+      , 'aliases' : {
+           '(Default)':'dummy_view',
+           'view':'dummy_view',
+           'view.html':'dummy_view',
+           'edit.html':'dummy_edit_form',
+           'metadata.html':'metadata_edit_form',
+           'gethtml':'source_html'}
+      , 'actions' : (
+            { 'id':'view',
+              'title': 'View',
+              'action':'string:${object_url}/view.html',
+              'permissions':(View,) }
+          , { 'id':'edit',
+              'title': 'Edit',
+              'action':'string:${object_url}/edit.html',
+              'permissions':(ModifyPortalContent,) }
+          , { 'id':'metadata',
+              'title': 'Metadata',
+              'action':'string:${object_url}/metadata.html',
+              'permissions':(ModifyPortalContent,) }
+          )
+      }
+    ,
+    )
+
+
 STI_SCRIPT = """\
 ## Script (Python) "addBaz"
 ##bind container=container

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py	2009-11-13 14:57:54 UTC (rev 105606)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_DynamicType.py	2009-11-13 14:58:28 UTC (rev 105607)
@@ -40,7 +40,7 @@
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyTool
 from Products.CMFCore.tests.base.testcase import SecurityRequestTest
-from Products.CMFCore.tests.base.tidata import FTIDATA_CMF15
+from Products.CMFCore.tests.base.tidata import FTIDATA_CMF
 from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI
 from Products.CMFCore.TypesTool import TypesTool
 
@@ -73,7 +73,7 @@
     def setUp(self):
         self.site = DummySite('site')
         self.site._setObject( 'portal_types', TypesTool() )
-        fti = FTIDATA_CMF15[0].copy()
+        fti = FTIDATA_CMF[0].copy()
         self.site.portal_types._setObject( 'Dummy Content 15', FTI(**fti) )
         self.site._setObject( 'foo', DummyContent() )
         dummy_view = self.site._setObject( 'dummy_view', DummyObject() )
@@ -156,7 +156,7 @@
         self.site._setObject( 'portal_membership', DummyTool() )
         self.site._setObject( 'portal_types', TypesTool() )
         self.site._setObject( 'portal_url', DummyTool() )
-        fti = FTIDATA_CMF15[0].copy()
+        fti = FTIDATA_CMF[0].copy()
         self.site.portal_types._setObject( 'Dummy Content 15', FTI(**fti) )
         self.site._setObject( 'foo', DummyContent() )
 

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py	2009-11-13 14:57:54 UTC (rev 105606)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py	2009-11-13 14:58:28 UTC (rev 105607)
@@ -43,7 +43,7 @@
 from Products.CMFCore.tests.base.dummy import DummyUserFolder
 from Products.CMFCore.tests.base.testcase import SecurityRequestTest
 from Products.CMFCore.tests.base.testcase import SecurityTest
-from Products.CMFCore.tests.base.tidata import FTIDATA_CMF15
+from Products.CMFCore.tests.base.tidata import FTIDATA_CMF
 from Products.CMFCore.tests.base.tidata import FTIDATA_DUMMY
 from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI
 from Products.CMFCore.TypesTool import TypesTool
@@ -443,7 +443,7 @@
         test = self._makeOne('test')
         test._setPortalTypeName('Dummy Content 15')
         ttool = self.site._setObject('portal_types', TypesTool())
-        ttool._setObject('Dummy Content 15', FTI(**FTIDATA_CMF15[0]))
+        ttool._setObject('Dummy Content 15', FTI(**FTIDATA_CMF[0]))
         acl_users = self.site._setObject('acl_users', DummyUserFolder())
         test._checkId('view.html')
         newSecurityManager(None, acl_users.user_foo)

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py	2009-11-13 14:57:54 UTC (rev 105606)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py	2009-11-13 14:58:28 UTC (rev 105607)
@@ -19,6 +19,7 @@
 
 from Products.CMFCore.testing import FunctionalZCMLLayer
 from Products.CMFCore.tests.base.testcase import SecurityTest
+from Products.CMFCore.tests.base.testcase import WarningInterceptor
 
 class TypesToolTests(unittest.TestCase):
 
@@ -249,9 +250,15 @@
         self.assertEqual(folder.page2.portal_type, 'Baz')
 
 
-class TypeInfoTests:
+class TypeInfoTests(WarningInterceptor):
     # Subclass must define _getTargetClass
 
+    def setUp(self):
+        self._trap_warning_output()
+
+    def tearDown(self):
+        self._free_warning_output()
+
     def _makeOne(self, id='test', **kw):
         return self._getTargetClass()(id, **kw)
 
@@ -367,20 +374,19 @@
         self.failIf( 'slot' in visible )
 
     def test_MethodAliases_methods(self):
-        from Products.CMFCore.tests.base.tidata import FTIDATA_CMF15
-        ti = self._makeOne( **FTIDATA_CMF15[0] )
-        self.assertEqual( ti.getMethodAliases(), FTIDATA_CMF15[0]['aliases'] )
+        from Products.CMFCore.tests.base.tidata import FTIDATA_CMF
+        ti = self._makeOne( **FTIDATA_CMF[0] )
+        self.assertEqual( ti.getMethodAliases(), FTIDATA_CMF[0]['aliases'] )
         self.assertEqual( ti.queryMethodID('view'), 'dummy_view' )
         self.assertEqual( ti.queryMethodID('view.html'), 'dummy_view' )
 
         ti.setMethodAliases( ti.getMethodAliases() )
-        self.assertEqual( ti.getMethodAliases(), FTIDATA_CMF15[0]['aliases'] )
+        self.assertEqual( ti.getMethodAliases(), FTIDATA_CMF[0]['aliases'] )
 
     def test_getInfoData(self):
         ti_data = {'id': 'foo',
                    'title': 'Foo',
                    'description': 'Foo objects are just used for testing.',
-                   'content_icon': 'foo_icon.gif',
                    'content_meta_type': 'Foo Content',
                    'factory' : 'cmf.foo',
                    'icon_expr' : 'string:${portal_url}/foo_icon_expr.gif',



More information about the checkins mailing list