[Erp5-report] r11783 - /erp5/trunk/products/ERP5/ERP5Site.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Dec 22 16:09:00 CET 2006


Author: bartek
Date: Fri Dec 22 16:08:58 2006
New Revision: 11783

URL: http://svn.erp5.org?rev=11783&view=rev
Log:
improved getting module for a portal type - in addition to naming convention we look for a module which allows the given type

Modified:
    erp5/trunk/products/ERP5/ERP5Site.py

Modified: erp5/trunk/products/ERP5/ERP5Site.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/ERP5Site.py?rev=11783&r1=11782&r2=11783&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/ERP5Site.py (original)
+++ erp5/trunk/products/ERP5/ERP5Site.py Fri Dec 22 16:08:58 2006
@@ -816,19 +816,33 @@
       Return default module id where a object with portal_type can
       be created.
     """
-    # Very dummy method, but it works with today name convention.
+    # first try to find by naming convention
     module_name = portal_type.lower().replace(' ','_')
     portal_object = self
-    if not hasattr(portal_object, module_name):
-      module_name += '_module'
-      if not hasattr(portal_object, module_name):
-        if default is not MARKER:
-          return default
-        LOG('ERP5Site, getDefaultModuleId', 0,
-            'Unable to find default module for portal_type: %s' % \
-                portal_type)
-        raise ValueError, 'Unable to find module for portal_type: %s' % \
-                          portal_type
+    if hasattr(portal_object, module_name):
+      return module_name
+    module_name += '_module'
+    if hasattr(portal_object, module_name):
+      return module_name
+    # then look for module where the type is allowed
+    module_name=MARKER
+    modlist=[m for m in self.objectIds() if m.endswith('module')]
+    for mod in modlist:
+      module=self.restrictedTraverse(mod,MARKER)
+      if module is MARKER: # we can't access this one
+        continue
+      if portal_type in self.portal_types[module.getPortalType()].allowed_content_types:
+       module_name=mod 
+       break
+    if module_name is not MARKER:
+      return module_name
+    if default is not MARKER:
+      return default
+    LOG('ERP5Site, getDefaultModuleId', 0,
+        'Unable to find default module for portal_type: %s' % \
+         portal_type)
+    raise ValueError, 'Unable to find module for portal_type: %s' % \
+           portal_type
     return module_name
 
   security.declareProtected(Permissions.AccessContentsInformation,




More information about the Erp5-report mailing list