Example #1
0
  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))
Example #2
0
    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)