Skip to content

Commit 8d24cf5

Browse files
authored
Merge pull request #29 from taskbadger/sk/serialization-error
Fix serialization error when TB is installed but not configured
2 parents 4913097 + 483d96b commit 8d24cf5

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

taskbadger/celery.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,18 @@ def scrape_urls(self, urls):
102102

103103
def apply_async(self, *args, **kwargs):
104104
headers = kwargs.setdefault("headers", {})
105-
headers["taskbadger_track"] = True
106105
tb_kwargs = self._get_tb_kwargs(kwargs)
107106
if kwargs.get("kwargs"):
108107
# extract taskbadger options from task kwargs when supplied as keyword argument
109108
tb_kwargs.update(self._get_tb_kwargs(kwargs["kwargs"]))
110109
elif len(args) > 1 and isinstance(args[1], dict):
111110
# extract taskbadger options from task kwargs when supplied as positional argument
112111
tb_kwargs.update(self._get_tb_kwargs(args[1]))
113-
headers[TB_KWARGS_ARG] = tb_kwargs
112+
113+
if Badger.is_configured():
114+
headers["taskbadger_track"] = True
115+
headers[TB_KWARGS_ARG] = tb_kwargs
116+
114117
result = super().apply_async(*args, **kwargs)
115118

116119
tb_task_id = result.info.get(TB_TASK_ID) if result.info else None
@@ -150,13 +153,13 @@ def taskbadger_task(self):
150153
@before_task_publish.connect
151154
def task_publish_handler(sender=None, headers=None, body=None, **kwargs):
152155
headers = headers if "task" in headers else body
156+
header_kwargs = headers.pop(TB_KWARGS_ARG, {}) # always remove TB headers
153157
if sender.startswith("celery.") or not Badger.is_configured():
154158
return
155159

156160
celery_system = Badger.current.settings.get_system_by_id("celery")
157161
auto_track = celery_system and celery_system.track_task(sender)
158162
manual_track = headers.get("taskbadger_track")
159-
header_kwargs = headers.pop(TB_KWARGS_ARG, {})
160163
if not manual_track and not auto_track:
161164
return
162165

tests/test_celery.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,14 @@ def add_no_tb(self, a, b):
171171
with mock.patch("taskbadger.celery.create_task_safe") as create, mock.patch(
172172
"taskbadger.celery.update_task_safe"
173173
) as update:
174-
result = add_no_tb.delay(2, 2)
174+
result = add_no_tb.delay(
175+
2,
176+
2,
177+
taskbadger_kwargs={
178+
# add an action here to test serialization failure when Badger is not configured
179+
"actions": [Action("stale", integration=EmailIntegration(to="test@test.com"))]
180+
},
181+
)
175182
assert result.get(timeout=10, propagate=True) == 4
176183

177184
create.assert_not_called()

tests/test_session.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ def test_session_multiple_threads():
7171

7272

7373
class TestThread(threading.Thread):
74+
__test__ = False
75+
7476
def __init__(self, name, barrier, clients):
7577
threading.Thread.__init__(self, name=name)
7678
self.barrier = barrier

0 commit comments

Comments
 (0)