Explorar o código

Commands: --loader argument now accepted even if --app set (Issue #3405)

Ask Solem %!s(int64=8) %!d(string=hai) anos
pai
achega
8afdd1def5
Modificáronse 3 ficheiros con 18 adicións e 2 borrados
  1. 10 2
      celery/app/base.py
  2. 2 0
      t/unit/bin/test_base.py
  3. 6 0
      t/unit/conftest.py

+ 10 - 2
celery/app/base.py

@@ -180,7 +180,7 @@ class Celery(object):
     amqp_cls = 'celery.app.amqp:AMQP'
     backend_cls = None
     events_cls = 'celery.events:Events'
-    loader_cls = 'celery.loaders.app:AppLoader'
+    loader_cls = None
     log_cls = 'celery.app.log:Logging'
     control_cls = 'celery.app.control:Control'
     task_cls = 'celery.app.task:Task'
@@ -212,7 +212,7 @@ class Celery(object):
         self.main = main
         self.amqp_cls = amqp or self.amqp_cls
         self.events_cls = events or self.events_cls
-        self.loader_cls = loader or self.loader_cls
+        self.loader_cls = loader or self._get_default_loader()
         self.log_cls = log or self.log_cls
         self.control_cls = control or self.control_cls
         self.task_cls = task_cls or self.task_cls
@@ -273,6 +273,14 @@ class Celery(object):
         self.on_init()
         _register_app(self)
 
+    def _get_default_loader(self):
+        # the --loader command-line argument sets the environment variable.
+        return (
+            os.environ.get('CELERY_LOADER') or
+            self.loader_cls or
+            'celery.loaders.app:AppLoader'
+        )
+
     def on_init(self):
         """Optional callback called at init."""
         pass

+ 2 - 0
t/unit/bin/test_base.py

@@ -209,6 +209,8 @@ class test_Command:
         finally:
             if prev is not None:
                 os.environ['CELERY_LOADER'] = prev
+            else:
+                del(os.environ['CELERY_LOADER'])
 
     def test_setup_app_no_respect(self, app):
         cmd = MockCommand(app=app)

+ 6 - 0
t/unit/conftest.py

@@ -92,6 +92,12 @@ def threads_not_lingering(request):
     assert request.session._threads_at_startup == alive_threads()
 
 
+@pytest.fixture(autouse=True)
+def AAA_reset_CELERY_LOADER_env():
+    yield
+    assert not os.environ.get('CELERY_LOADER')
+
+
 @pytest.fixture(autouse=True)
 def test_cases_shortcuts(request, app, patching):
     if request.instance: