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

nobody at svn.erp5.org nobody at svn.erp5.org
Sun Sep 26 01:20:30 CEST 2010


Author: nicolas.dumazet
Date: Sun Sep 26 01:20:30 2010
New Revision: 38643

URL: http://svn.erp5.org?rev=38643&view=rev
Log:
generic code to create dynamic Python modules

Added:
    erp5/trunk/products/ERP5Type/Dynamic/
    erp5/trunk/products/ERP5Type/Dynamic/__init__.py
    erp5/trunk/products/ERP5Type/Dynamic/dynamicmodule.py

Added: erp5/trunk/products/ERP5Type/Dynamic/__init__.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Dynamic/__init__.py?rev=38643&view=auto
==============================================================================
    (empty)

Added: erp5/trunk/products/ERP5Type/Dynamic/dynamicmodule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Dynamic/dynamicmodule.py?rev=38643&view=auto
==============================================================================
--- erp5/trunk/products/ERP5Type/Dynamic/dynamicmodule.py (added)
+++ erp5/trunk/products/ERP5Type/Dynamic/dynamicmodule.py [utf8] Sun Sep 26 01:20:30 2010
@@ -0,0 +1,25 @@
+from types import ModuleType
+import sys
+
+class DynamicModule(ModuleType):
+    """This module may generate new objects at runtime."""
+    # it's useful to have such a generic utility
+    # please subclass it if you need ERP5-specific behaviors
+
+    def __init__(self, name, factory, doc=None):
+        super(DynamicModule, self).__init__(name, doc=doc)
+        self._factory = factory
+
+    def __getattr__(self, name):
+        if name == '__path__':
+            raise AttributeError('%s does not have __path__' % (self,))
+        obj = self._factory(name)
+        if hasattr(obj, '__module__'):
+            obj.__module__ = self.__name__
+        setattr(self, name, obj)
+        return obj
+
+def dynamicmodule(name, factory):
+    d = DynamicModule(name, factory)
+    sys.modules[name] = d
+    return d




More information about the Erp5-report mailing list