def test_daily_next(self): helper_noon = repeat.daily_helper(time(12, 0, 0)) helper_midnight = repeat.daily_helper(time(0, 0, 0)) # Noon - Morning now = repeat.localtime_to_utc(datetime(2012, 2, 13, 3, 21, 17)) result = helper_noon(now) self.assertEquals(result, datetime(2012, 2, 13, 20, 0)) # Noon - Evening now = repeat.localtime_to_utc(datetime(2012, 2, 13, 17, 21, 17)) result = helper_noon(now) self.assertEquals(result, datetime(2012, 2, 14, 20, 0)) # Noon - Month/Year wrap now = repeat.localtime_to_utc(datetime(2012, 12, 31, 23, 59, 59)) result = helper_noon(now) self.assertEquals(result, datetime(2013, 1, 1, 20, 0)) # Midnight - Morning now = repeat.localtime_to_utc(datetime(2012, 2, 13, 3, 21, 17)) result = helper_midnight(now) self.assertEquals(result, datetime(2012, 2, 14, 8, 0)) # Midnight - Evening now = repeat.localtime_to_utc(datetime(2012, 2, 13, 13, 21, 17)) result = helper_midnight(now) self.assertEquals(result, datetime(2012, 2, 14, 8, 0)) # Midnight - Midnight now = repeat.localtime_to_utc(datetime(2012, 2, 13, 0, 0, 0)) result = helper_midnight(now) self.assertEquals(result, datetime(2012, 2, 14, 8, 0)) # Odd Time now = repeat.localtime_to_utc(datetime(2012, 2, 13, 3, 21, 17)) result = repeat.daily_next(now, time(13, 37, 19)) self.assertEquals(result, datetime(2012, 2, 13, 21, 37, 19))
def __init__(self, engine, status, url, rule): super(_DailyHelper, self).__init__(engine, status, url, rule) latitude = float(self._status.get('status://server/latitude')) longitude = float(self._status.get('status://server/longitude')) # The _find_next_fire_time is a method that returns the datetime in which to # next fire if passed utcnow as a datetime. The different implementations of # it are how we adjust for different types of daily rules. if self._rule['time'] == 'sunset': self._find_next_fire_time = repeat.sunset_helper( latitude, longitude) elif self._rule['time'] == 'sunrise': self._find_next_fire_time = repeat.sunrise_helper( latitude, longitude) else: # Else we expect time to be in the format 'hh:mm:ss' hours, minutes, seconds = [ int(i) for i in self._rule['time'].split(':') ] time_of_day = datetime.time(hours, minutes, seconds) self._find_next_fire_time = repeat.daily_helper(time_of_day)