From 5261391ed9c99f2003e6ab880527f3f649304874 Mon Sep 17 00:00:00 2001 From: Julien Muchembled <jm@nexedi.com> Date: Mon, 9 Dec 2013 16:42:37 +0100 Subject: [PATCH] DomainTool: small optimization of generateMultivaluedMappedValue --- product/ERP5/Tool/DomainTool.py | 40 +++++++++++---------------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/product/ERP5/Tool/DomainTool.py b/product/ERP5/Tool/DomainTool.py index 90caae84c1..84f9af9f6e 100644 --- a/product/ERP5/Tool/DomainTool.py +++ b/product/ERP5/Tool/DomainTool.py @@ -27,6 +27,7 @@ # ############################################################################## +from collections import defaultdict from AccessControl import ClassSecurityInfo from Products.ERP5Type.Globals import InitializeClass, DTMLFile from Products.ERP5Type import Permissions @@ -332,44 +333,29 @@ class DomainTool(BaseTool): # First get the list of predicates if predicate_list is None: predicate_list = self.searchPredicateList(context, test=test, **kw) - if len(predicate_list)==0: - # No predicate, return None - mapped_value = None - else: - # Generate tempDeliveryCell + if predicate_list: from Products.ERP5Type.Document import newTempSupplyCell - mapped_value = newTempSupplyCell(self.getPortalObject(), - 'new_mapped_value') - mapped_value_property_dict = {} - processed_dict = {} - explanation_dict = {} + mapped_value_property_dict = defaultdict(list) + explanation_dict = defaultdict(dict) # Look for each property the first predicate with unique criterion # categories which defines the property for predicate in predicate_list: - predicate_category_list = \ - tuple(predicate.getMembershipCriterionCategoryList()) - + full_prop_dict = explanation_dict[ + tuple(predicate.getMembershipCriterionCategoryList())] for mapped_value_property in predicate.getMappedValuePropertyList(): - prop_list = processed_dict.setdefault(predicate_category_list, []) - full_prop_dict = explanation_dict.setdefault( - predicate_category_list, {}) - if mapped_value_property in prop_list: + if mapped_value_property in full_prop_dict: # we already have one value for this (categories, property) continue - value = predicate.getProperty(mapped_value_property) if value is not None: - prop_list.append(mapped_value_property) full_prop_dict[mapped_value_property] = value - mv_prop_list = \ - mapped_value_property_dict.setdefault( - mapped_value_property, []) - mv_prop_list.append(value) + mapped_value_property_dict[mapped_value_property].append(value) if explanation_only: - return explanation_dict - # Update mapped value - mapped_value = mapped_value.asContext(**mapped_value_property_dict) - return mapped_value + return dict(explanation_dict) + mapped_value = newTempSupplyCell(self.getPortalObject(), + 'new_mapped_value') + mapped_value.__dict__.update(mapped_value_property_dict) + return mapped_value def getChildDomainValueList(self, parent, **kw): -- 2.30.9