Browse Source

Generated modules now pickleable

Ask Solem 11 years ago
parent
commit
48b7b45047
1 changed files with 6 additions and 1 deletions
  1. 6 1
      celery/five.py

+ 6 - 1
celery/five.py

@@ -322,15 +322,20 @@ class MagicModule(ModuleType):
     def __dir__(self):
         return list(set(self.__all__) | DEFAULT_ATTRS)
 
+    def __reduce__(self):
+        return import_module, (self.__name__, )
+
 
 def create_module(name, attrs, cls_attrs=None, pkg=None,
                   base=MagicModule, prepare_attr=None):
     fqdn = '.'.join([pkg.__name__, name]) if pkg else name
     cls_attrs = {} if cls_attrs is None else cls_attrs
+    pkg, _, modname = name.rpartition('.')
+    cls_attrs['__module__'] = pkg
 
     attrs = dict((attr_name, prepare_attr(attr) if prepare_attr else attr)
                  for attr_name, attr in items(attrs))
-    module = sys.modules[fqdn] = type(name, (base, ), cls_attrs)(fqdn)
+    module = sys.modules[fqdn] = type(modname, (base, ), cls_attrs)(fqdn)
     module.__dict__.update(attrs)
     return module