From a28300a641f41c86ba0d450c19e595cbbc8b74ce Mon Sep 17 00:00:00 2001 From: vapao Date: Mon, 26 Apr 2021 10:56:51 +0800 Subject: [PATCH] add scheduler to support 1-5 week --- spug_api/apps/schedule/scheduler.py | 7 ++++++- spug_api/apps/schedule/views.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/spug_api/apps/schedule/scheduler.py b/spug_api/apps/schedule/scheduler.py index 827d5e3..0857877 100644 --- a/spug_api/apps/schedule/scheduler.py +++ b/spug_api/apps/schedule/scheduler.py @@ -25,6 +25,7 @@ SCHEDULE_WORKER_KEY = settings.SCHEDULE_WORKER_KEY class Scheduler: timezone = settings.TIME_ZONE week_map = { + '-': '-', '*': '*', '7': '6', '0': '6', @@ -43,6 +44,10 @@ class Scheduler: EVENT_SCHEDULER_SHUTDOWN | EVENT_JOB_ERROR | EVENT_JOB_MAX_INSTANCES ) + @classmethod + def covert_week(cls, week_str): + return ''.join(map(lambda x: cls.week_map[x], week_str)) + @classmethod def parse_trigger(cls, trigger, trigger_args): if trigger == 'interval': @@ -52,7 +57,7 @@ class Scheduler: elif trigger == 'cron': args = json.loads(trigger_args) if not isinstance(trigger_args, dict) else trigger_args minute, hour, day, month, week = args['rule'].split() - week = cls.week_map[week] + week = cls.covert_week(week) return CronTrigger(minute=minute, hour=hour, day=day, month=month, day_of_week=week, start_date=args['start'], end_date=args['stop']) else: diff --git a/spug_api/apps/schedule/views.py b/spug_api/apps/schedule/views.py index 561b966..c0bb032 100644 --- a/spug_api/apps/schedule/views.py +++ b/spug_api/apps/schedule/views.py @@ -163,7 +163,7 @@ def next_run_time(request): if error is None: try: minute, hour, day, month, week = form.rule.split() - week = Scheduler.week_map[week] + week = Scheduler.covert_week(week) trigger = CronTrigger(minute=minute, hour=hour, day=day, month=month, day_of_week=week, start_date=form.start, end_date=form.stop) except (ValueError, KeyError):