[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