| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | # -*- coding: utf-8 -*-"""Abstract classes."""from __future__ import absolute_import, unicode_literalsfrom abc import ABCMeta, abstractmethod, abstractpropertyfrom collections import Callablefrom celery.five import with_metaclass__all__ = ['CallableTask', 'CallableSignature']def _hasattr(C, attr):    return any(attr in B.__dict__ for B in C.__mro__)@with_metaclass(ABCMeta)class _AbstractClass(object):    __required_attributes__ = frozenset()    @classmethod    def _subclasshook_using(cls, parent, C):        return (            cls is parent and            all(_hasattr(C, attr) for attr in cls.__required_attributes__)        ) or NotImplemented    @classmethod    def register(cls, other):        # we override `register` to return other for use as a decorator.        type(cls).register(cls, other)        return otherclass CallableTask(_AbstractClass, Callable):  # pragma: no cover    """Task interface."""    __required_attributes__ = frozenset({        'delay', 'apply_async', 'apply',    })    @abstractmethod    def delay(self, *args, **kwargs):        pass    @abstractmethod    def apply_async(self, *args, **kwargs):        pass    @abstractmethod    def apply(self, *args, **kwargs):        pass    @classmethod    def __subclasshook__(cls, C):        return cls._subclasshook_using(CallableTask, C)class CallableSignature(CallableTask):  # pragma: no cover    """Celery Signature interface."""    __required_attributes__ = frozenset({        'clone', 'freeze', 'set', 'link', 'link_error', '__or__',    })    @abstractproperty    def name(self):        pass    @abstractproperty    def type(self):        pass    @abstractproperty    def app(self):        pass    @abstractproperty    def id(self):        pass    @abstractproperty    def task(self):        pass    @abstractproperty    def args(self):        pass    @abstractproperty    def kwargs(self):        pass    @abstractproperty    def options(self):        pass    @abstractproperty    def subtask_type(self):        pass    @abstractproperty    def chord_size(self):        pass    @abstractproperty    def immutable(self):        pass    @abstractmethod    def clone(self, args=None, kwargs=None):        pass    @abstractmethod    def freeze(self, id=None, group_id=None, chord=None, root_id=None):        pass    @abstractmethod    def set(self, immutable=None, **options):        pass    @abstractmethod    def link(self, callback):        pass    @abstractmethod    def link_error(self, errback):        pass    @abstractmethod    def __or__(self, other):        pass    @abstractmethod    def __invert__(self):        pass    @classmethod    def __subclasshook__(cls, C):        return cls._subclasshook_using(CallableSignature, C)
 |