Commit 96eca6f1 authored by Julien Muchembled's avatar Julien Muchembled

Fix ERP5TypeInformation.getInstancePropertyAndBaseCategoryList

This fixes test_getInstancePropertyAndBaseCategoryList
and also removes obsolete 'updatePropertySheetDefinitionDict' methods.
parent f5aacbf9
......@@ -728,23 +728,6 @@ class PDFTypeInformation(ERP5TypeInformation):
permission_list=['View']),
]
def updatePropertySheetDefinitionDict(self, definition_dict, **kw):
"""
This function add properties of scribus file to the propertySheet
"""
if self.getDefaultScribusFormValue() is None:
return
if '_properties' in definition_dict:
parsed_scribus = self._getParsedScribusFile()
for page_content in parsed_scribus.itervalues():
for field_name, fields_values in page_content:
field_id = field_name
field_type = fields_values["data_type"]
definition_dict['_properties'].append({'id':field_name[3:],
'type':field_type,
'mode':'w'})
ERP5TypeInformation.updatePropertySheetDefinitionDict(self, definition_dict)
def getTypePropertySheetValueList(self):
property_sheet_list = super(PDFTypeInformation,
self).getTypePropertySheetValueList()
......
......@@ -145,10 +145,6 @@ class AcquiredProperty(StandardProperty):
"""
@see Products.ERP5Type.Core.StandardProperty._asPropertyMap
"""
# A property whose type is 'content' must never be used by Zope
if property_dict['elementary_type'] == 'content':
return {}
property_map = super(AcquiredProperty, cls)._asPropertyMap(property_dict)
property_map['portal_type'] = property_map.pop('content_portal_type')
......
......@@ -423,19 +423,6 @@ class ERP5TypeInformation(XMLObject,
import erp5.portal_type as module
return getattr(module, self.getId())
security.declarePrivate('updatePropertySheetDefinitionDict')
def updatePropertySheetDefinitionDict(self, definition_dict):
for property_sheet_name in self.getTypePropertySheetList():
base = getattr(PropertySheet, property_sheet_name, None)
if base is not None:
for list_name, property_list in definition_dict.items():
try:
property_list += getattr(base, list_name, ())
except TypeError:
raise ValueError("%s is not a list for %s" % (list_name, base))
if '_categories' in definition_dict:
definition_dict['_categories'] += self.getTypeBaseCategoryList()
# The following 2 methods are needed before there are generated.
security.declareProtected(Permissions.AccessContentsInformation,
......@@ -517,24 +504,21 @@ class ERP5TypeInformation(XMLObject,
'getInstancePropertyAndBaseCategoryList')
def getInstancePropertyAndBaseCategoryList(self):
"""Return all the properties and base categories of the portal type. """
# PropertHolder._properties doesn't contain 'content' properties.
ob = self.constructTempInstance(self, self.getId())
property_list = list(getattr(ob.__class__, '_properties', []))
self.updatePropertySheetDefinitionDict({'_properties': property_list})
for property_sheet in getClassPropertyList(ob.__class__):
property_list += getattr(property_sheet, '_properties', () )
# XXX: Hack until introspection methods are defined. At least, this works
# for portal_type whose properties are defined dynamically
# (e.g. temporary property sheets).
# See also AcquiredProperty._asPropertyMap
cls = self.getPortalObject().portal_types.getPortalTypeClass(self.getId())
return_set = set()
for property in property_list:
for property in cls.getAccessorHolderPropertyList(content=True):
if property['type'] == 'content':
for suffix in property['acquired_property_id']:
return_set.add(property['id'] + '_' + suffix)
else:
return_set.add(property['id'])
for category in ob.getBaseCategoryList():
for category in cls._categories:
return_set.add(category)
return_set.add(category + '_free_text')
# XXX Can't return set to restricted code in Zope 2.8.
return list(return_set)
......
......@@ -157,11 +157,16 @@ class PortalTypeMetaClass(GhostBaseMetaClass, PropertyHolder):
"""
return meta_class.subclass_register.get(cls, [])
def getAccessorHolderPropertyList(cls):
def getAccessorHolderPropertyList(cls, content=False):
"""
Get unique properties, by its id, as defined in the accessor holders,
meaningful for _propertyMap for example
Properties whose type is 'content' should not be visible in ZMI
so they are not returned by default. This would also slow down
MovementCollectionDiff._getPropertyList (ERP5 product). However,
ERP5TypeInformation.getInstancePropertyAndBaseCategoryList needs them.
@see Products.ERP5Type.Base.Base._propertyMap
"""
cls.loadClass()
......@@ -170,7 +175,8 @@ class PortalTypeMetaClass(GhostBaseMetaClass, PropertyHolder):
for klass in cls.mro():
if klass.__module__.startswith('erp5.accessor_holder'):
for property in klass._properties:
property_dict.setdefault(property['id'], property)
if content or property['type'] != 'content':
property_dict.setdefault(property['id'], property)
return property_dict.values()
......
......@@ -3093,15 +3093,18 @@ class TestERP5Type(PropertySheetTestCase, LogInterceptor):
self.assertEquals(None, person.getProperty('foo_property'))
self.assertEquals(None, person.getProperty('foobar_property'))
def testgetInstancePropertyAndBaseCategoryList(self):
def test_getInstancePropertyAndBaseCategoryList(self):
"""
Check that the method getInstancePropertyAndBaseCategoryList return
properties from property sheets correctly
"""
portal_type = self.portal.portal_types.Email
portal_type = self.portal.portal_types.Person
result_list = portal_type.getInstancePropertyAndBaseCategoryList()
self.assertTrue("description" in result_list,
"description not in %s" % result_list)
# Test a simple property, an acquired one on and a category.
for x in "id", "address_city", "function":
self.assertTrue(x in result_list, "%s not in %s" % (x, result_list))
# Values from which acquired properties are fetched are not returned.
self.assertFalse("address" in result_list)
class TestAccessControl(ERP5TypeTestCase):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment