Browse Source

Task.name is now automatically generated out of class module+name, e.g.
djangotwitter.tasks.UpdateStatusesTask. Very convenient, no idea why I didn't
do this before :) Closes #23

Ask Solem 15 years ago
parent
commit
2e38279ad3
3 changed files with 4 additions and 5 deletions
  1. 0 2
      README
  2. 2 1
      celery/task/base.py
  3. 2 2
      celery/tests/test_task.py

+ 0 - 2
README

@@ -240,7 +240,6 @@ and return a value:
     >>> from celery.task import Task
     >>> from celery.registry import tasks
     >>> class MyTask(Task):
-    ...     name = "myapp.mytask"
     ...     def run(self, some_arg, **kwargs):
     ...         logger = self.get_logger(**kwargs)
     ...         logger.info("Did something: %s" % some_arg)
@@ -301,7 +300,6 @@ Here's an example of a periodic task:
     >>> from celery.registry import tasks
     >>> from datetime import timedelta
     >>> class MyPeriodicTask(PeriodicTask):
-    ...     name = "foo.my-periodic-task"
     ...     run_every = timedelta(seconds=30)
     ...
     ...     def run(self, **kwargs):

+ 2 - 1
celery/task/base.py

@@ -113,7 +113,8 @@ class Task(object):
 
     def __init__(self):
         if not self.name:
-            raise NotImplementedError("Tasks must define a name attribute.")
+            self.name = ".".join([self.__class__.__module__,
+                                  self.__class__.__name__])
 
     def __call__(self, *args, **kwargs):
         return self.run(*args, **kwargs)

+ 2 - 2
celery/tests/test_task.py

@@ -108,9 +108,9 @@ class TestCeleryTasks(unittest.TestCase):
         self.assertTrue(T1()(),
                 "Task class runs run() when called")
 
-        # task without name raises NotImplementedError
+        # task name generated out of class module + name.
         T2 = self.createTaskCls("T2")
-        self.assertRaises(NotImplementedError, T2)
+        self.assertEquals(T2().name, "celery.tests.test_task.T2")
 
         registry.tasks.register(T1)
         t1 = T1()