Skip to content

Commit 216c672

Browse files
committed
CeleryBeatScheduleBuilder
1 parent 2ae491a commit 216c672

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

codeforlife/tasks.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,30 @@ class CeleryBeat(t.TypedDict):
3131
CeleryBeatSchedule = t.Dict[str, CeleryBeat]
3232

3333

34-
def celery_beat_schedule(**beat_schedule: CeleryBeat) -> CeleryBeatSchedule:
35-
"""Create a beat schedule that's namespaced by the service it's in."""
34+
class CeleryBeatScheduleBuilder(CeleryBeatSchedule):
35+
"""Builds a celery beat schedule.
36+
37+
Examples:
38+
```
39+
# settings.py
40+
CELERY_BEAT_SCHEDULE = CeleryBeatScheduleBuilder(
41+
every_5_minutes={
42+
"task": "path.to.task",
43+
"schedule": CeleryBeatScheduleBuilder.crontab(minute=5),
44+
},
45+
)
46+
```
47+
"""
48+
49+
# Shorthand for convenience.
50+
crontab = crontab
51+
solar = solar
3652

37-
for beat in beat_schedule.values():
38-
beat["task"] = namespace_task(beat["task"])
53+
def __init__(self, **beat_schedule: CeleryBeat):
54+
for beat in beat_schedule.values():
55+
beat["task"] = namespace_task(beat["task"])
3956

40-
return beat_schedule
57+
super().__init__(beat_schedule)
4158

4259

4360
def namespace_task(task: t.Union[str, t.Callable]):

0 commit comments

Comments
 (0)