[Erp5-report] r39415 nicolas.dumazet - /erp5/trunk/products/ERP5Type/Dynamic/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Oct 21 05:41:51 CEST 2010


Author: nicolas.dumazet
Date: Thu Oct 21 05:41:51 2010
New Revision: 39415

URL: http://svn.erp5.org?rev=39415&view=rev
Log:
Partly re-add hardcoding for bootstraping.

you can't call getattr(type_tool, portal_type_name) if Base Type
and Solver Type portal types are not loaded yet:
  type_tool[portal_type_name].__of__(type_tool)
requires loading the class to access __of__ method.

For now, we'll have to hardcode a bit more to get test results.

Modified:
    erp5/trunk/products/ERP5Type/Dynamic/portaltypeclass.py

Modified: erp5/trunk/products/ERP5Type/Dynamic/portaltypeclass.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Dynamic/portaltypeclass.py?rev=39415&r1=39414&r2=39415&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Dynamic/portaltypeclass.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Dynamic/portaltypeclass.py [utf8] Thu Oct 21 05:41:51 2010
@@ -111,49 +111,54 @@ def portalTypeFactory(portal_type_name):
   site = getSite()
 
   type_tool = site.portal_types
-  try:
-    portal_type = getattr(type_tool, portal_type_name)
-  except:
-    raise AttributeError('portal type %s not found in Types Tool' \
-                            % portal_type_name)
-
-  # type_class has a compatibility getter that should return
-  # something even if the field is not set (i.e. Base Type object
-  # was not migrated yet)
-  try:
-    type_class = portal_type.getTypeClass()
-
-    # But no such getter exists for Mixins and Interfaces:
-    # in reality, we can live with such a failure
+  if portal_type_name == "Base Type":
+    type_class = "ERP5TypeInformation"
+  elif portal_type_name == "Solver Type":
+    type_class = "SolverTypeInformation"
+  else:
     try:
-      mixin_list = portal_type.getTypeMixinList()
-      interface_list = portal_type.getTypeInterfaceList()
-    except StandardError:
-      # log loudly the error, but it's not _critical_
-      LOG("ERP5Type.Dynamic", ERROR,
-          "Could not load interfaces or Mixins for portal type %s" \
-              % portal_type_name)
-  except AttributeError:
-    # Try to figure out a coresponding document class from the document side.
-    # This is required for the bootstrap (e.g. Base Type).
-    for name, path in document_class_registry.iteritems():
-      # XXX heuristic: bootstrap issues should happen only inside ERP5Type.
-      if not path.startswith('Products.ERP5Type.'):
-        continue
-
-      module_path, class_name = path.rsplit('.', 1)
-      module = __import__(module_path, {}, {}, (module_path,))
-      klass = getattr(module, class_name)
+      portal_type = getattr(type_tool, portal_type_name)
+    except:
+      raise AttributeError('portal type %s not found in Types Tool' \
+                              % portal_type_name)
+
+    # type_class has a compatibility getter that should return
+    # something even if the field is not set (i.e. Base Type object
+    # was not migrated yet)
+    try:
+      type_class = portal_type.getTypeClass()
+
+      # But no such getter exists for Mixins and Interfaces:
+      # in reality, we can live with such a failure
       try:
+        mixin_list = portal_type.getTypeMixinList()
+        interface_list = portal_type.getTypeInterfaceList()
+      except StandardError:
+        # log loudly the error, but it's not _critical_
+        LOG("ERP5Type.Dynamic", ERROR,
+            "Could not load interfaces or Mixins for portal type %s" \
+                % portal_type_name)
+    except AttributeError:
+      # Try to figure out a coresponding document class from the document side.
+      # This is required for the bootstrap (e.g. Base Category).
+      for name, path in document_class_registry.iteritems():
+        # XXX heuristic: bootstrap issues should happen only inside ERP5Type.
+        if not path.startswith('Products.ERP5Type.'):
+          continue
+
+        module_path, class_name = path.rsplit('.', 1)
+        module = __import__(module_path, {}, {}, (module_path,))
+        klass = getattr(module, class_name)
         try:
-          document_portal_type = getattr(klass, 'portal_type')
-          if document_portal_type == portal_type_name:
-            type_class = name
-            break
-        except AttributeError:
-          pass
-      finally:
-        del klass
+          try:
+            document_portal_type = getattr(klass, 'portal_type')
+            if document_portal_type == portal_type_name:
+              type_class = name
+              break
+          except AttributeError:
+            pass
+        finally:
+          del klass
 
   if type_class is not None:
     type_class = document_class_registry.get(type_class)




More information about the Erp5-report mailing list