mirror of https://github.com/openspug/spug
				
				
				
			add scheduler to support 1-5 week
							parent
							
								
									773c2c85fa
								
							
						
					
					
						commit
						a28300a641
					
				| 
						 | 
					@ -25,6 +25,7 @@ SCHEDULE_WORKER_KEY = settings.SCHEDULE_WORKER_KEY
 | 
				
			||||||
class Scheduler:
 | 
					class Scheduler:
 | 
				
			||||||
    timezone = settings.TIME_ZONE
 | 
					    timezone = settings.TIME_ZONE
 | 
				
			||||||
    week_map = {
 | 
					    week_map = {
 | 
				
			||||||
 | 
					        '-': '-',
 | 
				
			||||||
        '*': '*',
 | 
					        '*': '*',
 | 
				
			||||||
        '7': '6',
 | 
					        '7': '6',
 | 
				
			||||||
        '0': '6',
 | 
					        '0': '6',
 | 
				
			||||||
| 
						 | 
					@ -43,6 +44,10 @@ class Scheduler:
 | 
				
			||||||
            EVENT_SCHEDULER_SHUTDOWN | EVENT_JOB_ERROR | EVENT_JOB_MAX_INSTANCES
 | 
					            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
 | 
					    @classmethod
 | 
				
			||||||
    def parse_trigger(cls, trigger, trigger_args):
 | 
					    def parse_trigger(cls, trigger, trigger_args):
 | 
				
			||||||
        if trigger == 'interval':
 | 
					        if trigger == 'interval':
 | 
				
			||||||
| 
						 | 
					@ -52,7 +57,7 @@ class Scheduler:
 | 
				
			||||||
        elif trigger == 'cron':
 | 
					        elif trigger == 'cron':
 | 
				
			||||||
            args = json.loads(trigger_args) if not isinstance(trigger_args, dict) else trigger_args
 | 
					            args = json.loads(trigger_args) if not isinstance(trigger_args, dict) else trigger_args
 | 
				
			||||||
            minute, hour, day, month, week = args['rule'].split()
 | 
					            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,
 | 
					            return CronTrigger(minute=minute, hour=hour, day=day, month=month, day_of_week=week,
 | 
				
			||||||
                               start_date=args['start'], end_date=args['stop'])
 | 
					                               start_date=args['start'], end_date=args['stop'])
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -163,7 +163,7 @@ def next_run_time(request):
 | 
				
			||||||
    if error is None:
 | 
					    if error is None:
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            minute, hour, day, month, week = form.rule.split()
 | 
					            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,
 | 
					            trigger = CronTrigger(minute=minute, hour=hour, day=day, month=month, day_of_week=week,
 | 
				
			||||||
                                  start_date=form.start, end_date=form.stop)
 | 
					                                  start_date=form.start, end_date=form.stop)
 | 
				
			||||||
        except (ValueError, KeyError):
 | 
					        except (ValueError, KeyError):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue