Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion taskiq/schedule_sources/label_based.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ async def startup(self) -> None:
for schedule in task.labels.get("schedule", []):
if not {"cron", "interval", "time"} & schedule.keys():
continue
labels = schedule.get("labels", {})
labels = schedule.get("labels", {}).copy()

task_labels = {k: v for k, v in task.labels.items() if k != "schedule"}

Expand Down
47 changes: 47 additions & 0 deletions tests/scheduler/test_label_based_sched.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,50 @@ def task(number: int) -> None:
tasks = [task.args for task in await scheduler.sources[0].get_schedules()]
assert tasks == [[2], [3]] # [1] not in a list as it was enqueued above
sched_task.cancel()


async def test_schedule_discovery_keeps_shared_labels_isolated() -> None:
broker = InMemoryBroker()
schedule = {"cron": "* * * * *", "labels": {"origin": "nightly"}}

@broker.task(task_name="dedicated_task", schedule=[schedule], queue="dedicated")
async def dedicated_task() -> None:
pass

@broker.task(task_name="default_task", schedule=[schedule])
async def default_task() -> None:
pass

source = LabelScheduleSource(broker)
for _ in range(2):
await source.startup()
schedules = {
task.task_name: task.labels for task in await source.get_schedules()
}
assert schedules == {
"dedicated_task": {"origin": "nightly", "queue": "dedicated"},
"default_task": {"origin": "nightly"},
}
assert schedule["labels"] == {"origin": "nightly"}

await broker.shutdown()


async def test_schedule_discovery_preserves_task_label_precedence() -> None:
broker = InMemoryBroker()
schedule = {
"cron": "* * * * *",
"labels": {"queue": "schedule", "origin": "nightly"},
}

@broker.task(task_name="task", schedule=[schedule], queue="task")
async def task() -> None:
pass

source = LabelScheduleSource(broker)
await source.startup()
schedules = await source.get_schedules()

assert schedules[0].labels == {"queue": "task", "origin": "nightly"}
assert schedule["labels"] == {"queue": "schedule", "origin": "nightly"}
await broker.shutdown()
Loading