[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