Преглед на файлове

import utils now supports the package keyword for relative imports

Ask Solem преди 13 години
родител
ревизия
c4e3fd3474
променени са 3 файла, в които са добавени 12 реда и са изтрити 9 реда
  1. 5 4
      celery/loaders/base.py
  2. 1 1
      celery/tests/test_app/test_loaders.py
  3. 6 4
      celery/utils/__init__.py

+ 5 - 4
celery/loaders/base.py

@@ -66,12 +66,13 @@ class BaseLoader(object):
     def import_task_module(self, module):
         return self.import_from_cwd(module)
 
-    def import_module(self, module):
-        return importlib.import_module(module)
+    def import_module(self, module, package=None):
+        return importlib.import_module(module, package=package)
 
-    def import_from_cwd(self, module, imp=None):
+    def import_from_cwd(self, module, imp=None, package=None):
         return _import_from_cwd(module,
-                self.import_module if imp is None else imp)
+                self.import_module if imp is None else imp,
+                package=package)
 
     def import_default_modules(self):
         imports = set(list(self.conf.get("CELERY_IMPORTS") or ()))

+ 1 - 1
celery/tests/test_app/test_loaders.py

@@ -108,7 +108,7 @@ class TestLoaderBase(unittest.TestCase):
 
     def test_import_from_cwd_custom_imp(self):
 
-        def imp(module):
+        def imp(module, package=None):
             imp.called = True
         imp.called = False
 

+ 6 - 4
celery/utils/__init__.py

@@ -272,7 +272,7 @@ def fun_takes_kwargs(fun, kwlist=[]):
     return filter(partial(operator.contains, args), kwlist)
 
 
-def get_cls_by_name(name, aliases={}, imp=None):
+def get_cls_by_name(name, aliases={}, imp=None, package=None, **kwargs):
     """Get class by name.
 
     The name should be the full dot-separated path to the class::
@@ -310,8 +310,10 @@ def get_cls_by_name(name, aliases={}, imp=None):
 
     name = aliases.get(name) or name
     module_name, _, cls_name = name.rpartition(".")
+    if not module_name and package:
+        module_name = package
     try:
-        module = imp(module_name)
+        module = imp(module_name, package=package, **kwargs)
     except ValueError, exc:
         raise ValueError("Couldn't import %r: %s" % (name, exc))
     return getattr(module, cls_name)
@@ -395,7 +397,7 @@ def find_module(module, path=None, imp=None):
         return _imp.find_module(module)
 
 
-def import_from_cwd(module, imp=None):
+def import_from_cwd(module, imp=None, package=None):
     """Import module, but make sure it finds modules
     located in the current directory.
 
@@ -405,7 +407,7 @@ def import_from_cwd(module, imp=None):
     if imp is None:
         imp = importlib.import_module
     with cwd_in_path():
-        return imp(module)
+        return imp(module, package=package)
 
 
 def cry():  # pragma: no cover