From 4670ed558f97b9fabb9de0e4deef36ac1c37f100 Mon Sep 17 00:00:00 2001 From: Leonardo Rochael Almeida <leonardo@nexedi.com> Date: Wed, 21 Sep 2011 16:19:42 +0200 Subject: [PATCH] Allow a skin folder to no longer exist when being uninstalled Allow it to no longer be registered as well --- product/ERP5/Document/BusinessTemplate.py | 30 ++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py index ac0354f6e2..a015cfa553 100644 --- a/product/ERP5/Document/BusinessTemplate.py +++ b/product/ERP5/Document/BusinessTemplate.py @@ -297,7 +297,7 @@ def deleteSkinSelection(skin_tool, skin_name): del_skin=1) skin_tool.getPortalObject().changeSkin(None) -def unregisterSkinFolder(skin_tool, skin_folder, skin_selection_list): +def unregisterSkinFolderId(skin_tool, skin_folder_id, skin_selection_list): skin_folder_id = skin_folder.getId() for skin_selection in skin_selection_list: @@ -1296,8 +1296,7 @@ class ObjectTemplateItem(BaseTemplateItem): if container.meta_type == 'CMF Skins Tool': # we are removing a skin folder, check and # remove if registered skin selection - skin_folder = container[object_id] - unregisterSkinFolder(container, skin_folder, + unregisterSkinFolderId(container, object_id, container.getSkinSelections()) container.manage_delObjects([object_id]) @@ -1697,8 +1696,8 @@ class RegisteredSkinSelectionTemplateItem(BaseTemplateItem): 'business_template_registered_skin_selections', selection_list) - unregisterSkinFolder(skin_tool, skin_folder, - skin_tool.getSkinSelections()) + unregisterSkinFolderId(skin_tool, skin_folder_id, + skin_tool.getSkinSelections()) registerSkinFolder(skin_tool, skin_folder) def uninstall(self, context, **kw): @@ -1712,16 +1711,18 @@ class RegisteredSkinSelectionTemplateItem(BaseTemplateItem): object_keys = self._objects.keys() for skin_folder_id in object_keys: - skin_folder = skin_tool[skin_folder_id] - current_selection_list = skin_folder.getProperty( - 'business_template_registered_skin_selections', []) + current_selection_list = [] + skin_folder = skin_tool.get(skin_folder_id, None) + if skin_folder is not None: + current_selection_list = skin_folder.getProperty( + 'business_template_registered_skin_selections', []) current_selection_set = set(current_selection_list) skin_selection_list = self._objects[skin_folder_id] if isinstance(skin_selection_list, str): skin_selection_list = skin_selection_list.replace(',', ' ').split(' ') for skin_selection in skin_selection_list: - current_selection_set.remove(skin_selection) + current_selection_set.discard(skin_selection) current_selection_list = list(current_selection_set) if current_selection_list: @@ -1730,15 +1731,16 @@ class RegisteredSkinSelectionTemplateItem(BaseTemplateItem): current_selection_list) # Unregister skin folder from skin selection - unregisterSkinFolder(skin_tool, skin_folder, skin_selection_list) + unregisterSkinFolderId(skin_tool, skin_folder_id, skin_selection_list) else: - delattr(skin_folder, 'business_template_registered_skin_selections') - # Delete all skin selection for skin_selection in skin_selection_list: deleteSkinSelection(skin_tool, skin_selection) - # Register to all other skin selection - registerSkinFolder(skin_tool, skin_folder) + if skin_folder is not None: + delattr(skin_folder, 'business_template_registered_skin_selections') + # Register to all other skin selection + registerSkinFolder(skin_tool, skin_folder) + def preinstall(self, context, installed_item, **kw): modified_object_list = {} -- GitLab