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

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Jul 16 14:56:31 CEST 2007


Author: romain
Date: Mon Jul 16 14:56:31 2007
New Revision: 15223

URL: http://svn.erp5.org?rev=15223&view=rev
Log:
Do not use hasattr.
getDefaultModuleId should only return module ID (and not portal id in some
cases).

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=15223&r1=15222&r2=15223&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/ERP5Site.py (original)
+++ erp5/trunk/products/ERP5/ERP5Site.py Mon Jul 16 14:56:31 2007
@@ -928,37 +928,39 @@
                             'getDefaultModuleId')
   def getDefaultModuleId(self, portal_type, default=MARKER):
     """
-      Return default module id where a object with portal_type can
-      be created.
-    """
+    Return default module id where a object with portal_type can
+    be created.
+    """
+    portal_object = self
+    module_id = None
     # first try to find by naming convention
-    module_name = portal_type.lower().replace(' ','_')
-    portal_object = self
-    if hasattr(portal_object, module_name):
-      return module_name
-    module_name += '_module'
-    if hasattr(portal_object, module_name):
-      return module_name
+    expected_module_id = portal_type.lower().replace(' ','_')
+    if portal_object._getOb(expected_module_id, None) is not None:
+      module_id = expected_module_id
+    expected_module_id += '_module'
+    if portal_object._getOb(expected_module_id, None) is not None:
+      module_id = expected_module_id
     # then look for module where the type is allowed
-    module_name = None
-    modlist = [m for m in self.objectIds() if m.endswith('module')]
-    for mod in modlist:
-      module = self.restrictedTraverse(mod, None)
-      if module is None: # 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 None:
-      return module_name
-    if default is not MARKER:
-      return default
-    # now we fail
-    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
+    for expected_module_id in portal_object.objectIds(spec=('ERP5 Folder',)):
+      module = portal_object._getOb(expected_module_id, None)
+      if module is not None:
+        if portal_type in self.portal_types[module.getPortalType()].\
+                                  allowed_content_types:
+          module_id = expected_module_id
+          break
+
+    if module_id is None:
+      if default is not MARKER:
+        return default
+      else:
+        # now we fail
+        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_id
 
   security.declareProtected(Permissions.AccessContentsInformation,
                             'getDefaultModule')




More information about the Erp5-report mailing list