[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