def task(cronformat): cron = CronSchedule(cronformat) delay_sec = (cron.getNextEntry() - datetime.now()).seconds print "on decorator", cron.getNextEntry() def decorator(f): gargs = [] gkargs = {} def wrapper(*args, **kargs): gargs = args gkargs = kargs print delay_sec, gargs, gkargs reactor.callLater(delay_sec, wrapper, gargs, gkargs) return wrapper return decorator
def test_getFirstDayWithSundayDOW(self): """ Test next day with Sunday DOW entry """ schedule = CronSchedule('* * * * 0,3,5') self.assertEqual( schedule.getNextEntry(datetime(2008, 8, 31, 23, 59, 00, 00)), datetime(2008, 9, 3, 00, 00, 00, 00))
class AllDOWTestCase(TestCase): def setUp(self): self.schedule = CronSchedule('*/15 * */5 * *') def testNextDay(self): """ Test all days of the week get next day """ for i in range(1,30): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 01, i, 23, 59, 00, 00)), datetime(2008,01,(i/5)*5+5,00,00,00,00)) def testNextMonth(self): """ Test all days of the week get next month """ self.assertEqual(self.schedule.getNextEntry(datetime(2008, 01, 31, 23, 59, 00, 00)), datetime(2008,02,05,00,00,00,00))
class AllDOMTestCase(TestCase): def setUp(self): self.schedule = CronSchedule('*/15 * * * 1,3,5') def testNextDay(self): """ Test all days of the month get next day """ self.assertEqual(self.schedule.getNextEntry(datetime(2008, 9, 1, 23, 59, 00, 00)), datetime(2008,9,3,00,00,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 9, 15, 23, 59, 00, 00)), datetime(2008,9,17,00,00,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 9, 16, 23, 59, 00, 00)), datetime(2008,9,17,00,00,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 9, 17, 23, 59, 00, 00)), datetime(2008,9,19,00,00,00,00)) def testNextMonth(self): """ Test all days of the month get next month """ self.assertEqual(self.schedule.getNextEntry(datetime(2008, 6, 30, 23, 59, 00, 00)), datetime(2008,7,2,00,00,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 8, 29, 23, 59, 00, 00)), datetime(2008,9,1,00,00,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 9, 29, 23, 59, 00, 00)), datetime(2008,10,1,00,00,00,00))
class AllDOMTestCase(TestCase): def setUp(self): self.schedule = CronSchedule('*/15 * * * 1,3,5') def testNextDay(self): """ Test all days of the month get next day """ self.assertEqual( self.schedule.getNextEntry(datetime(2008, 9, 1, 23, 59, 00, 00)), datetime(2008, 9, 3, 00, 00, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 9, 15, 23, 59, 00, 00)), datetime(2008, 9, 17, 00, 00, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 9, 16, 23, 59, 00, 00)), datetime(2008, 9, 17, 00, 00, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 9, 17, 23, 59, 00, 00)), datetime(2008, 9, 19, 00, 00, 00, 00)) def testNextMonth(self): """ Test all days of the month get next month """ self.assertEqual( self.schedule.getNextEntry(datetime(2008, 6, 30, 23, 59, 00, 00)), datetime(2008, 7, 2, 00, 00, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 8, 29, 23, 59, 00, 00)), datetime(2008, 9, 1, 00, 00, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 9, 29, 23, 59, 00, 00)), datetime(2008, 10, 1, 00, 00, 00, 00))
def _load_triggers(self): ''' This function loads all the triggers from the database. ''' # Stop any outstanding absolute time triggers in case of a reload. for schedule in self._absolute_time_schedule_calls: schedule.stop() self._absolute_time_schedule_calls = [] triggers = yield self.db.query_triggers() for trigger in triggers: t = Trigger(trigger[1], trigger[2], trigger[3]) # get trigger parameters trigger_parameters = yield self.db.query_trigger_parameters( trigger[0]) for param in trigger_parameters: if param[0] == "cron": t.cron = param[1] elif param[0] == "current_value_id": t.current_value_id = param[1] elif param[0] == "condition": t.condition = param[1] elif param[0] == "condition_value": t.condition_value = param[1] # Handle absolute time directly, and schedule. No need to keep track of this. if trigger[1] == "Absolute time": c = CronSchedule(t.cron) print c.getNextEntry() s = ScheduledCall(f=self._absolute_time_triggered, eventid=trigger[2], conditions=trigger[3]) s.start(c) self._absolute_time_schedule_calls.append(s) continue self._triggers.append(t)
def _load_triggers(self): ''' This function loads all the triggers from the database. ''' # Stop any outstanding absolute time triggers in case of a reload. for schedule in self._absolute_time_schedule_calls: schedule.stop() self._absolute_time_schedule_calls = [] triggers = yield self.db.query_triggers() for trigger in triggers: t = Trigger(trigger[1], trigger[2], trigger[3]) # get trigger parameters trigger_parameters = yield self.db.query_trigger_parameters(trigger[0]) for param in trigger_parameters: if param[0] == "cron": t.cron = param[1] elif param[0] == "current_value_id": t.current_value_id = param[1] elif param[0] == "condition": t.condition = param[1] elif param[0] == "condition_value": t.condition_value = param[1] # Handle absolute time directly, and schedule. No need to keep track of this. if trigger[1] == "Absolute time": c = CronSchedule(t.cron) print c.getNextEntry() s = ScheduledCall(f=self._absolute_time_triggered, eventid=trigger[2], conditions=trigger[3]) s.start(c) self._absolute_time_schedule_calls.append(s) continue self._triggers.append(t)
class StarTestCase(TestCase): def setUp(self): self.schedule = CronSchedule('* * * * *') def testNextMinute(self): """ Next runtime is next minute """ for i in range(0,59): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 01, 01, 00, i, 00, 00)), datetime(2008,01,01,00,i+1,00,00)) def testNextHour(self): """ Next runtime is next hour """ for i in range(0,23): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 01, 01, i, 59, 00, 00)), datetime(2008,01,01,i+1,00,00,00)) def testNextDay(self): """ Next runtime is next day """ for i in range(1,31): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 01, i, 23, 59, 00, 00)), datetime(2008,01,i+1,00,00,00,00)) def testNextMonth(self): """ Next runtime is next month """ self.assertEqual(self.schedule.getNextEntry(datetime(2008, 01, 31, 23, 59, 00, 00)), datetime(2008,02,01,00,00,00,00)) def testNextYear(self): """ Next runtime is next year """ self.assertEqual(self.schedule.getNextEntry(datetime(2008, 12, 31, 23, 59, 00, 00)), datetime(2009,01,01,00,00,00,00))
class StarTestCase(TestCase): def setUp(self): self.schedule = CronSchedule('* * * * *') def testNextMinute(self): """ Next runtime is next minute """ for i in range(0, 59): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 01, 01, 00, i, 00, 00)), datetime(2008, 01, 01, 00, i + 1, 00, 00)) def testNextHour(self): """ Next runtime is next hour """ for i in range(0, 23): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 01, 01, i, 59, 00, 00)), datetime(2008, 01, 01, i + 1, 00, 00, 00)) def testNextDay(self): """ Next runtime is next day """ for i in range(1, 31): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 01, i, 23, 59, 00, 00)), datetime(2008, 01, i + 1, 00, 00, 00, 00)) def testNextMonth(self): """ Next runtime is next month """ self.assertEqual( self.schedule.getNextEntry(datetime(2008, 01, 31, 23, 59, 00, 00)), datetime(2008, 02, 01, 00, 00, 00, 00)) def testNextYear(self): """ Next runtime is next year """ self.assertEqual( self.schedule.getNextEntry(datetime(2008, 12, 31, 23, 59, 00, 00)), datetime(2009, 01, 01, 00, 00, 00, 00))
class RangeTestCase(TestCase): def setUp(self): self.schedule = CronSchedule('15-20 3-6 5-10 5-8 2-3') def testNextMinute(self): """ Test range get next minute """ # Test minutes that should end up in the current hour at 15 minutes for i in range(0,14): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, 05, 03, i, 00, 00)), datetime(2008,05,05,03,15,00,00)) # Test minutes that should end up in the current hour at i+1 minutes for i in range(14,20): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, 05, 03, i, 00, 00)), datetime(2008,05,05,03,i+1,00,00)) # Test minutes that should end up at hour+1 and 15 minutes for i in range(20,60): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, 05, 03, i, 00, 00)), datetime(2008,05,05,04,15,00,00)) def testNextHour(self): """ Test range get next hour """ for i in range(0,3): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, 05, i, 59, 00, 00)), datetime(2008,05,05,3,15,00,00)) for i in range(3,6): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, 05, i, 59, 00, 00)), datetime(2008,05,05,i+1,15,00,00)) for i in range(6,24): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, 05, i, 59, 00, 00)), datetime(2008,05,06,03,15,00,00)) def testNextDay(self): """ Test range get next day """ for i in range(1,5): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, i, 23, 59, 00, 00)), datetime(2008,05,5,3,15,00,00)) for i in range(5,10): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, i, 23, 59, 00, 00)), datetime(2008,05,i+1,3,15,00,00)) for i in range(10,13): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, i, 23, 59, 00, 00)), datetime(2008,05,13,3,15,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, 13, 23, 59, 00, 00)), datetime(2008,05,14,3,15,00,00)) for i in range(14,20): self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, i, 23, 59, 00, 00)), datetime(2008,05,20,3,15,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, 20, 23, 59, 00, 00)), datetime(2008,05,21,3,15,00,00)) def testNextMonth(self): """ Test range get next month """ self.assertEqual(self.schedule.getNextEntry(datetime(2008, 01, 01, 00, 00, 00, 00)), datetime(2008,05,05,03,15,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 05, 31, 23, 59, 00, 00)), datetime(2008,06,03,03,15,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 07, 30, 23, 59, 00, 00)), datetime(2008,8,05,03,15,00,00)) self.assertEqual(self.schedule.getNextEntry(datetime(2008, 8, 31, 23, 59, 00, 00)), datetime(2009,05,05,03,15,00,00))
def test_getFirstDayWithSundayDOW(self): """ Test next day with Sunday DOW entry """ schedule = CronSchedule('* * * * 0,3,5') self.assertEqual(schedule.getNextEntry(datetime(2008,8,31,23,59,00,00)), datetime(2008,9,3,00,00,00,00))
class RangeTestCase(TestCase): def setUp(self): self.schedule = CronSchedule('15-20 3-6 5-10 5-8 2-3') def testNextMinute(self): """ Test range get next minute """ # Test minutes that should end up in the current hour at 15 minutes for i in range(0, 14): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, 05, 03, i, 00, 00)), datetime(2008, 05, 05, 03, 15, 00, 00)) # Test minutes that should end up in the current hour at i+1 minutes for i in range(14, 20): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, 05, 03, i, 00, 00)), datetime(2008, 05, 05, 03, i + 1, 00, 00)) # Test minutes that should end up at hour+1 and 15 minutes for i in range(20, 60): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, 05, 03, i, 00, 00)), datetime(2008, 05, 05, 04, 15, 00, 00)) def testNextHour(self): """ Test range get next hour """ for i in range(0, 3): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, 05, i, 59, 00, 00)), datetime(2008, 05, 05, 3, 15, 00, 00)) for i in range(3, 6): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, 05, i, 59, 00, 00)), datetime(2008, 05, 05, i + 1, 15, 00, 00)) for i in range(6, 24): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, 05, i, 59, 00, 00)), datetime(2008, 05, 06, 03, 15, 00, 00)) def testNextDay(self): """ Test range get next day """ for i in range(1, 5): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, i, 23, 59, 00, 00)), datetime(2008, 05, 5, 3, 15, 00, 00)) for i in range(5, 10): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, i, 23, 59, 00, 00)), datetime(2008, 05, i + 1, 3, 15, 00, 00)) for i in range(10, 13): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, i, 23, 59, 00, 00)), datetime(2008, 05, 13, 3, 15, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 05, 13, 23, 59, 00, 00)), datetime(2008, 05, 14, 3, 15, 00, 00)) for i in range(14, 20): self.assertEqual( self.schedule.getNextEntry( datetime(2008, 05, i, 23, 59, 00, 00)), datetime(2008, 05, 20, 3, 15, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 05, 20, 23, 59, 00, 00)), datetime(2008, 05, 21, 3, 15, 00, 00)) def testNextMonth(self): """ Test range get next month """ self.assertEqual( self.schedule.getNextEntry(datetime(2008, 01, 01, 00, 00, 00, 00)), datetime(2008, 05, 05, 03, 15, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 05, 31, 23, 59, 00, 00)), datetime(2008, 06, 03, 03, 15, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 07, 30, 23, 59, 00, 00)), datetime(2008, 8, 05, 03, 15, 00, 00)) self.assertEqual( self.schedule.getNextEntry(datetime(2008, 8, 31, 23, 59, 00, 00)), datetime(2009, 05, 05, 03, 15, 00, 00))