Skip to content

Commit d34a8c9

Browse files
author
Alexey Tsitkin
committed
better retry support
1 parent d6bab36 commit d34a8c9

File tree

4 files changed

+22
-6
lines changed

4 files changed

+22
-6
lines changed

auto_tasks/base_service.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ class BaseAutoTaskService:
66

77
@abstractmethod
88
def register_task(self, method, queue_name=None, max_retries=None):
9+
# type: (Any, str, int) -> None
910
pass
1011

1112

1213
class NoopTaskService(BaseAutoTaskService):
1314
def register_task(self, method, queue_name=None, max_retries=None):
15+
# type: (Any, str, int) -> None
1416
pass

auto_tasks/exceptions.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
class RetryableTaskException(Exception):
2-
def __init__(self, inner):
3-
# type: (Exception) -> None
2+
def __init__(self, inner, delay=None, count_retries=None):
3+
# type: (Exception, int, bool) -> None
44
self._inner = inner
55

6+
self.delay = delay
7+
self.count_retries = count_retries
8+
69
def __repr__(self):
710
# type: () -> str
811
return repr(self._inner)

auto_tasks/service.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,33 @@ def _auto_task_wrapper(module_name, class_name, func_name, *args, **kwargs):
2727
getattr(instance, func_name)(*args, **kwargs) # invoke method on instance
2828
except RetryableTaskException as exc:
2929
try:
30-
_auto_task_wrapper.retry()
30+
retry_kwargs = {}
31+
if 'execute_inline' in kwargs:
32+
retry_kwargs['execute_inline'] = kwargs['execute_inline']
33+
34+
if exc.delay is not None:
35+
retry_kwargs['delay'] = exc.delay
36+
37+
if exc.count_retries is not None:
38+
retry_kwargs['count_retries'] = exc.count_retries
39+
40+
_auto_task_wrapper.retry(**retry_kwargs)
3141
except MaxRetriesReachedException:
3242
logger.error('Reached max retries in auto task {}.{}.{} with error: {}'.format(module_name, class_name, func_name, repr(exc)))
3343

3444

3545
class AutoTaskService(BaseAutoTaskService):
3646
def register_task(self, method, queue_name=None, max_retries=None):
47+
# type: (Any, str, int) -> None
3748
instance = method.im_self
3849
class_ = instance.__class__
3950
func_name = method.func_name
4051

4152
def _auto_task_wrapper_invoker(*args, **kwargs):
42-
if queue_name:
53+
if queue_name is not None:
4354
kwargs['queue_name'] = queue_name
4455

45-
if max_retries:
56+
if max_retries is not None:
4657
kwargs['max_retries'] = max_retries
4758

4859
_auto_task_wrapper.delay(

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
setup(
88
name='django-eb-sqs',
9-
version='1.30',
9+
version='1.31',
1010
package_dir={'eb_sqs': 'eb_sqs'},
1111
include_package_data=True,
1212
packages=find_packages(),

0 commit comments

Comments
 (0)