[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