Преглед изворни кода

exceptions.NotRegistered now inherits from keyerror, and TaskRegistry.__getitem__+pop raises NotRegistered instead of KeyError.

Ask Solem пре 15 година
родитељ
комит
4082dee3de
5 измењених фајлова са 25 додато и 22 уклоњено
  1. 1 5
      celery/beat.py
  2. 9 1
      celery/exceptions.py
  3. 2 9
      celery/execute.py
  4. 13 4
      celery/registry.py
  5. 0 3
      celery/worker/job.py

+ 1 - 5
celery/beat.py

@@ -10,7 +10,6 @@ from celery import log
 from celery import conf
 from celery import registry
 from celery.log import setup_logger
-from celery.exceptions import NotRegistered
 
 TIME_UNITS = (("day", 60 * 60 * 24, lambda n: int(math.ceil(n))),
               ("hour", 60 * 60, lambda n: int(math.ceil(n))),
@@ -107,10 +106,7 @@ class Scheduler(UserDict):
         return min(remaining_times + [self.max_interval])
 
     def get_task(self, name):
-        try:
-            return self.registry[name]
-        except KeyError:
-            raise NotRegistered(name)
+        return self.registry[name]
 
     def is_due(self, entry):
         return entry.is_due(self.get_task(entry.name))

+ 9 - 1
celery/exceptions.py

@@ -1,5 +1,9 @@
 """celery.exceptions"""
 
+UNREGISTERED_FMT = """
+Task of kind %s is not registered, please make sure it's imported.
+""".strip()
+
 
 class MaxRetriesExceededError(Exception):
     """The tasks max restart limit has been exceeded."""
@@ -13,9 +17,13 @@ class RetryTaskError(Exception):
         super(RetryTaskError, self).__init__(message, exc, *args, **kwargs)
 
 
-class NotRegistered(Exception):
+class NotRegistered(KeyError):
     """The task is not registered."""
 
+    def __init__(self, message, *args, **kwargs):
+        message = UNREGISTERED_FMT % str(message)
+        super(NotRegistered, self).__init__(message, *args, **kwargs)
+
 
 class AlreadyRegistered(Exception):
     """The task is already registered."""

+ 2 - 9
celery/execute.py

@@ -98,15 +98,13 @@ def delay_task(task_name, *args, **kwargs):
     """Delay a task for execution by the ``celery`` daemon.
 
     :param task_name: the name of a task registered in the task registry.
-
     :param \*args: positional arguments to pass on to the task.
-
     :param \*\*kwargs: keyword arguments to pass on to the task.
 
     :raises celery.exceptions.NotRegistered: exception if no such task
         has been registered in the task registry.
 
-    :rtype: :class:`celery.result.AsyncResult`.
+    :returns: :class:`celery.result.AsyncResult`.
 
     Example
 
@@ -117,12 +115,7 @@ def delay_task(task_name, *args, **kwargs):
         "Record was updated"
 
     """
-    if task_name not in tasks:
-        raise tasks.NotRegistered(
-                "Task with name %s not registered in the task registry." % (
-                    task_name))
-    task = tasks[task_name]
-    return apply_async(task, args, kwargs)
+    return apply_async(tasks[task_name], args, kwargs)
 
 
 def apply(task, args, kwargs, **options):

+ 13 - 4
celery/registry.py

@@ -41,10 +41,7 @@ class TaskRegistry(UserDict):
         """
         if hasattr(name, "run"):
             name = name.name
-        if name not in self.data:
-            raise self.NotRegistered(
-                    "Task with name %s is not registered." % name)
-        del self.data[name]
+        self.pop(name)
 
     def get_all(self):
         """Get all task types."""
@@ -68,6 +65,18 @@ class TaskRegistry(UserDict):
         """Get task by name."""
         return self.data[name]
 
+    def __getitem__(self, key):
+        try:
+            return UserDict.__getitem__(self, key)
+        except KeyError, exc:
+            raise self.NotRegistered(exc)
+
+    def pop(self, key, *args):
+        try:
+            return UserDict.pop(self, key, *args)
+        except KeyError, exc:
+            raise self.NotRegistered(exc)
+
 """
 .. data:: tasks
 

+ 0 - 3
celery/worker/job.py

@@ -17,7 +17,6 @@ from celery.utils import noop, fun_takes_kwargs
 from celery.loaders import current_loader
 from celery.execute import TaskTrace
 from celery.registry import tasks
-from celery.exceptions import NotRegistered
 from celery.datastructures import ExceptionInfo
 
 # pep8.py borks on a inline signature separator and
@@ -200,8 +199,6 @@ class TaskWrapper(object):
             setattr(self, opt, opts.get(opt, getattr(self, opt, None)))
         if not self.logger:
             self.logger = get_default_logger()
-        if self.task_name not in tasks:
-            raise NotRegistered(self.task_name)
         self.task = tasks[self.task_name]
 
     def __repr__(self):