def test_serialize_complex_schedule(): dt = pendulum.datetime(2019, 1, 3) s = schedules.Schedule( # fire every hour clocks=[clocks.IntervalClock(timedelta(hours=1))], # only on weekdays filters=[filters.is_weekday], # only at 9am or 3pm or_filters=[ filters.at_time(pendulum.time(9)), filters.between_times(pendulum.time(15), pendulum.time(15)), ], # not on january 8 not_filters=[filters.between_dates(1, 8, 1, 8)], # add three hours adjustments=[adjustments.add(timedelta(hours=3))], ) s2 = serialize_and_deserialize(s) assert s2.next(8, after=dt) == [ dt.replace(hour=12), dt.replace(hour=18), dt.add(days=1).replace(hour=12), dt.add(days=1).replace(hour=18), # skip weekend dt.add(days=4).replace(hour=12), dt.add(days=4).replace(hour=18), # skip jan 8! dt.add(days=6).replace(hour=12), dt.add(days=6).replace(hour=18), ]
def test_create_schedule_filters_2(): dt = pendulum.datetime(2019, 1, 1) s = schedules.Schedule( clocks=[clocks.IntervalClock(timedelta(minutes=15))], filters=[filters.at_time(pendulum.time(2, 45))], ) assert s.next(6, after=dt) == [ dt.add(days=0, hours=2, minutes=45), dt.add(days=1, hours=2, minutes=45), dt.add(days=2, hours=2, minutes=45), dt.add(days=3, hours=2, minutes=45), dt.add(days=4, hours=2, minutes=45), dt.add(days=5, hours=2, minutes=45), ]
def test_at_time(test_times): test_dt, result = test_times filter_fn = filters.at_time(pendulum.time(3, 30)) assert filter_fn(test_dt) is result