From bcd8fccd6fd24d6ad9a92bfb19c7625b3c6710af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Calonne?= <aurel@nexedi.com> Date: Mon, 14 Dec 2009 13:51:50 +0000 Subject: [PATCH] fix findSpecialiseValueList so that now it works with portal_type_list parameter and an inheritance tree bigger than 3 levels git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@31280 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/Document/TradeCondition.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/product/ERP5/Document/TradeCondition.py b/product/ERP5/Document/TradeCondition.py index 2d8e04f0b8..33244972da 100644 --- a/product/ERP5/Document/TradeCondition.py +++ b/product/ERP5/Document/TradeCondition.py @@ -130,23 +130,30 @@ class TradeCondition(Path, Transformation, XMLMatrix): specialise_value_list = context.getSpecialiseValueList() visited_trade_condition_list = context.getSpecialiseValueList(\ portal_type=portal_type_list) + while len(specialise_value_list) != 0: specialise = specialise_value_list.pop(0) try: - child_list = specialise.getSpecialiseValueList(\ + # all children + child_specialised_value_list = specialise.getSpecialiseValueList() + # only children that match the portal_type given + child_visited_trade_condition_list = specialise.getSpecialiseValueList(\ portal_type=portal_type_list) except AttributeError: # it is possible, that specialised object cannot be specialised # anymore continue - intersection = set(child_list).intersection(\ + intersection = set(child_specialised_value_list).intersection(\ set(visited_trade_condition_list)) - for model in child_list: + for model in child_specialised_value_list: + # don't add model that have already been visited. This permit to + # visit all the tree and to prevent having circular dependency if model not in intersection: - # don't add model that are already been visited. This permit to - # visit all model tree, and to not have circular dependency specialise_value_list.append(model) - visited_trade_condition_list.append(model) + # only add those who matches the portal type given + if model in child_visited_trade_condition_list: + visited_trade_condition_list.append(model) + return visited_trade_condition_list security.declareProtected(Permissions.AccessContentsInformation, -- 2.30.9