def test_crontab_scheduler(self): crontab = "* * * * *" start_at = datetime.now().replace(microsecond=0, second=0, minute=0) stop_at = start_at + timedelta(seconds=3600) # Fire off the task every minute schedules = list( next_schedules(crontab, start_at, stop_at, resolution=0)) self.assertEqual(schedules[0], start_at) self.assertEqual(schedules[-1], stop_at - timedelta(seconds=60)) self.assertEqual(len(schedules), 60) # Fire off the task every 10 minutes, controlled via resolution schedules = list( next_schedules(crontab, start_at, stop_at, resolution=10 * 60)) self.assertEqual(schedules[0], start_at) self.assertEqual(schedules[-1], stop_at - timedelta(seconds=10 * 60)) self.assertEqual(len(schedules), 6) # Fire off the task every 12 minutes, controlled via resolution schedules = list( next_schedules(crontab, start_at, stop_at, resolution=12 * 60)) self.assertEqual(schedules[0], start_at) self.assertEqual(schedules[-1], stop_at - timedelta(seconds=12 * 60)) self.assertEqual(len(schedules), 5)
def test_crontab_scheduler(self): crontab = '* * * * *' start_at = datetime.now().replace(microsecond=0, second=0, minute=0) stop_at = start_at + timedelta(seconds=3600) # Fire off the task every minute schedules = list(next_schedules(crontab, start_at, stop_at, resolution=0)) self.assertEqual(schedules[0], start_at) self.assertEqual(schedules[-1], stop_at - timedelta(seconds=60)) self.assertEqual(len(schedules), 60) # Fire off the task every 10 minutes, controlled via resolution schedules = list(next_schedules(crontab, start_at, stop_at, resolution=10 * 60)) self.assertEqual(schedules[0], start_at) self.assertEqual(schedules[-1], stop_at - timedelta(seconds=10 * 60)) self.assertEqual(len(schedules), 6) # Fire off the task every 12 minutes, controlled via resolution schedules = list(next_schedules(crontab, start_at, stop_at, resolution=12 * 60)) self.assertEqual(schedules[0], start_at) self.assertEqual(schedules[-1], stop_at - timedelta(seconds=12 * 60)) self.assertEqual(len(schedules), 5)
def test_complex_schedule(self): # Run the job on every Friday of March and May # On these days, run the job at # 5:10 pm # 5:11 pm # 5:12 pm # 5:13 pm # 5:14 pm # 5:15 pm # 5:25 pm # 5:28 pm # 5:31 pm # 5:34 pm # 5:37 pm # 5:40 pm crontab = "10-15,25-40/3 17 * 3,5 5" start_at = datetime.strptime("2018/01/01", "%Y/%m/%d") stop_at = datetime.strptime("2018/12/31", "%Y/%m/%d") schedules = list( next_schedules(crontab, start_at, stop_at, resolution=60)) self.assertEqual(len(schedules), 108) fmt = "%Y-%m-%d %H:%M:%S" self.assertEqual(schedules[0], datetime.strptime("2018-03-02 17:10:00", fmt)) self.assertEqual(schedules[-1], datetime.strptime("2018-05-25 17:40:00", fmt)) self.assertEqual(schedules[59], datetime.strptime("2018-03-30 17:40:00", fmt)) self.assertEqual(schedules[60], datetime.strptime("2018-05-04 17:10:00", fmt))
def test_complex_schedule(self): # Run the job on every Friday of March and May # On these days, run the job at # 5:10 pm # 5:11 pm # 5:12 pm # 5:13 pm # 5:14 pm # 5:15 pm # 5:25 pm # 5:28 pm # 5:31 pm # 5:34 pm # 5:37 pm # 5:40 pm crontab = '10-15,25-40/3 17 * 3,5 5' start_at = datetime.strptime('2018/01/01', '%Y/%m/%d') stop_at = datetime.strptime('2018/12/31', '%Y/%m/%d') schedules = list(next_schedules(crontab, start_at, stop_at, resolution=60)) self.assertEqual(len(schedules), 108) fmt = '%Y-%m-%d %H:%M:%S' self.assertEqual(schedules[0], datetime.strptime('2018-03-02 17:10:00', fmt)) self.assertEqual(schedules[-1], datetime.strptime('2018-05-25 17:40:00', fmt)) self.assertEqual(schedules[59], datetime.strptime('2018-03-30 17:40:00', fmt)) self.assertEqual(schedules[60], datetime.strptime('2018-05-04 17:10:00', fmt))
def test_wider_schedules(self): crontab = '*/15 2,10 * * *' for hour in range(0, 24): start_at = datetime.now().replace( microsecond=0, second=0, minute=0, hour=hour) stop_at = start_at + timedelta(seconds=3600) schedules = list(next_schedules(crontab, start_at, stop_at, resolution=0)) if hour in (2, 10): self.assertEqual(len(schedules), 4) else: self.assertEqual(len(schedules), 0)
def test_wider_schedules(self): crontab = '*/15 2,10 * * *' for hour in range(0, 24): start_at = datetime.now().replace( microsecond=0, second=0, minute=0, hour=hour) stop_at = start_at + timedelta(seconds=3600) schedules = list(next_schedules(crontab, start_at, stop_at, resolution=0)) if hour in (2, 10): self.assertEqual(len(schedules), 4) else: self.assertEqual(len(schedules), 0)