[Checkins] SVN: Zope/trunk/src/App/FactoryDispatcher.py optimize access to product packages

Nikolay Kim fafhrd91 at gmail.com
Wed Jun 15 01:28:31 EDT 2011


Log message for revision 121936:
  optimize access to product packages

Changed:
  U   Zope/trunk/src/App/FactoryDispatcher.py

-=-
Modified: Zope/trunk/src/App/FactoryDispatcher.py
===================================================================
--- Zope/trunk/src/App/FactoryDispatcher.py	2011-06-14 19:51:37 UTC (rev 121935)
+++ Zope/trunk/src/App/FactoryDispatcher.py	2011-06-15 05:28:30 UTC (rev 121936)
@@ -32,16 +32,17 @@
     zope2 packages and those without the Products namespace package.
     """
     import Products
-    packages = {}
+
+    _packages = {}
     for x in dir(Products):
         m = getattr(Products, x)
         if isinstance(m, types.ModuleType):
-            packages[x] = m
+            _packages[x] = m
 
     for m in get_registered_packages():
-        packages[m.__name__] = m
+        _packages[m.__name__] = m
 
-    return packages
+    return _packages
 
 
 class Product(Base):
@@ -85,8 +86,15 @@
 
     def __bobo_traverse__(self, REQUEST, name):
         # Try to get a custom dispatcher from a Python product
+        global _packages
+        try:
+            package = _packages.get(name, None)
+        except NameError:
+            _packages = _product_packages()
+            package = _packages.get(name, None)
+
         dispatcher_class=getattr(
-            _product_packages().get(name, None),
+            package,
             '__FactoryDispatcher__',
             FactoryDispatcher)
 
@@ -139,7 +147,7 @@
     def __getattr__(self, name):
         p=self.__dict__['_product']
         d=p.__dict__
-        if hasattr(p,name) and d.has_key(name):
+        if hasattr(p,name) and name in d:
             m=d[name]
             w=getattr(m, '_permissionMapper', None)
             if w is not None:
@@ -149,7 +157,7 @@
 
         # Waaa
         m = 'Products.%s' % p.id
-        if sys.modules.has_key(m) and sys.modules[m]._m.has_key(name):
+        if m in sys.modules and sys.modules[m]._m.has_key(name):
             return sys.modules[m]._m[name]
 
         raise AttributeError, name



More information about the checkins mailing list