Skip to content

Commit 25fe656

Browse files
author
Alexey Tsitkin
committed
allow calling only registered methods, namespace change, some tests
1 parent cc58082 commit 25fe656

File tree

7 files changed

+69
-6
lines changed

7 files changed

+69
-6
lines changed
File renamed without changes.

auto_tasks/base_service.py renamed to eb_sqs/auto_tasks/base_service.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ def register_task(self, method, queue_name=None, max_retries=None):
1111

1212

1313
class NoopTaskService(BaseAutoTaskService):
14+
def __init__(self):
15+
# type: () -> None
16+
self._registered_func_names = []
17+
1418
def register_task(self, method, queue_name=None, max_retries=None):
1519
# type: (Any, str, int) -> None
16-
pass
20+
self._registered_func_names.append(method.func_name)
21+
22+
def is_func_name_registered(self, func_name):
23+
# type: (str) -> bool
24+
return func_name in self._registered_func_names
File renamed without changes.

auto_tasks/service.py renamed to eb_sqs/auto_tasks/service.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import importlib
22
import logging
33

4-
from auto_tasks.base_service import BaseAutoTaskService, NoopTaskService
5-
from auto_tasks.exceptions import RetryableTaskException
4+
from eb_sqs.auto_tasks.base_service import BaseAutoTaskService, NoopTaskService
5+
from eb_sqs.auto_tasks.exceptions import RetryableTaskException
66
from eb_sqs.decorators import task
77
from eb_sqs.worker.worker_exceptions import MaxRetriesReachedException
88

@@ -23,8 +23,21 @@ def _auto_task_wrapper(module_name, class_name, func_name, *args, **kwargs):
2323

2424
module = importlib.import_module(module_name) # import module
2525
class_ = getattr(module, class_name) # find class
26-
instance = class_(auto_task_service=NoopTaskService()) # instantiate class using empty AutoTaskService
27-
getattr(instance, func_name)(*args, **kwargs) # invoke method on instance
26+
27+
noop_task_service = NoopTaskService()
28+
instance = class_(auto_task_service=noop_task_service) # instantiate class using NoopTaskService
29+
30+
if noop_task_service.is_func_name_registered(func_name):
31+
getattr(instance, func_name)(*args, **kwargs) # invoke method on instance
32+
else:
33+
logger.error(
34+
'Trying to invoke _auto_task_wrapper for unregistered task with module: %s class: %s func: %s args: %s and kwargs: %s',
35+
module_name,
36+
class_name,
37+
func_name,
38+
args,
39+
kwargs
40+
)
2841
except RetryableTaskException as exc:
2942
try:
3043
retry_kwargs = {}

eb_sqs/tests/auto_tasks/__init__.py

Whitespace-only changes.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from unittest import TestCase
2+
3+
from mock import Mock
4+
5+
from eb_sqs.auto_tasks.service import AutoTaskService, _auto_task_wrapper
6+
7+
8+
class TestService:
9+
_TEST_MOCK = Mock()
10+
11+
def __init__(self, auto_task_service=None):
12+
self._auto_task_service = auto_task_service or AutoTaskService()
13+
self._auto_task_service.register_task(self.task_method)
14+
15+
def task_method(self, *args, **kwargs):
16+
self._TEST_MOCK.task_method(*args, **kwargs)
17+
18+
def non_task_method(self):
19+
self._TEST_MOCK.non_task_method()
20+
21+
22+
class AutoTasksTest(TestCase):
23+
def setUp(self):
24+
self._test_service = TestService()
25+
26+
def test_task_method(self):
27+
args = [5, '6']
28+
kwargs = {'p1': 'bla', 'p2': 130}
29+
30+
self._test_service.task_method(*args, **dict(kwargs, execute_inline=True))
31+
32+
TestService._TEST_MOCK.task_method.assert_called_once_with(*args, **kwargs)
33+
34+
def test_non_task_method(self):
35+
_auto_task_wrapper.delay(
36+
self._test_service.__class__.__module__,
37+
self._test_service.__class__.__name__,
38+
TestService.non_task_method.__name__,
39+
execute_inline=True
40+
)
41+
42+
TestService._TEST_MOCK.non_task_method.assert_not_called()

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.32',
9+
version='1.30',
1010
package_dir={'eb_sqs': 'eb_sqs'},
1111
include_package_data=True,
1212
packages=find_packages(),

0 commit comments

Comments
 (0)