[Erp5-report] r40073 jm - in /erp5/trunk/products: ERP5/bootstrap/erp5_core/SkinTemplateIte...
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Nov 8 20:16:10 CET 2010
Author: jm
Date: Mon Nov 8 20:16:10 2010
New Revision: 40073
URL: http://svn.erp5.org?rev=40073&view=rev
Log:
If possible, do not migrate XML to <global name="..." module="erp5.portal_type"/>
This preserves forward compatibility for some BT that are still developped with
instances not using portal types as classes.
Also remove TemplateTool_filterPortalTypeClassDiff, which is unreliable
(because it may break legitime migration of XML) and now useless.
Removed:
erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/TemplateTool_filterPortalTypeClassDiff.xml
Modified:
erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision
erp5/trunk/products/ERP5Type/patches/XMLExportImport.py
Removed: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/TemplateTool_filterPortalTypeClassDiff.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/TemplateTool_filterPortalTypeClassDiff.xml?rev=40072&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/TemplateTool_filterPortalTypeClassDiff.xml [utf8] (original)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/TemplateTool_filterPortalTypeClassDiff.xml (removed)
@@ -1,179 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
- <record id="1" aka="AAAAAAAAAAE=">
- <pickle>
- <global name="Python Script" module="erp5.portal_type"/>
- </pickle>
- <pickle>
- <dictionary>
- <item>
- <key> <string>Script_magic</string> </key>
- <value> <int>3</int> </value>
- </item>
- <item>
- <key> <string>_bind_names</string> </key>
- <value>
- <object>
- <klass>
- <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
- </klass>
- <tuple/>
- <state>
- <dictionary>
- <item>
- <key> <string>_asgns</string> </key>
- <value>
- <dictionary>
- <item>
- <key> <string>name_container</string> </key>
- <value> <string>container</string> </value>
- </item>
- <item>
- <key> <string>name_context</string> </key>
- <value> <string>context</string> </value>
- </item>
- <item>
- <key> <string>name_m_self</string> </key>
- <value> <string>script</string> </value>
- </item>
- <item>
- <key> <string>name_subpath</string> </key>
- <value> <string>traverse_subpath</string> </value>
- </item>
- </dictionary>
- </value>
- </item>
- </dictionary>
- </state>
- </object>
- </value>
- </item>
- <item>
- <key> <string>_body</string> </key>
- <value> <string encoding="cdata"><![CDATA[
-
-if len(old_line_list) !=1 or len(new_line_list) != 1:\n
- return False\n
-new_line = new_line_list[0]\n
-\n
-new_group_list = new_line.split(\'"\')\n
-if len(new_group_list) != 5:\n
- return False\n
-\n
-before, portal_type, module, erp5_portal_type, after = new_group_list\n
-if before != \'<global name=\' or module != \' module=\' or erp5_portal_type != \'erp5.portal_type\' or after != \'/>\':\n
- return False\n
-\n
-old_group_list = old_line_list[0].split(\'"\')\n
-if len(old_group_list) == 5:\n
- before2, ignore, module2, products_erp5type, after2 = old_group_list\n
- return before2 == before and module2 == module and products_erp5type.startswith("Products.ERP5Type.Document.") and after2 == after\n
-return False\n
-
-
-]]></string> </value>
- </item>
- <item>
- <key> <string>_code</string> </key>
- <value>
- <none/>
- </value>
- </item>
- <item>
- <key> <string>_params</string> </key>
- <value> <string>old_line_list, new_line_list</string> </value>
- </item>
- <item>
- <key> <string>categories</string> </key>
- <value>
- <tuple>
- <string>callable_type/script/diff_filter</string>
- </tuple>
- </value>
- </item>
- <item>
- <key> <string>description</string> </key>
- <value> <string encoding="cdata"><![CDATA[
-
-This script filter this kind of xml changes :\n
-- <global name="BaseCategory" module="Products.ERP5Type.Document.BaseCategory"/>\n
-+ <global name="Base Category" module="erp5.portal_type"/>
-
-]]></string> </value>
- </item>
- <item>
- <key> <string>errors</string> </key>
- <value>
- <tuple/>
- </value>
- </item>
- <item>
- <key> <string>func_code</string> </key>
- <value>
- <object>
- <klass>
- <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
- </klass>
- <tuple/>
- <state>
- <dictionary>
- <item>
- <key> <string>co_argcount</string> </key>
- <value> <int>2</int> </value>
- </item>
- <item>
- <key> <string>co_varnames</string> </key>
- <value>
- <tuple>
- <string>old_line_list</string>
- <string>new_line_list</string>
- <string>len</string>
- <string>False</string>
- <string>_getitem_</string>
- <string>new_line</string>
- <string>_getattr_</string>
- <string>new_group_list</string>
- <string>_getiter_</string>
- <string>before</string>
- <string>portal_type</string>
- <string>module</string>
- <string>erp5_portal_type</string>
- <string>after</string>
- <string>old_group_list</string>
- <string>before2</string>
- <string>ignore</string>
- <string>module2</string>
- <string>products_erp5type</string>
- <string>after2</string>
- </tuple>
- </value>
- </item>
- </dictionary>
- </state>
- </object>
- </value>
- </item>
- <item>
- <key> <string>func_defaults</string> </key>
- <value>
- <none/>
- </value>
- </item>
- <item>
- <key> <string>id</string> </key>
- <value> <string>TemplateTool_filterPortalTypeClassDiff</string> </value>
- </item>
- <item>
- <key> <string>portal_type</string> </key>
- <value> <string>Python Script</string> </value>
- </item>
- <item>
- <key> <string>warnings</string> </key>
- <value>
- <tuple/>
- </value>
- </item>
- </dictionary>
- </pickle>
- </record>
-</ZopeData>
Modified: erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision?rev=40073&r1=40072&r2=40073&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision [utf8] (original)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision [utf8] Mon Nov 8 20:16:10 2010
@@ -1 +1 @@
-1780
\ No newline at end of file
+1781
\ No newline at end of file
Modified: erp5/trunk/products/ERP5Type/patches/XMLExportImport.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/patches/XMLExportImport.py?rev=40073&r1=40072&r2=40073&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/patches/XMLExportImport.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/patches/XMLExportImport.py [utf8] Mon Nov 8 20:16:10 2010
@@ -14,7 +14,7 @@
# Make sure the xml export will be ordered
-import re
+import re, sys
from ZODB.utils import u64, p64
from Shared.DC.xml import ppml
from base64 import encodestring
@@ -105,6 +105,20 @@ def cleanup_ZopePageTemplate(state):
def cleanupState(classdef, state):
classdef = getCleanClass(classdef)
+ # if possible, unmigrate document using portal_type as classes
+ # (in order to preserve forward compatibility)
+ if getattr(classdef, '__module__', None) == 'erp5.portal_type' and \
+ len(classdef.__bases__) == 1:
+ base, = classdef.__bases__
+ portal_type = isinstance(state, dict) and state.get('portal_type') or \
+ getattr(base, 'portal_type', None)
+ if portal_type == classdef.__name__:
+ class_name = base.__name__
+ try:
+ module = sys.modules['Products.ERP5Type.Document.' + class_name]
+ classdef = getattr(module, class_name)
+ except KeyError:
+ classdef = base
cleanupState = PICKLE_CLEANERS.get(classdef, lambda state: None)
cleanupState(state)
return classdef, state
More information about the Erp5-report
mailing list