@@ -36,7 +36,10 @@ def to_tz_aware(time: datetime) -> datetime:
3636 return time
3737
3838
39- async def get_schedules (source : ScheduleSource ) -> list [ScheduledTask ]:
39+ async def get_schedules (
40+ source : ScheduleSource ,
41+ fail_on_err : bool ,
42+ ) -> list [ScheduledTask ]:
4043 """
4144 Get schedules from source.
4245
@@ -48,6 +51,13 @@ async def get_schedules(source: ScheduleSource) -> list[ScheduledTask]:
4851 try :
4952 return await source .get_schedules ()
5053 except Exception as exc :
54+ if fail_on_err :
55+ logger .warning (
56+ "Cannot update schedules with source: %s" ,
57+ source ,
58+ exc_info = True ,
59+ )
60+ raise exc
5161 logger .warning (
5262 "Cannot update schedules with source: %s" ,
5363 source ,
@@ -58,6 +68,7 @@ async def get_schedules(source: ScheduleSource) -> list[ScheduledTask]:
5868
5969async def get_all_schedules (
6070 scheduler : TaskiqScheduler ,
71+ fail_on_err : bool = False ,
6172) -> list [tuple [ScheduleSource , list [ScheduledTask ]]]:
6273 """
6374 Task to update all schedules.
@@ -71,7 +82,7 @@ async def get_all_schedules(
7182 """
7283 logger .debug ("Started schedule update." )
7384 schedules : list [list [ScheduledTask ]] = await asyncio .gather (
74- * [get_schedules (source ) for source in scheduler .sources ],
85+ * [get_schedules (source , fail_on_err ) for source in scheduler .sources ],
7586 )
7687 return list (zip (scheduler .sources , schedules , strict = True ))
7788
@@ -186,8 +197,10 @@ def __init__(
186197 scheduler : TaskiqScheduler ,
187198 * ,
188199 event_loop : asyncio .AbstractEventLoop | None = None ,
200+ fail_on_err : bool = False ,
189201 ) -> None :
190202 self .scheduler = scheduler
203+ self .fail_on_err = fail_on_err
191204 self ._event_loop = event_loop or asyncio .get_event_loop ()
192205
193206 # Variables for control the last run of schedules.
@@ -310,7 +323,7 @@ async def run(
310323
311324 running_schedules : dict [ScheduleId , asyncio .Task [Any ]] = {}
312325
313- self .scheduled_tasks = await get_all_schedules (self .scheduler )
326+ self .scheduled_tasks = await get_all_schedules (self .scheduler , self . fail_on_err )
314327 self .scheduled_tasks_updated_at = datetime .now (tz = timezone .utc )
315328
316329 if skip_first_run :
@@ -405,7 +418,7 @@ async def run_scheduler(args: SchedulerArgs) -> None:
405418 await scheduler .startup ()
406419 logger .info ("Startup completed." )
407420
408- scheduler_loop = SchedulerLoop (scheduler )
421+ scheduler_loop = SchedulerLoop (scheduler , fail_on_err = args . fail_on_err )
409422 try :
410423 await scheduler_loop .run (
411424 update_interval = update_interval ,
0 commit comments