From 3e09122bf8ef92b9a99ad99cde5b1f457f177c65 Mon Sep 17 00:00:00 2001 From: Yoshinori Okuji <yo@nexedi.com> Date: Tue, 27 Jul 2010 08:21:45 +0000 Subject: [PATCH] Segregate the creation of a mapping dict into getMappingDict. Define a new method getMappedPropertyId. Fix an obvious bug in setMappedProperty. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@37273 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/Document/MappedProperty.py | 45 +++++++++++++++++++------ 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/product/ERP5/Document/MappedProperty.py b/product/ERP5/Document/MappedProperty.py index 52376fabde..32a5ecec85 100644 --- a/product/ERP5/Document/MappedProperty.py +++ b/product/ERP5/Document/MappedProperty.py @@ -49,6 +49,36 @@ class MappedProperty(XMLObject): PropertySheet.CategoryCore, PropertySheet.MappedProperty) + # XXX do we need to protect this method? + def getMappingDict(self, reverse=False): + # Use volatile attributes for caching. + try: + if reverse: + return self._v_reverse_mapping_dict + else: + return self._v_mapping_dict + except AttributeError: + mapping_dict = {} + for line in self.getMappingPropertyList(): + f, t = [x.strip() for x in line.split('|', 1)] + if reverse: + if t[:1] == '-': + f, t = t[1:], '-' + f + else: + f, t = t, f + mapping_dict[f] = t + else: + mapping_dict[f] = t + if reverse: + self._v_reverse_mapping_dict = mapping_dict + else: + self._v_mapping_dict = mapping_dict + return mapping_dict + + # XXX do we need to protect this method? + def getMappedPropertyId(self, property, reverse=False): + return self.getMappingDict(reverse=reverse).get(property, property) + # Security should be handled by the target document not by the mapped # property document. security.declarePublic('getMappedProperty') @@ -58,8 +88,7 @@ class MappedProperty(XMLObject): getProperty = document.getPropertyList else: getProperty = document.getProperty - mapping_dict = dict([[x.strip() for x in x.split('|')] \ - for x in self.getMappingPropertyList()]) + mapping_dict = self.getMappingDict() mapped_property = mapping_dict.get(property, property) if mapped_property.startswith('-'): return -1 * getProperty(mapped_property[1:]) @@ -75,15 +104,9 @@ class MappedProperty(XMLObject): setProperty = document.setPropertyList else: setProperty = document.setProperty - mapping_dict = {} - for x in self.getMappingPropertyList(): - from_property, to_property = [x.strip() for x in x.split('|')] - if to_property.startswith('-'): - mapping_dict[to_property[1:]] = '-%s' % from_property - else: - mapping_dict[to_property] = from_property + mapping_dict = self.getMappingDict(reverse=True) mapped_property = mapping_dict.get(property, property) if mapped_property.startswith('-'): - return setProperty(-1 * value) + return setProperty(mapped_property, -1 * value) else: - return setProperty(value) + return setProperty(mapped_property, value) -- 2.30.9