Skip to content

Commit 8547085

Browse files
committed
fix: recursive dict in labels during schedule discovery in LabelScheduleSource
1 parent 0e2e729 commit 8547085

File tree

3 files changed

+21
-64
lines changed

3 files changed

+21
-64
lines changed

taskiq/schedule_sources/label_based.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import uuid
2+
from copy import deepcopy
23
from logging import getLogger
34
from typing import Dict, List
45

@@ -46,8 +47,12 @@ async def startup(self) -> None:
4647
if "cron" not in schedule and "time" not in schedule:
4748
continue
4849
labels = schedule.get("labels", {})
49-
labels.update(task.labels)
50-
schedule_id = uuid.uuid4().hex
50+
51+
task_labels = deepcopy(task.labels)
52+
task_labels.pop("schedule", None)
53+
54+
labels.update(task_labels)
55+
schedule_id = schedule.get("schedule_id", uuid.uuid4().hex)
5156

5257
self.schedules[schedule_id] = ScheduledTask(
5358
task_name=task_name,

tests/schedule_sources/test_label_based.py

Lines changed: 0 additions & 60 deletions
This file was deleted.

tests/scheduler/test_label_based_sched.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@
2020
[
2121
pytest.param([{"cron": "* * * * *"}], id="cron"),
2222
pytest.param([{"time": datetime.now(pytz.UTC)}], id="time"),
23+
pytest.param(
24+
[{"time": datetime.now(pytz.UTC), "labels": {"foo": "bar"}}],
25+
id="labels_inside_schedule",
26+
),
27+
pytest.param(
28+
[{"cron": "*/1 * * * *", "schedule_id": "every_minute"}],
29+
id="schedule_with_id",
30+
),
2331
],
2432
)
2533
async def test_label_discovery(schedule_label: List[Dict[str, Any]]) -> None:
@@ -37,16 +45,20 @@ def task() -> None:
3745
schedules = await source.get_schedules()
3846
assert schedules == [
3947
ScheduledTask(
40-
schedule_id=schedules[0].schedule_id,
48+
schedule_id=schedule_label[0].get("schedule_id", schedules[0].schedule_id),
4149
cron=schedule_label[0].get("cron"),
4250
time=schedule_label[0].get("time"),
4351
task_name="test_task",
44-
labels={"schedule": schedule_label},
52+
labels=schedule_label[0].get("labels", {}),
4553
args=[],
4654
kwargs={},
4755
),
4856
]
4957

58+
# check that labels of tasks are not changed after startup and discovery process
59+
task_from_broker = next(iter(broker.get_all_tasks().values()))
60+
assert task_from_broker.labels == {"schedule": schedule_label}
61+
5062

5163
@pytest.mark.anyio
5264
async def test_label_discovery_no_cron() -> None:

0 commit comments

Comments
 (0)