From 450db0651a871528f9347af72a42281b7da90958 Mon Sep 17 00:00:00 2001 From: Christophe Dumez <christophe@nexedi.com> Date: Mon, 20 Mar 2006 16:37:03 +0000 Subject: [PATCH] - commented diff function git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@6141 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/Document/BusinessTemplate.py | 83 ++++++++++++++++------- 1 file changed, 60 insertions(+), 23 deletions(-) diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py index 403cf35a4e..b892ab7a8d 100755 --- a/product/ERP5/Document/BusinessTemplate.py +++ b/product/ERP5/Document/BusinessTemplate.py @@ -1157,6 +1157,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem): else: LOG('BusinessTemplate build', 100, 'portal type %s not found in workflow chain' %(portal_type)) + # Function to generate XML Code Manually def generateXml(self, path=None): xml_data = '<workflow_chain>' keys = self._objects.keys() @@ -1186,7 +1187,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem): # each portal type (default_chain, chain_dict) = getChainByType(context) # Set the default chain to the empty string is probably the - # best solution, by default it is 'default_workflow', wich is + # best solution, by default it is 'default_workflow', which is # not very usefull default_chain = '' for path in self._objects.keys(): @@ -1250,6 +1251,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem): else: self._objects[portal_type] = [allowed_type] + # Function to generate XML Code Manually def generateXml(self, path=None): dictio = self._objects xml_data = '<%s>' %(self.xml_tag,) @@ -1456,6 +1458,16 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): xml_data += os.linesep+'</catalog_method>' f.write(str(xml_data)) f.close() + + # Function to generate XML Code Manually + def generateXml(self, path=None): + obj = self._objects[path] + xml_data = '<key_list>' + obj.sort() + for key in obj: + xml_data += os.linesep+' <key>%s</key>' %(key) + xml_data += os.linesep+'</key_list>' + return xml_data def install(self, context, trashbin, **kw): ObjectTemplateItem.install(self, context, trashbin, **kw) @@ -1807,6 +1819,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem): type_role_list.append(type_role_dict) self._objects[relative_url] = type_role_list + # Function to generate XML Code Manually def generateXml(self, path=None): type_role_list = self._objects[path] xml_data = '<type_roles>' @@ -1964,6 +1977,7 @@ class SitePropertyTemplateItem(BaseTemplateItem): p._delProperty(id) BaseTemplateItem.uninstall(self, context, **kw) + # Function to generate XML Code Manually def generateXml(self, path=None): xml_data = '' prop_type, obj = self._objects[path] @@ -2010,6 +2024,7 @@ class ModuleTemplateItem(BaseTemplateItem): dict['permission_list'] = module.showPermissions() self._objects[id] = dict + # Function to generate XML Code Manually def generateXml(self, path=None): dict = self._objects[path] xml_data = '<module>' @@ -2337,6 +2352,7 @@ class RoleTemplateItem(BaseTemplateItem): del roles[role] p.__ac_roles__ = tuple(roles.keys()) + # Function to generate XML Code Manually def generateXml(self, path): obj = self._objects[path] xml_data = '<role_list>' @@ -2436,6 +2452,7 @@ class CatalogResultKeyTemplateItem(BaseTemplateItem): catalog.sql_search_result_keys = sql_search_result_keys BaseTemplateItem.uninstall(self, context, **kw) + # Function to generate XML Code Manually def generateXml(self, path=None): obj = self._objects[path] xml_data = '<key_list>' @@ -2538,6 +2555,7 @@ class CatalogRelatedKeyTemplateItem(BaseTemplateItem): catalog.sql_catalog_related_keys = sql_catalog_related_keys BaseTemplateItem.uninstall(self, context, **kw) + # Function to generate XML Code Manually def generateXml(self, path=None): obj = self._objects[path] xml_data = '<key_list>' @@ -2637,6 +2655,7 @@ class CatalogResultTableTemplateItem(BaseTemplateItem): catalog.sql_search_tables = sql_search_tables BaseTemplateItem.uninstall(self, context, **kw) + # Function to generate XML Code Manually def generateXml(self, path=None): obj = self._objects[path] xml_data = '<key_list>' @@ -2737,6 +2756,7 @@ class CatalogKeywordKeyTemplateItem(BaseTemplateItem): catalog.sql_catalog_keyword_search_keys = sql_keyword_keys BaseTemplateItem.uninstall(self, context, **kw) + # Function to generate XML Code Manually def generateXml(self, path=None): obj = self._objects[path] xml_data = '<key_list>' @@ -2837,6 +2857,7 @@ class CatalogFullTextKeyTemplateItem(BaseTemplateItem): catalog.sql_catalog_full_text_search_keys = sql_full_text_keys BaseTemplateItem.uninstall(self, context, **kw) + # Function to generate XML Code Manually def generateXml(self, path=None): obj = self._objects[path] xml_data = '<key_list>' @@ -2938,6 +2959,7 @@ class CatalogRequestKeyTemplateItem(BaseTemplateItem): catalog.sql_catalog_request_keys = sql_catalog_request_keys BaseTemplateItem.uninstall(self, context, **kw) + # Function to generate XML Code Manually def generateXml(self, path=None): obj = self._objects[path] xml_data = '<key_list>' @@ -3037,6 +3059,7 @@ class CatalogMultivalueKeyTemplateItem(BaseTemplateItem): catalog.sql_catalog_multivalue_keys = sql_catalog_multivalue_keys BaseTemplateItem.uninstall(self, context, **kw) + # Function to generate XML Code Manually def generateXml(self, path=None): obj = self._objects[path] xml_data = '<key_list>' @@ -3137,6 +3160,7 @@ class CatalogTopicKeyTemplateItem(BaseTemplateItem): catalog.sql_catalog_topic_search_keys = sql_catalog_topic_search_keys BaseTemplateItem.uninstall(self, context, **kw) + # Function to generate XML Code Manually def generateXml(self, path=None): obj = self._objects[path] xml_data = '<key_list>' @@ -3251,6 +3275,7 @@ class LocalRolesTemplateItem(BaseTemplateItem): {}) or {} self._objects[path] = (local_roles_dict, group_local_roles_dict) + # Function to generate XML Code Manually def generateXml(self, path=None): local_roles_dict, group_local_roles_dict = self._objects[path] local_roles_keys = local_roles_dict.keys() @@ -4207,15 +4232,17 @@ Business Template is a set of definitions, such as skins, portal types and categ 'CatalogRequestKey' : '_catalog_request_key_item', 'CatalogMultivalueKey' : '_catalog_multivalue_key_item', 'CatalogTopicKey' : '_catalog_topic_key_item', + 'CatalogMethod' : '_catalog_method_item', } object_id = REQUEST.object_id object_class = REQUEST.object_class - # get objects + + # Get objects item_name = class_name_dict[object_class] new_bt =self - # compare with a given business template + # Compare with a given business template compare_to_zodb = 0 bt2_id = kw.get('compare_with', None) if bt2_id is not None: @@ -4230,7 +4257,7 @@ Business Template is a set of definitions, such as skins, portal types and categ compare_to_zodb = 1 if compare_to_zodb: bt2 = self.portal_templates.manage_clone(ob=installed_bt, id='installed_bt_for_diff') - # update portal types properties to get last modifications + # Update portal types properties to get last modifications bt2.getPortalTypesProperties() bt2.edit(description='tmp bt generated for diff') installed_bt = bt2 @@ -4242,68 +4269,78 @@ Business Template is a set of definitions, such as skins, portal types and categ installed_item.build(self) new_object = new_item._objects[object_id] installed_object = installed_item._objects[object_id] - # make diff diff_msg = '' + + # Real Zope Objects (can be exported into XML directly by Zope) item_list_1 = ['_product_item', '_workflow_item', '_portal_type_item', '_category_item', '_path_item', - '_skin_item', '_action_item'] - item_list_2 = ['_site_property_item', '_module_item', '_catalog_result_key_item', '_catalog_related_key_item', - '_catalog_result_table_item', '_catalog_keyword_key_item', '_catalog_full_text_key_item', - '_catalog_request_key_item', '_catalog_multivalue_key_item', '_catalog_topic_key_item', - '_portal_type_allowed_content_type_item', '_portal_type_hidden_content_type_item', - '_portal_type_property_sheet_item', '_portal_type_roles_item', - '_portal_type_base_category_item', '_local_roles_item', - '_portal_type_workflow_chain_item'] - item_list_3 = ['_document_item', '_property_sheet_item', - '_constraint_item', '_extension_item', '_test_item', - '_message_translation_item'] + '_skin_item', '_action_item',] + + # Not considered as objects by Zope (will be exported into XML manually) + item_list_2 = ['_site_property_item', '_module_item', '_catalog_result_key_item', '_catalog_related_key_item', '_catalog_result_table_item', '_catalog_keyword_key_item', '_catalog_full_text_key_item', '_catalog_request_key_item', '_catalog_multivalue_key_item', '_catalog_topic_key_item', '_portal_type_allowed_content_type_item', '_portal_type_hidden_content_type_item', '_portal_type_property_sheet_item', '_portal_type_roles_item', '_portal_type_base_category_item', '_local_roles_item', '_portal_type_workflow_chain_item',] + + # Text objects (no need to export them into XML) + item_list_3 = ['_document_item', '_property_sheet_item', '_constraint_item', '_extension_item', '_test_item', '_message_translation_item',] if item_name in item_list_1: - f1 = StringIO() - f2 = StringIO() - # remove uneeded property + f1 = StringIO() # for XML export of New Object + f2 = StringIO() # For XML export of Installed Object + # Remove unneeded properties new_object = new_item.removeProperties(new_object) installed_object = installed_item.removeProperties(installed_object) + # XML Export in memory OFS.XMLExportImport.exportXML(new_object._p_jar, new_object._p_oid, f1) OFS.XMLExportImport.exportXML(installed_object._p_jar, installed_object._p_oid, f2) new_obj_xml = f1.getvalue() + f1.close() installed_obj_xml = f2.getvalue() - f1.close() f2.close() new_ob_xml_lines = new_obj_xml.splitlines() installed_ob_xml_lines = installed_obj_xml.splitlines() + # End of XML export + + # Diff between XML objects diff_list = list(unified_diff(installed_ob_xml_lines, new_ob_xml_lines, tofile=new_bt.getId(), fromfile=installed_bt.getId(), lineterm='')) if len(diff_list) != 0: - diff_msg += '\n\nObject %s diff :\n' %( object_id) + diff_msg += '\n\nObject %s diff :\n' % (object_id,) diff_msg += '\n'.join(diff_list) else: diff_msg = 'No diff' elif item_name in item_list_2: + # Generate XML code manually new_obj_xml = new_item.generateXml(path= object_id) installed_obj_xml = installed_item.generateXml(path= object_id) new_obj_xml_lines = new_obj_xml.splitlines() installed_obj_xml_lines = installed_obj_xml.splitlines() + # End of XML Code Generation + + # Diff between XML objects diff_list = list(unified_diff(installed_obj_xml_lines, new_obj_xml_lines, tofile=new_bt.getId(), fromfile=installed_bt.getId(), lineterm='')) if len(diff_list) != 0: - diff_msg += '\n\nObject %s diff :\n' %( object_id) + diff_msg += '\n\nObject %s diff :\n' % (object_id,) diff_msg += '\n'.join(diff_list) else: diff_msg = 'No diff' elif item_name in item_list_3: + # Diff between text objects new_obj_lines = new_object.splitlines() installed_obj_lines = installed_object.splitlines() diff_list = list(unified_diff(installed_obj_lines, new_obj_lines, tofile=new_bt.getId(), fromfile=installed_bt.getId(), lineterm='')) if len(diff_list) != 0: - diff_msg += '\n\nObject %s diff :\n' %( object_id) + diff_msg += '\n\nObject %s diff :\n' % (object_id,) diff_msg += '\n'.join(diff_list) else: diff_msg = 'No diff' + else: # Added By <christophe@nexedi.com> + diff_msg += 'Unsupported file !' + if compare_to_zodb: self.portal_templates.manage_delObjects(ids=['installed_bt_for_diff']) return diff_msg + def getPortalTypesProperties(self, **kw): """ -- 2.30.9