Browse Source

celery.Task is now current_app.Task

Ask Solem 14 years ago
parent
commit
47e638a364
3 changed files with 17 additions and 9 deletions
  1. 9 5
      celery/app/__init__.py
  2. 2 1
      celery/app/base.py
  3. 6 3
      celery/task/base.py

+ 9 - 5
celery/app/__init__.py

@@ -47,7 +47,8 @@ class App(base.BaseApp):
         """Creates a base task class using default configuration
         taken from this app."""
         from celery.task.base import create_task_cls
-        return create_task_cls(app=self)
+        return create_task_cls(app=self,
+                               accept_magic_kwargs=self.accept_magic_kwargs)
 
     def Worker(self, **kwargs):
         """Create new :class:`~celery.apps.worker.Worker` instance."""
@@ -148,14 +149,16 @@ class App(base.BaseApp):
                                 self.amqp_cls,
                                 self.events_cls,
                                 self.log_cls,
-                                self.control_cls))
+                                self.control_cls,
+                                self.accept_magic_kwargs))
 
 
 def _unpickle_app(cls, main, changes, loader, backend, amqp,
-        events, log, control):
+        events, log, control, accept_magic_kwargs):
     app = cls(main, loader=loader, backend=backend, amqp=amqp,
                     events=events, log=log, control=control,
-                    set_as_current=False)
+                    set_as_current=False,
+                    accept_magic_kwargs=accept_magic_kwargs)
     app.conf.update(changes)
     return app
 
@@ -164,7 +167,8 @@ def _unpickle_app(cls, main, changes, loader, backend, amqp,
 default_loader = os.environ.get("CELERY_LOADER") or "default"
 
 #: Global fallback app instance.
-default_app = App("default", loader=default_loader, set_as_current=False)
+default_app = App("default", loader=default_loader,
+                  set_as_current=False, accept_magic_kwargs=True)
 
 
 def current_app():

+ 2 - 1
celery/app/base.py

@@ -34,7 +34,7 @@ class BaseApp(object):
 
     def __init__(self, main=None, loader=None, backend=None,
             amqp=None, events=None, log=None, control=None,
-            set_as_current=True):
+            set_as_current=True, accept_magic_kwargs=False):
         self.main = main
         self.amqp_cls = amqp or self.amqp_cls
         self.backend_cls = backend or self.backend_cls
@@ -43,6 +43,7 @@ class BaseApp(object):
         self.log_cls = log or self.log_cls
         self.control_cls = control or self.control_cls
         self.set_as_current = set_as_current
+        self.accept_magic_kwargs = accept_magic_kwargs
         self.on_init()
 
     def on_init(self):

+ 6 - 3
celery/task/base.py

@@ -3,7 +3,7 @@ import sys
 import threading
 import warnings
 
-from celery.app import app_or_default
+from celery import current_app
 from celery.datastructures import ExceptionInfo
 from celery.exceptions import MaxRetriesExceededError, RetryTaskError
 from celery.execute.trace import TaskTrace
@@ -92,6 +92,9 @@ class TaskType(type):
         task = tasks[task_name].__class__
         return task
 
+    def __repr__(cls):
+        return "<class Task of %s>" % (cls.app, )
+
 
 class BaseTask(object):
     """A Celery task.
@@ -723,7 +726,7 @@ def create_task_cls(app, **kwargs):
         accept_magic_kwargs = kwargs.get("accept_magic_kwargs", False)
 
     return Task
-Task = create_task_cls(app_or_default(), accept_magic_kwargs=True)
+Task = current_app.Task
 
 
 class PeriodicTask(Task):
@@ -790,7 +793,7 @@ class PeriodicTask(Task):
     options = None
 
     def __init__(self):
-        app = app_or_default()
+        app = current_app
         if not hasattr(self, "run_every"):
             raise NotImplementedError(
                     "Periodic tasks must have a run_every attribute")