123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- # -*- coding: utf-8 -*-
- """
- celery.utils.abstract
- ~~~~~~~~~~~~~~~~~~~~~
- Abstract classes.
- """
- from __future__ import absolute_import, unicode_literals
- from abc import ABCMeta, abstractmethod, abstractproperty
- from collections import Callable
- from 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 other
- class CallableTask(_AbstractClass, Callable): # pragma: no cover
- __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
- __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)
|