Ask Solem преди 9 години
родител
ревизия
964cbce6f8
променени са 3 файла, в които са добавени 19 реда и са изтрити 10 реда
  1. 1 1
      celery/app/base.py
  2. 7 6
      celery/canvas.py
  3. 11 3
      celery/utils/abstract.py

+ 1 - 1
celery/app/base.py

@@ -577,7 +577,7 @@ class Celery(object):
                                     args=(), kwargs={}, name=None, **opts):
         sig = (sig.clone(args, kwargs)
                if isinstance(sig, abstract.CallableSignature)
-               else self.signature(sig.name, args, kwargs)
+               else self.signature(sig.name, args, kwargs))
         return name or repr(sig), {
             'schedule': schedule,
             'task': sig.name,

+ 7 - 6
celery/canvas.py

@@ -426,7 +426,7 @@ class chain(Signature):
         while steps:
             task = steps.popleft()
 
-            if not isinstance(task, Signature):
+            if not isinstance(task, abstract.CallableSignature):
                 task = from_dict(task, app=app)
             if isinstance(task, group):
                 task = maybe_unroll_group(task)
@@ -606,7 +606,7 @@ class chunks(Signature):
 def _maybe_group(tasks):
     if isinstance(tasks, group):
         tasks = list(tasks.tasks)
-    elif isinstance(tasks, Signature):
+    elif isinstance(tasks, abstract.CallableSignature):
         tasks = [tasks]
     else:
         tasks = [signature(t) for t in regen(tasks)]
@@ -632,10 +632,11 @@ class group(Signature):
         )
 
     def _prepared(self, tasks, partial_args, group_id, root_id, app, dict=dict,
-                  Signature=Signature, from_dict=Signature.from_dict):
+                  CallableSignature=abstract.CallableSignature,
+                  from_dict=Signature.from_dict):
         for task in tasks:
             if isinstance(task, dict):
-                if isinstance(task, Signature):
+                if isinstance(task, CallableSignature):
                     # local sigs are always of type Signature, and we
                     # clone them to make sure we do not modify the originals.
                     task = task.clone()
@@ -918,7 +919,7 @@ class chord(Signature):
 
 def signature(varies, *args, **kwargs):
     if isinstance(varies, dict):
-        if isinstance(varies, Signature):
+        if isinstance(varies, abstract.CallableSignature):
             return varies.clone()
         return Signature.from_dict(varies)
     return Signature(varies, *args, **kwargs)
@@ -928,7 +929,7 @@ subtask = signature   # XXX compat
 def maybe_signature(d, app=None):
     if d is not None:
         if isinstance(d, dict):
-            if not isinstance(d, Signature):
+            if not isinstance(d, abstract.CallableSignature):
                 d = signature(d)
         elif isinstance(d, list):
             return [maybe_signature(s, app=app) for s in d]

+ 11 - 3
celery/utils/abstract.py

@@ -25,9 +25,9 @@ class _AbstractClass(object):
     __required_attributes__ = frozenset()
 
     @classmethod
-    def __subclasshook__(cls, C):
+    def _subclasshook_using(cls, parent, C):
         return (
-            cls is AsynCallable and
+            cls is parent and
             all(_hasattr(C, attr) for attr in cls.__required_attributes__)
         ) or NotImplemented
 
@@ -49,8 +49,12 @@ class CallableTask(_AbstractClass, Callable):
     def apply(self, *args, **kwargs):
         pass
 
+    @classmethod
+    def __subclasshook__(cls, C):
+        return cls._subclasshook_using(CallableTask, C)
+
 
-class CallableSignature(AsynCallable):
+class CallableSignature(CallableTask):
     __required_attributes__ = frozenset({
         'clone', 'freeze', 'set', 'link', 'link_error', '__or__',
     })
@@ -126,3 +130,7 @@ class CallableSignature(AsynCallable):
     @abstractmethod
     def __invert__(self):
         pass
+
+    @classmethod
+    def __subclasshook__(cls, C):
+        return cls._subclasshook_using(CallableSignature, C)