def test_dst_change(self): """ Making sure that IntervalTrigger works during the ambiguous "fall-back" DST period. Note that you should explicitly compare datetimes as strings to avoid the internal datetime comparison which would test for equality in the UTC timezone. """ eastern = pytz.timezone('US/Eastern') start_date = datetime(2013, 3, 1) # Start within EDT trigger = IntervalTrigger(hours=1, start_date=start_date, timezone=eastern) datetime_edt = eastern.localize(datetime(2013, 3, 10, 1, 5), is_dst=False) correct_next_date = eastern.localize(datetime(2013, 3, 10, 3), is_dst=True) assert str(trigger.get_next_fire_time( None, datetime_edt)) == str(correct_next_date) datetime_est = eastern.localize(datetime(2013, 11, 3, 1, 5), is_dst=True) correct_next_date = eastern.localize(datetime(2013, 11, 3, 1), is_dst=False) assert str(trigger.get_next_fire_time( None, datetime_est)) == str(correct_next_date)
def test_end_date(self, timezone): """Tests that the interval trigger won't return any datetimes past the set end time.""" start_date = timezone.localize(datetime(2014, 5, 26)) trigger = IntervalTrigger(minutes=5, start_date=start_date, end_date=datetime(2014, 5, 26, 0, 7), timezone=timezone) assert trigger.get_next_fire_time(None, start_date + timedelta(minutes=2)) == \ start_date.replace(minute=5) assert trigger.get_next_fire_time(None, start_date + timedelta(minutes=6)) is None
def test_end_date(self, timezone): """Tests that the interval trigger won't return any datetimes past the set end time.""" start_date = timezone.localize(datetime(2014, 5, 26)) trigger = IntervalTrigger(minutes=5, start_date=start_date, end_date=datetime(2014, 5, 26, 0, 7), timezone=timezone) assert trigger.get_next_fire_time(None, start_date + timedelta(minutes=2)) == \ start_date.replace(minute=5) assert trigger.get_next_fire_time(None, start_date + timedelta(minutes=6)) is None
def test_jitter_with_end_date(self, timezone): now = timezone.localize(datetime(2017, 11, 12, 6, 55, 58)) end_date = timezone.localize(datetime(2017, 11, 12, 6, 56, 0)) trigger = IntervalTrigger(seconds=5, jitter=5, end_date=end_date) for _ in range(0, 100): next_fire_time = trigger.get_next_fire_time(None, now) assert next_fire_time is None or next_fire_time <= end_date
def test_dst_change(self): """ Making sure that IntervalTrigger works during the ambiguous "fall-back" DST period. Note that you should explicitly compare datetimes as strings to avoid the internal datetime comparison which would test for equality in the UTC timezone. """ eastern = pytz.timezone('US/Eastern') start_date = datetime(2013, 3, 1) # Start within EDT trigger = IntervalTrigger(hours=1, start_date=start_date, timezone=eastern) datetime_edt = eastern.localize(datetime(2013, 3, 10, 1, 5), is_dst=False) correct_next_date = eastern.localize(datetime(2013, 3, 10, 3), is_dst=True) assert str(trigger.get_next_fire_time(None, datetime_edt)) == str(correct_next_date) datetime_est = eastern.localize(datetime(2013, 11, 3, 1, 5), is_dst=True) correct_next_date = eastern.localize(datetime(2013, 11, 3, 1), is_dst=False) assert str(trigger.get_next_fire_time(None, datetime_est)) == str(correct_next_date)
def test_jitter_produces_different_valid_results(self, timezone): trigger = IntervalTrigger(seconds=5, timezone=timezone, jitter=3) now = datetime.now(timezone) results = set() for _ in range(0, 100): next_fire_time = trigger.get_next_fire_time(None, now) results.add(next_fire_time) assert timedelta(seconds=2) <= (next_fire_time - now) <= timedelta(seconds=8) assert 1 < len(results)
def test_jitter_dst_change(self, trigger_args, start_date, start_date_dst, correct_next_date): timezone = pytz.timezone('US/Eastern') epsilon = timedelta(seconds=1) start_date = timezone.localize(start_date, is_dst=start_date_dst) trigger = IntervalTrigger(timezone=timezone, start_date=start_date, jitter=5, **trigger_args) correct_next_date = timezone.localize(correct_next_date, is_dst=not start_date_dst) for _ in range(0, 100): next_fire_time = trigger.get_next_fire_time(None, start_date + epsilon) assert abs(next_fire_time - correct_next_date) <= timedelta(seconds=5)
def test_no_start_date(self, timezone): trigger = IntervalTrigger(seconds=2, timezone=timezone) now = datetime.now(timezone) assert (trigger.get_next_fire_time(None, now) - now) <= timedelta(seconds=2)
def test_no_start_date(self, timezone): trigger = IntervalTrigger(seconds=2, timezone=timezone) now = datetime.now(timezone) assert (trigger.get_next_fire_time(None, now) - now) <= timedelta(seconds=2)