The task is to be retried later.
| 143 | |
| 144 | |
| 145 | class Retry(TaskPredicate): |
| 146 | """The task is to be retried later.""" |
| 147 | |
| 148 | #: Optional message describing context of retry. |
| 149 | message = None |
| 150 | |
| 151 | #: Exception (if any) that caused the retry to happen. |
| 152 | exc = None |
| 153 | |
| 154 | #: Time of retry (ETA), either :class:`numbers.Real` or |
| 155 | #: :class:`~datetime.datetime`. |
| 156 | when = None |
| 157 | |
| 158 | def __init__(self, message=None, exc=None, when=None, is_eager=False, |
| 159 | sig=None, **kwargs): |
| 160 | from kombu.utils.encoding import safe_repr |
| 161 | self.message = message |
| 162 | if isinstance(exc, str): |
| 163 | self.exc, self.excs = None, exc |
| 164 | else: |
| 165 | self.exc, self.excs = get_pickleable_exception(exc), safe_repr(exc) if exc else None |
| 166 | self.when = when |
| 167 | self.is_eager = is_eager |
| 168 | self.sig = sig |
| 169 | super().__init__(self, exc, when, **kwargs) |
| 170 | |
| 171 | def humanize(self): |
| 172 | if isinstance(self.when, numbers.Number): |
| 173 | return f'in {self.when}s' |
| 174 | return f'at {self.when}' |
| 175 | |
| 176 | def __str__(self): |
| 177 | if self.message: |
| 178 | return self.message |
| 179 | if self.excs: |
| 180 | return f'Retry {self.humanize()}: {self.excs}' |
| 181 | return f'Retry {self.humanize()}' |
| 182 | |
| 183 | def __reduce__(self): |
| 184 | return self.__class__, (self.message, self.exc, self.when) |
| 185 | |
| 186 | |
| 187 | RetryTaskError = Retry # XXX compat |
no outgoing calls