File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ not released yet
66----------------
77
88* Fix documentation
9+ * Allow overriding of Celery task kwargs (see ``_get_celery_task_kwargs() `` method)
910
10110.2.2 (2020-02-11)
1112------------------
Original file line number Diff line number Diff line change @@ -47,8 +47,16 @@ def test_receiver_should_pass_serialized_kwargs_to_celery_task(self):
4747 receiver .receive (self .signal_kwargs )
4848 commit ()
4949
50- receiver .celery_task .delay .assert_called_once_with (
51- 'unittest.mock.MagicMock' ,
52- 'pynotify.serializers.ModelSerializer' ,
53- receiver .serializer_class ().serialize (self .signal_kwargs ),
50+ receiver .celery_task .delay .assert_called_with (
51+ handler_class = 'unittest.mock.MagicMock' ,
52+ serializer_class = 'pynotify.serializers.ModelSerializer' ,
53+ signal_kwargs = receiver .serializer_class ().serialize (self .signal_kwargs ),
5454 )
55+
56+ @override_settings (PYNOTIFY_CELERY_TASK = 'tests.test_receivers.mock_task' )
57+ def test_receiver_should_allow_overriding_of_celery_task_kwargs (self ):
58+ receiver = AsynchronousReceiver (MagicMock )
59+ receiver ._get_celery_task_kwargs = MagicMock (return_value = {'abc' : 1 })
60+ receiver .receive (self .signal_kwargs )
61+ commit ()
62+ receiver .celery_task .delay .assert_called_with (abc = 1 )
Original file line number Diff line number Diff line change @@ -51,11 +51,15 @@ def _get_celery_task(self):
5151 )
5252 return locate (celery_task )
5353
54+ def _get_celery_task_kwargs (self ):
55+ return {
56+ 'handler_class' : get_import_path (self .handler_class ),
57+ 'serializer_class' : get_import_path (self .serializer_class ),
58+ 'signal_kwargs' : self .serializer_class ().serialize (self .signal_kwargs ),
59+ }
60+
5461 def receive (self , signal_kwargs ):
62+ self .signal_kwargs = signal_kwargs
5563 # Call of the Celery task should be performed after current DB transaction is commited to avoid race condition,
5664 # e.g. accessing referenced object in the task before it has finished saving into DB.
57- on_commit (lambda : self .celery_task .delay (
58- get_import_path (self .handler_class ),
59- get_import_path (self .serializer_class ),
60- self .serializer_class ().serialize (signal_kwargs ),
61- ))
65+ on_commit (lambda : self .celery_task .delay (** self ._get_celery_task_kwargs ()))
You can’t perform that action at this time.
0 commit comments