@@ -47,13 +47,14 @@ def __init__(self, model: TaskScheduler, app=None):
47
47
and model .interval_period is not None
48
48
):
49
49
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 (' ' )
51
52
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 ] ,
57
58
)
58
59
else :
59
60
raise errors .NotFoundError (msg = f'{ self .name } 计划为空!' )
@@ -63,8 +64,8 @@ def __init__(self, model: TaskScheduler, app=None):
63
64
asyncio .create_task (self ._disable (model ))
64
65
65
66
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
68
69
except ValueError as exc :
69
70
logger .error (f'禁用参数错误的任务:{ self .name } ;error: { str (exc )} ' )
70
71
asyncio .create_task (self ._disable (model ))
@@ -187,22 +188,21 @@ async def to_model_schedule(name: str, task: str, schedule: schedules.schedule |
187
188
if not obj :
188
189
obj = TaskScheduler (** CreateTaskSchedulerParam (task = task , ** spec ).model_dump ())
189
190
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
+ )
190
202
spec = {
191
203
'name' : name ,
192
204
'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
206
206
}
207
207
stmt = select (TaskScheduler ).filter_by (** spec )
208
208
query = await db .execute (stmt )
@@ -233,8 +233,8 @@ async def _unpack_fields(
233
233
except KeyError :
234
234
continue
235
235
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 ,
238
238
** cls ._unpack_options (** options or {}),
239
239
** entry ,
240
240
)
0 commit comments