diff --git a/celery/__init__.py b/celery/__init__.py index a7b78fc1087..bd781b5e67e 100644 --- a/celery/__init__.py +++ b/celery/__init__.py @@ -20,7 +20,7 @@ old_module, new_module = recreate_module(__name__, # pragma: no cover by_module={ "celery.app": ["Celery", "bugreport"], - "celery.app.state": ["current_app", "current_task"], + "celery.state": ["current_app", "current_task"], "celery.canvas": ["chain", "chord", "chunks", "group", "subtask", "xmap", "xstarmap"], "celery.utils": ["uuid"], diff --git a/celery/app/__init__.py b/celery/app/__init__.py index 42284132fc9..1c58a74d9f8 100644 --- a/celery/app/__init__.py +++ b/celery/app/__init__.py @@ -14,13 +14,13 @@ import os from celery.local import Proxy - -from . import state -from .state import ( # noqa +from celery import state +from celery.state import ( # noqa set_default_app, get_current_app as current_app, get_current_task as current_task, ) + from .base import Celery, AppPickler # noqa #: Proxy always returning the app set as default. diff --git a/celery/app/base.py b/celery/app/base.py index 130440d9d41..52a4f8cdcc6 100644 --- a/celery/app/base.py +++ b/celery/app/base.py @@ -27,6 +27,7 @@ from celery.exceptions import AlwaysEagerIgnored from celery.loaders import get_loader_cls from celery.local import PromiseProxy, maybe_evaluate +from celery.state import _tls, get_current_app from celery.utils.functional import first from celery.utils.imports import instantiate, symbol_by_name @@ -34,7 +35,6 @@ from .builtins import shared_task, load_shared_tasks from .defaults import DEFAULTS, find_deprecated_settings from .registry import TaskRegistry -from .state import _tls, get_current_app from .utils import AppPickler, Settings, bugreport, _unpickle_app diff --git a/celery/app/builtins.py b/celery/app/builtins.py index 8877ed10550..68ea690e2c1 100644 --- a/celery/app/builtins.py +++ b/celery/app/builtins.py @@ -4,6 +4,7 @@ from itertools import starmap +from celery.state import get_current_task from celery.utils import uuid #: global list of functions defining tasks that should be @@ -105,7 +106,6 @@ def chunks(task, it, n): def add_group_task(app): _app = app from celery.canvas import subtask - from celery.app.state import get_current_task from celery.result import from_serializable class Group(app.Task): diff --git a/celery/app/log.py b/celery/app/log.py index fa30c0b86d0..49dd3b70232 100644 --- a/celery/app/log.py +++ b/celery/app/log.py @@ -7,6 +7,7 @@ from kombu.log import NullHandler from celery import signals +from celery.state import get_current_task from celery.utils import isatty from celery.utils.compat import WatchedFileHandler from celery.utils.log import ( @@ -17,8 +18,6 @@ ) from celery.utils.term import colored -from .state import get_current_task - is_py3k = sys.version_info[0] == 3 diff --git a/celery/app/task.py b/celery/app/task.py index d7d41728eb1..60d8cc40d9a 100644 --- a/celery/app/task.py +++ b/celery/app/task.py @@ -21,6 +21,7 @@ from celery import current_app from celery import states from celery.__compat__ import class_property +from celery.state import get_current_task from celery.datastructures import ExceptionInfo from celery.exceptions import MaxRetriesExceededError, RetryTaskError from celery.local import LocalStack @@ -32,7 +33,6 @@ from celery.utils.mail import ErrorMail from .annotations import resolve_all as resolve_all_annotations -from .state import get_current_task from .registry import _unpickle_task #: extracts options related to publishing a message from a dict. diff --git a/celery/backends/__init__.py b/celery/backends/__init__.py index ff8f8ac6b6e..322f0da7453 100644 --- a/celery/backends/__init__.py +++ b/celery/backends/__init__.py @@ -5,8 +5,8 @@ from kombu.utils.url import _parse_url -from celery.app.state import current_app from celery.local import Proxy +from celery.state import current_app from celery.utils.imports import symbol_by_name from celery.utils.functional import memoize diff --git a/celery/loaders/__init__.py b/celery/loaders/__init__.py index aeda05c48c8..6143bdf3c33 100644 --- a/celery/loaders/__init__.py +++ b/celery/loaders/__init__.py @@ -12,6 +12,7 @@ """ from __future__ import absolute_import +from celery.state import current_app from celery.utils import deprecated from celery.utils.imports import symbol_by_name @@ -28,12 +29,10 @@ def get_loader_cls(loader): @deprecated(deprecation="2.5", removal="3.0", alternative="celery.current_app.loader") def current_loader(): - from celery.app.state import current_app return current_app.loader @deprecated(deprecation="2.5", removal="3.0", alternative="celery.current_app.conf") def load_settings(): - from celery.app.state import current_app return current_app.conf diff --git a/celery/app/state.py b/celery/state.py similarity index 74% rename from celery/app/state.py rename to celery/state.py index 510008a94f3..a0daf5f51a4 100644 --- a/celery/app/state.py +++ b/celery/state.py @@ -19,11 +19,15 @@ class _TLS(threading.local): def set_default_app(app): global default_app - default_app = app + if default_app is None: + default_app = app def get_current_app(): - return getattr(_tls, "current_app", None) or default_app + if default_app is None: + # creates the default app, but we want to defer that. + import celery.app # noqa + return _tls.current_app or default_app def get_current_task(): diff --git a/celery/task/__init__.py b/celery/task/__init__.py index 5eb7e6752a3..d3cb26f71e5 100644 --- a/celery/task/__init__.py +++ b/celery/task/__init__.py @@ -11,7 +11,7 @@ """ from __future__ import absolute_import -from celery.app.state import current_app, current_task as current +from celery.state import current_app, current_task as current from celery.__compat__ import MagicModule, recreate_module from celery.local import Proxy diff --git a/celery/task/sets.py b/celery/task/sets.py index be771d983cd..ec50179a65e 100644 --- a/celery/task/sets.py +++ b/celery/task/sets.py @@ -2,8 +2,8 @@ from __future__ import absolute_import from __future__ import with_statement +from celery.state import get_current_task from celery.app import app_or_default -from celery.app.state import get_current_task from celery.canvas import subtask, maybe_subtask # noqa from celery.utils import uuid from celery.utils.compat import UserList diff --git a/celery/task/trace.py b/celery/task/trace.py index f430305e9f0..84616843508 100644 --- a/celery/task/trace.py +++ b/celery/task/trace.py @@ -28,7 +28,7 @@ from celery import current_app from celery import states, signals -from celery.app.state import _task_stack +from celery.state import _task_stack from celery.app.task import BaseTask, Context from celery.datastructures import ExceptionInfo from celery.exceptions import RetryTaskError diff --git a/celery/tests/app/test_builtins.py b/celery/tests/app/test_builtins.py index cec5f214c28..0de67846329 100644 --- a/celery/tests/app/test_builtins.py +++ b/celery/tests/app/test_builtins.py @@ -4,7 +4,7 @@ from celery import current_app as app, group, task, chord from celery.app import builtins -from celery.app.state import _task_stack +from celery.state import _task_stack from celery.tests.utils import Case diff --git a/celery/tests/app/test_log.py b/celery/tests/app/test_log.py index 75dd43e2aa8..7c6468df608 100644 --- a/celery/tests/app/test_log.py +++ b/celery/tests/app/test_log.py @@ -230,11 +230,11 @@ def test_task(): pass test_task.logger.handlers = [] self.task = test_task - from celery.app.state import _task_stack + from celery.state import _task_stack _task_stack.push(test_task) def tearDown(self): - from celery.app.state import _task_stack + from celery.state import _task_stack _task_stack.pop() def setup_logger(self, *args, **kwargs): diff --git a/celery/tests/tasks/test_sets.py b/celery/tests/tasks/test_sets.py index f0de1c3e010..22826359ca4 100644 --- a/celery/tests/tasks/test_sets.py +++ b/celery/tests/tasks/test_sets.py @@ -148,7 +148,7 @@ def send(self, *args, **kwargs): @current_app.task def xyz(): pass - from celery.app.state import _task_stack + from celery.state import _task_stack _task_stack.push(xyz) try: ts.apply_async(publisher=Publisher()) diff --git a/celery/tests/worker/test_worker.py b/celery/tests/worker/test_worker.py index 0e4c2acd0a9..331eb34544d 100644 --- a/celery/tests/worker/test_worker.py +++ b/celery/tests/worker/test_worker.py @@ -803,7 +803,7 @@ def test_use_pidfile(self, create_pidlock): def test_process_initializer(self, set_mp_process_title, _signals): from celery import Celery from celery import signals - from celery.app.state import _tls + from celery.state import _tls from celery.concurrency.processes import process_initializer from celery.concurrency.processes import (WORKER_SIGRESET, WORKER_SIGIGNORE)