[文档]classCeleryError(Exception):"""Base class for all Celery errors."""
[文档]classTaskPredicate(CeleryError):"""Base class for task-related semi-predicates."""
[文档]classRetry(TaskPredicate):"""The task is to be retried later."""#: Optional message describing context of retry.message=None#: Exception (if any) that caused the retry to happen.exc=None#: Time of retry (ETA), either :class:`numbers.Real` or#: :class:`~datetime.datetime`.when=Nonedef__init__(self,message=None,exc=None,when=None,is_eager=False,sig=None,**kwargs):fromkombu.utils.encodingimportsafe_reprself.message=messageifisinstance(exc,str):self.exc,self.excs=None,excelse:self.exc,self.excs=get_pickleable_exception(exc),safe_repr(exc)ifexcelseNoneself.when=whenself.is_eager=is_eagerself.sig=sigsuper().__init__(self,exc,when,**kwargs)
[文档]classIgnore(TaskPredicate):"""A task can raise this to ignore doing state updates."""
[文档]classReject(TaskPredicate):"""A task can raise this if it wants to reject/re-queue the message."""def__init__(self,reason=None,requeue=False):self.reason=reasonself.requeue=requeuesuper().__init__(reason,requeue)def__repr__(self):returnf'reject requeue={self.requeue}: {self.reason}'
[文档]classImproperlyConfigured(CeleryError):"""Celery is somehow improperly configured."""
[文档]classSecurityError(CeleryError):"""Security related exception."""
[文档]classTaskError(CeleryError):"""Task related errors."""
[文档]classQueueNotFound(KeyError,TaskError):"""Task routed to a queue not in ``conf.queues``."""
[文档]classIncompleteStream(TaskError):"""Found the end of a stream of data, but the data isn't complete."""
[文档]classNotRegistered(KeyError,TaskError):"""The task is not registered."""def__repr__(self):returnUNREGISTERED_FMT.format(self)
[文档]classAlreadyRegistered(TaskError):"""The task is already registered."""
[文档]classMaxRetriesExceededError(TaskError):"""The tasks max restart limit has been exceeded."""def__init__(self,*args,**kwargs):self.task_args=kwargs.pop("task_args",[])self.task_kwargs=kwargs.pop("task_kwargs",dict())super().__init__(*args,**kwargs)
[文档]classTaskRevokedError(TaskError):"""The task has been revoked, so no result available."""
[文档]classInvalidTaskError(TaskError):"""The task has invalid data or ain't properly constructed."""
[文档]classChordError(TaskError):"""A task part of the chord raised an exception."""
[文档]classCPendingDeprecationWarning(PendingDeprecationWarning):"""Warning of pending deprecation."""
[文档]classCDeprecationWarning(DeprecationWarning):"""Warning of deprecation."""
[文档]classWorkerTerminate(SystemExit):"""Signals that the worker should terminate immediately."""
SystemTerminate=WorkerTerminate# XXX compat
[文档]classWorkerShutdown(SystemExit):"""Signals that the worker should perform a warm shutdown."""
[文档]classBackendError(Exception):"""An issue writing or reading to/from the backend."""
[文档]classBackendGetMetaError(BackendError):"""An issue reading from the backend."""def__init__(self,*args,**kwargs):self.task_id=kwargs.get('task_id',"")def__repr__(self):returnsuper().__repr__()+" task_id:"+self.task_id
[文档]classBackendStoreError(BackendError):"""An issue writing to the backend."""def__init__(self,*args,**kwargs):self.state=kwargs.get('state',"")self.task_id=kwargs.get('task_id',"")def__repr__(self):returnsuper().__repr__()+" state:"+self.state+" task_id:"+self.task_id
[文档]classCeleryCommandException(ClickException):"""A general command exception which stores an exit code."""def__init__(self,message,exit_code):super().__init__(message=message)self.exit_code=exit_code