@@ -47,13 +47,14 @@ def __init__(self, model: TaskScheduler, app=None):
4747 and model .interval_period is not None
4848 ):
4949 self .schedule = schedules .schedule (timedelta (** {model .interval_period : model .interval_every }))
50- elif model .type == TaskSchedulerType .CRONTAB and model .crontab_minute is not None :
50+ elif model .type == TaskSchedulerType .CRONTAB and model .crontab is not None :
51+ crontab_split = model .crontab .split (' ' )
5152 self .schedule = TzAwareCrontab (
52- minute = model . crontab_minute ,
53- hour = model . crontab_hour or '*' ,
54- day_of_week = model . crontab_day_of_week or '*' ,
55- day_of_month = model . crontab_day_of_month or '*' ,
56- month_of_year = model . crontab_month_of_year or '*' ,
53+ minute = crontab_split [ 0 ] ,
54+ hour = crontab_split [ 1 ] ,
55+ day_of_week = crontab_split [ 2 ] ,
56+ day_of_month = crontab_split [ 3 ] ,
57+ month_of_year = crontab_split [ 4 ] ,
5758 )
5859 else :
5960 raise errors .NotFoundError (msg = f'{ self .name } 计划为空!' )
@@ -63,8 +64,8 @@ def __init__(self, model: TaskScheduler, app=None):
6364 asyncio .create_task (self ._disable (model ))
6465
6566 try :
66- self .args = json .loads (model .args ) if model .args else []
67- self .kwargs = json .loads (model .kwargs ) if model .kwargs else {}
67+ self .args = json .loads (model .args ) if model .args else None
68+ self .kwargs = json .loads (model .kwargs ) if model .kwargs else None
6869 except ValueError as exc :
6970 logger .error (f'禁用参数错误的任务:{ self .name } ;error: { str (exc )} ' )
7071 asyncio .create_task (self ._disable (model ))
@@ -187,22 +188,21 @@ async def to_model_schedule(name: str, task: str, schedule: schedules.schedule |
187188 if not obj :
188189 obj = TaskScheduler (** CreateTaskSchedulerParam (task = task , ** spec ).model_dump ())
189190 elif isinstance (schedule , schedules .crontab ):
191+ crontab_minute = schedule ._orig_minute if crontab_verify ('m' , schedule ._orig_minute , False ) else '*'
192+ crontab_hour = schedule ._orig_hour if crontab_verify ('h' , schedule ._orig_hour , False ) else '*'
193+ crontab_day_of_week = (
194+ schedule ._orig_day_of_week if crontab_verify ('dom' , schedule ._orig_day_of_week , False ) else '*'
195+ )
196+ crontab_day_of_month = (
197+ schedule ._orig_day_of_month if crontab_verify ('dom' , schedule ._orig_day_of_month , False ) else '*'
198+ )
199+ crontab_month_of_year = (
200+ schedule ._orig_month_of_year if crontab_verify ('moy' , schedule ._orig_month_of_year , False ) else '*'
201+ )
190202 spec = {
191203 'name' : name ,
192204 'type' : TaskSchedulerType .CRONTAB .value ,
193- 'crontab_minute' : schedule ._orig_minute
194- if crontab_verify ('m' , schedule ._orig_minute , False )
195- else '*' ,
196- 'crontab_hour' : schedule ._orig_hour if crontab_verify ('h' , schedule ._orig_hour , False ) else '*' ,
197- 'crontab_day_of_week' : schedule ._orig_day_of_week
198- if crontab_verify ('dom' , schedule ._orig_day_of_week , False )
199- else '*' ,
200- 'crontab_day_of_month' : schedule ._orig_day_of_month
201- if crontab_verify ('dom' , schedule ._orig_day_of_month , False )
202- else '*' ,
203- 'crontab_month_of_year' : schedule ._orig_month_of_year
204- if crontab_verify ('moy' , schedule ._orig_month_of_year , False )
205- else '*' ,
205+ 'crontab' : f'{ crontab_minute } { crontab_hour } { crontab_day_of_week } { crontab_day_of_month } { crontab_month_of_year } ' , # noqa: E501
206206 }
207207 stmt = select (TaskScheduler ).filter_by (** spec )
208208 query = await db .execute (stmt )
@@ -233,8 +233,8 @@ async def _unpack_fields(
233233 except KeyError :
234234 continue
235235 model_dict .update (
236- args = json .dumps (args or []) ,
237- kwargs = json .dumps (kwargs or {}) ,
236+ args = json .dumps (args ) if args else None ,
237+ kwargs = json .dumps (kwargs ) if kwargs else None ,
238238 ** cls ._unpack_options (** options or {}),
239239 ** entry ,
240240 )
0 commit comments