[Erp5-report] r39071 rafael - in /erp5/trunk/bt5/erp5_upgrader: ExtensionTemplateItem/ Skin...
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Oct 12 21:17:32 CEST 2010
Author: rafael
Date: Tue Oct 12 21:17:31 2010
New Revision: 39071
URL: http://svn.erp5.org?rev=39071&view=rev
Log:
Introduced backward compatibility for old instances.
Added:
erp5/trunk/bt5/erp5_upgrader/ExtensionTemplateItem/ERP5UpgraderCompatibility.py
erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_getSystemSignatureDict.xml
erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_setProductPath.xml
Modified:
erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_upgradeProductPath.xml
erp5/trunk/bt5/erp5_upgrader/bt/revision
erp5/trunk/bt5/erp5_upgrader/bt/template_extension_id_list
Added: erp5/trunk/bt5/erp5_upgrader/ExtensionTemplateItem/ERP5UpgraderCompatibility.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_upgrader/ExtensionTemplateItem/ERP5UpgraderCompatibility.py?rev=39071&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_upgrader/ExtensionTemplateItem/ERP5UpgraderCompatibility.py (added)
+++ erp5/trunk/bt5/erp5_upgrader/ExtensionTemplateItem/ERP5UpgraderCompatibility.py [utf8] Tue Oct 12 21:17:31 2010
@@ -0,0 +1,176 @@
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
+# Rafael Monnerat <rafael at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from Products.ERP5Type.Cache import CachingMethod
+from App.config import getConfiguration
+from AccessControl import Unauthorized
+
+import os
+# XXX This file is destinated to include methods or scripts that are not prevent
+# into one old version. The methods here should be removed once the version
+# installed into the instance is not supported anymore.
+
+# XXX DO NOT KEEP LOCAL CHANGES HERE, ALL CHANGES SHOULD BE DONE ONLY IN
+# INTROSPECTION TOOL OR TRUNK, AND BACKPORTED TO HERE LATER.
+
+
+#########################################################################################
+# Methods introduced into portal_introspection into 5.4.3
+#
+
+# XXX This method is a copy and paste of IntrospectionTool.getSystemSignatureDict
+# This should be kept until versions lower than 5.4.3 still supported.
+def getSystemSignatureDict(self):
+ """
+ Returns a dictionnary with all versions of installed libraries
+
+ {
+ 'python': '2.4.3'
+ , 'pysvn': '1.2.3'
+ , 'ERP5' : "5.4.3"
+ }
+ NOTE: consider using autoconf / automake tools ?
+ """
+ def tuple_to_format_str(t):
+ return '.'.join([str(i) for i in t])
+ from Products import ERP5 as erp5_product
+ erp5_product_path = erp5_product.__file__.split("/")[:-1]
+ try:
+ erp5_v = open("/".join((erp5_product_path) + ["VERSION.txt"])).read().strip()
+ erp5_version = erp5_v.replace("ERP5 ", "")
+ except:
+ erp5_version = None
+
+ from App import version_txt
+ zope_version = tuple_to_format_str(version_txt.getZopeVersion()[:3])
+
+ from sys import version_info
+ # Get only x.x.x numbers.
+ py_version = tuple_to_format_str(version_info[:3])
+ try:
+ import pysvn
+ # Convert tuple to x.x.x format
+ pysvn_version = tuple_to_format_str(pysvn.version)
+ except:
+ pysvn_version = None
+
+ return { "python" : py_version , "pysvn" : pysvn_version ,
+ "erp5" : erp5_version, "zope" : zope_version
+ }
+
+# XXX This method is a copy and paste of IntrospectionTool._loadExternalConfig
+# This should be kept until versions lower than 5.4.3 still supported.
+# NOT USED BY EXTERNAL METHOD
+def _loadExternalConfig():
+ """
+ Load configuration from one external file, this configuration
+ should be set for security reasons to prevent people access
+ forbidden areas in the system.
+ """
+ def cached_loadExternalConfig():
+ import ConfigParser
+ config = ConfigParser.ConfigParser()
+ config.readfp(open('/etc/erp5.cfg'))
+ return config
+
+ cached_loadExternalConfig = CachingMethod(cached_loadExternalConfig,
+ id='IntrospectionTool__loadExternalConfig',
+ cache_factory='erp5_content_long')
+ return cached_loadExternalConfig()
+
+# XXX This method is a copy and paste of IntrospectionTool._getZopeConfigurationFile
+# This should be kept until versions lower than 5.4.3 still supported.
+# NOT USED BY EXTERNAL METHOD
+def _getZopeConfigurationFile(relative_path="", mode="r"):
+ """
+ Get a configuration file from the instance using relative path
+ """
+ if ".." in relative_path or relative_path.startswith("/"):
+ raise Unauthorized("In Relative Path, you cannot use .. or startwith / for security reason.")
+
+ instance_home = getConfiguration().instancehome
+ file_path = os.path.join(instance_home, relative_path)
+ if not os.path.exists(file_path):
+ raise IOError, 'The file: %s does not exist.' % file_path
+
+ return open(file_path, mode)
+
+# XXX This method is a copy and paste of IntrospectionTool.setProductPath
+# This should be kept until versions lower than 5.4.3 still supported.
+def setProductPath(self, relative_path):
+ """
+ Set the value of SOFTWARE_HOME for zopectl startup script
+ or from zope.conf (whichever is most relevant)
+
+ Rationale: multiple versions of Products can be present
+ on the same system
+
+ relative_path is usually defined by a number of release
+ (ex. 5.4.2)
+
+ WARNING: the list of possible path should be protected
+ if possible (ex. /etc/erp5/product)
+ """
+ # XXX Local to remove "self"
+ config = _loadExternalConfig()
+ allowed_path_list = config.get("main", "products").split("\n")
+ base_product_path_list = config.get("base", "base_product_path").split("\n")
+ if len(base_product_path_list) == 0:
+ raise Unauthorized(
+ "base_product_path_list is not defined into configuration.")
+
+ base_product_path = base_product_path_list[0]
+ path = base_product_path + relative_path
+
+ if path not in allowed_path_list:
+ raise Unauthorized(
+ "You are setting one Unauthorized path as Product Path (%s)." \
+ % (path))
+
+ # XXX Local to remove "self"
+ config_file = _getZopeConfigurationFile("etc/zope.conf")
+ new_file_list = []
+ ignore_list = ['parts/cmf15', "parts/products-deps" , "parts/products-other"]
+ for line in config_file:
+ new_line = line
+ #if line.strip(" ").startswith("products %s" % (base_product_path)):
+ if line.strip(" ").startswith("products"):
+ # Only comment the line, so it can easily reverted
+ if len([i for i in ignore_list if i in line]) == 0:
+ new_line = "#%s" % (line)
+ new_file_list.append(new_line)
+ new_file_list.append("products %s\n" % (path))
+ config_file.close()
+
+ # reopen file for write
+ # XXX Local to remove "self"
+ config_file = _getZopeConfigurationFile("etc/zope.conf", "w")
+ config_file.write("".join(new_file_list))
+ config_file.close()
+ return
+
Added: erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_getSystemSignatureDict.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_getSystemSignatureDict.xml?rev=39071&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_getSystemSignatureDict.xml (added)
+++ erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_getSystemSignatureDict.xml [utf8] Tue Oct 12 21:17:31 2010
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+ <record id="1" aka="AAAAAAAAAAE=">
+ <pickle>
+ <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/>
+ </pickle>
+ <pickle>
+ <dictionary>
+ <item>
+ <key> <string>_function</string> </key>
+ <value> <string>getSystemSignatureDict</string> </value>
+ </item>
+ <item>
+ <key> <string>_module</string> </key>
+ <value> <string>ERP5UpgraderCompatibility</string> </value>
+ </item>
+ <item>
+ <key> <string>id</string> </key>
+ <value> <string>ERP5Site_getSystemSignatureDict</string> </value>
+ </item>
+ <item>
+ <key> <string>title</string> </key>
+ <value> <string>Method not present after 5.4.3 into portal Introspections</string> </value>
+ </item>
+ </dictionary>
+ </pickle>
+ </record>
+</ZopeData>
Added: erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_setProductPath.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_setProductPath.xml?rev=39071&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_setProductPath.xml (added)
+++ erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_setProductPath.xml [utf8] Tue Oct 12 21:17:31 2010
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+ <record id="1" aka="AAAAAAAAAAE=">
+ <pickle>
+ <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/>
+ </pickle>
+ <pickle>
+ <dictionary>
+ <item>
+ <key> <string>_function</string> </key>
+ <value> <string>setProductPath</string> </value>
+ </item>
+ <item>
+ <key> <string>_module</string> </key>
+ <value> <string>ERP5UpgraderCompatibility</string> </value>
+ </item>
+ <item>
+ <key> <string>id</string> </key>
+ <value> <string>ERP5Site_setProductPath</string> </value>
+ </item>
+ <item>
+ <key> <string>title</string> </key>
+ <value> <string>Method not present after 5.4.3 into portal Introspections</string> </value>
+ </item>
+ </dictionary>
+ </pickle>
+ </record>
+</ZopeData>
Modified: erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_upgradeProductPath.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_upgradeProductPath.xml?rev=39071&r1=39070&r2=39071&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_upgradeProductPath.xml [utf8] (original)
+++ erp5/trunk/bt5/erp5_upgrader/SkinTemplateItem/portal_skins/erp5_upgrader/ERP5Site_upgradeProductPath.xml [utf8] Tue Oct 12 21:17:31 2010
@@ -2,10 +2,7 @@
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
- <tuple>
- <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
- <tuple/>
- </tuple>
+ <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
@@ -55,10 +52,17 @@
<key> <string>_body</string> </key>
<value> <string>"""\n
Update Product Path in zope.conf\n
+\n
+ ERP5Site_getSystemSignatureDict and ERP5Site_setProductPath are \n
+ used to keep backward compatibility with newer implementations.\n
"""\n
\n
signature = context.ERP5Site_getUpgraderSignature()\n
-product_version = context.portal_introspections.getSystemSignatureDict()[\'erp5\']\n
+try:\n
+ product_version = context.portal_introspections.getSystemSignatureDict()[\'erp5\']\n
+except:\n
+ # Try to use externals instead because portal_introspections is not available.\n
+ product_version = context.ERP5Site_getSystemSignatureDict()[\'erp5\']\n
\n
if product_version == signature["release"]:\n
return []\n
@@ -67,7 +71,13 @@ if not upgrade:\n
return ["Upgrade required for Products. Current: %s , Expect %s" % (\n
product_version, signature["release"]) ]\n
\n
-context.portal_introspections.setProductPath(signature["release"])\n
+context.ERP5Site_beforeUpgradeProductPath()\n
+\n
+try:\n
+ context.portal_introspections.setProductPath(signature["release"])\n
+except:\n
+ # Try to use externals instead because portal_introspections is not available.\n
+ context.ERP5Site_setProductPath(signature["release"])\n
\n
return ["Upgraded Product Path List to %s" % (signature["release"])]\n
</string> </value>
Modified: erp5/trunk/bt5/erp5_upgrader/bt/revision
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_upgrader/bt/revision?rev=39071&r1=39070&r2=39071&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_upgrader/bt/revision [utf8] (original)
+++ erp5/trunk/bt5/erp5_upgrader/bt/revision [utf8] Tue Oct 12 21:17:31 2010
@@ -1 +1 @@
-532
\ No newline at end of file
+533
\ No newline at end of file
Modified: erp5/trunk/bt5/erp5_upgrader/bt/template_extension_id_list
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_upgrader/bt/template_extension_id_list?rev=39071&r1=39070&r2=39071&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_upgrader/bt/template_extension_id_list [utf8] (original)
+++ erp5/trunk/bt5/erp5_upgrader/bt/template_extension_id_list [utf8] Tue Oct 12 21:17:31 2010
@@ -1 +1,2 @@
-ERP5UpgraderUtils
\ No newline at end of file
+ERP5UpgraderUtils
+ERP5UpgraderCompatibility
\ No newline at end of file
More information about the Erp5-report
mailing list