def test_get_invalid_time_with_exclude(self): """ Test get next invalid time with exclude :return: None """ timeperiod = Timeperiod() timeperiod.resolve_daterange(timeperiod.dateranges, 'monday 00:00-24:00') t2 = Timeperiod() t2.resolve_daterange(t2.dateranges, 'monday 08:30-21:00') timeperiod.exclude = [t2] first_nov = int( time.mktime( time.strptime("1 Nov 2010 00:00:00", "%d %b %Y %H:%M:%S"))) print(first_nov) end = timeperiod.get_next_invalid_time_from_t(first_nov) end = time.asctime(time.localtime(end)) self.assertEqual("Mon Nov 1 08:30:00 2010", end) second_nov = int( time.mktime( time.strptime("2 Nov 2010 00:00:00", "%d %b %Y %H:%M:%S"))) print(second_nov) end = timeperiod.get_next_invalid_time_from_t(second_nov) end = time.asctime(time.localtime(end)) self.assertEqual("Tue Nov 2 00:00:00 2010", end)
def test_dayweek_exclusion_timeperiod_with_day_range(self): """ Test day week timeperiod with exclude day range :return: None """ # Get the 13 of july 2010 at 15:00, tuesday july_the_13 = time.mktime( time.strptime("13 Jul 2010 15:00:00", "%d %b %Y %H:%M:%S")) print(july_the_13) timeperiod = Timeperiod() timeperiod.resolve_daterange(timeperiod.dateranges, '2010-03-01 - 2020-03-01 00:00-24:00') # Now we add this timeperiod an exception t2 = Timeperiod() t2.timeperiod_name = '' t2.resolve_daterange(t2.dateranges, 'tuesday 00:00-24:00') timeperiod.exclude = [t2] t_next = timeperiod.get_next_valid_time_from_t(july_the_13) t_next = time.asctime(time.localtime(t_next)) print("T next", t_next) self.assertEqual("Wed Jul 14 00:00:00 2010", t_next)
def test_monweekday_timeperiod_with_exclude(self): """ Test mon week day timeperiod with exclude :return: None """ now = time.time() # Get the 12 of july 2010 at 15:00, monday july_the_12 = time.mktime( time.strptime("12 Jul 2010 15:00:00", "%d %b %Y %H:%M:%S")) # Then a funny daterange print("Testing daterange", 'tuesday -1 july - monday 1 september 16:30-24:00') timeperiod = Timeperiod() timeperiod.timeperiod_name = 'T1' timeperiod.resolve_daterange( timeperiod.dateranges, 'tuesday -1 july - monday 1 september 16:30-24:00') t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) print("Next without exclude", t_next) self.assertEqual("Tue Jul 27 16:30:00 2010", t_next) # Now we add this timeperiod an exception # and from april (before) to august monday 3 (monday 16 august), t2 = Timeperiod() t2.timeperiod_name = 'T2' t2.resolve_daterange(t2.dateranges, 'thursday 1 april - monday 3 august 00:00-24:00') timeperiod.exclude = [t2] timeperiod.cache = {} t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) self.assertEqual('Tue Aug 17 16:30:00 2010', t_next)
def test_mondayweek_timeperiod_with_exclude_and_multiple_daterange(self): """ Test monday week timeperiod with exclude multiple dateranges :return: None """ now = time.time() # Get the 12 of july 2010 at 15:00, monday july_the_12 = time.mktime( time.strptime("12 Jul 2010 15:00:00", "%d %b %Y %H:%M:%S")) # Then a funny daterange print("Testing daterange", 'tuesday -1 - monday 1 16:30-24:00') timeperiod = Timeperiod() timeperiod.timeperiod_name = 'T1' timeperiod.resolve_daterange(timeperiod.dateranges, 'tuesday -1 - monday 1 16:30-24:00') t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) print("Next without exclude", t_next) self.assertEqual("Tue Jul 27 16:30:00 2010", t_next) # Now we add this timeperiod an exception # And a good one: from april (so before) to august (after), and full time. # But the 27 is nw not possible? So what next? Add a month! # But maybe it's not enough? :) # The without the 2nd exclude, it's the Tues Aug 31, but it's inside # saturday -1 - monday 1 because saturday -1 is the 28 august, so no. # in september saturday -1 is the 25, and tuesday -1 is 28, so still no # A month again! So now tuesday -1 is 26 and saturday -1 is 30. So ok # for this one! that was quite long isn't it? t2 = Timeperiod() t2.timeperiod_name = 'T2' t2.resolve_daterange(t2.dateranges, 'april 1 - august 16 00:00-24:00') t2.resolve_daterange(t2.dateranges, 'saturday -1 - monday 1 16:00-24:00') timeperiod.exclude = [t2] timeperiod.cache = {} t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) self.assertEqual('Tue Oct 26 16:30:00 2010', t_next) t_exclude_inv = t2.get_next_invalid_time_from_t(july_the_12) t_exclude_inv = time.asctime(time.localtime(t_exclude_inv)) self.assertEqual('Tue Aug 17 00:00:00 2010', t_exclude_inv)
def test_mondayweek_timeperiod_with_exclude_bis(self): """ Test monday weeb timeperiod with exclude, version 2 :D :return: None """ now = time.time() # Get the 12 of july 2010 at 15:00, monday july_the_12 = time.mktime( time.strptime("12 Jul 2010 15:00:00", "%d %b %Y %H:%M:%S")) # Then a funny daterange print("Testing daterange", 'tuesday -1 - monday 1 16:30-24:00') timerange = Timeperiod() timerange.timeperiod_name = 'T1' timerange.resolve_daterange(timerange.dateranges, 'tuesday -1 - monday 1 16:30-24:00') t_next = timerange.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) print("Next without exclude", t_next) self.assertEqual("Tue Jul 27 16:30:00 2010", t_next) # Now we add this timeperiod an exception # And a good one: from april (so before) to august (after), and full time. # But the 27 is now not possible? So what next? Add a month! # last tuesday of august, the 31 :) t2 = Timeperiod() t2.timeperiod_name = 'T2' t2.resolve_daterange(t2.dateranges, 'april 1 - august 16 00:00-24:00') timerange.exclude = [t2] timerange.cache = {} t_next = timerange.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) self.assertEqual('Tue Aug 31 16:30:00 2010', t_next) t_exclude = t2.get_next_valid_time_from_t(july_the_12) t_exclude = time.asctime(time.localtime(t_exclude)) self.assertEqual('Mon Jul 12 15:00:00 2010', t_exclude) t_exclude_inv = t2.get_next_invalid_time_from_t(july_the_12) t_exclude_inv = time.asctime(time.localtime(t_exclude_inv)) self.assertEqual('Tue Aug 17 00:00:00 2010', t_exclude_inv)
def test_simple_timeperiod_with_exclude(self): """ Test simple timeperiod with exclude periods :return: None """ now = time.time() # Get the 12 of july 2010 at 15:00, monday july_the_12 = time.mktime( time.strptime("12 Jul 2010 15:00:00", "%d %b %Y %H:%M:%S")) print("July 12th, 2010: %s" % july_the_12) # First a false test, no results timeperiod = Timeperiod() timeperiod.resolve_daterange(timeperiod.dateranges, '1999-01-28 00:00-24:00') t_next = timeperiod.get_next_valid_time_from_t(now) self.assertIs(None, t_next) # Then a simple same day timeperiod = Timeperiod() timeperiod.resolve_daterange(timeperiod.dateranges, 'tuesday 16:30-24:00') t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) print(t_next) self.assertEqual("Tue Jul 13 16:30:00 2010", t_next) # Now we add this timeperiod an exception t2 = Timeperiod() t2.timeperiod_name = '' t2.resolve_daterange(t2.dateranges, 'tuesday 08:30-21:00') timeperiod.exclude = [t2] # So the next will be after 16:30 and not before 21:00. So # It will be 21:00:01 (first second after invalid is valid) # we clean the cache of previous calc of t ;) timeperiod.cache = {} t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) print("T nxt with exclude:", t_next) self.assertEqual("Tue Jul 13 21:00:01 2010", t_next)
def test_dayweek_timeperiod_with_exclude(self): """ test dayweek timeperiod with exclude :return: None """ now = time.time() # Get the 12 of july 2010 at 15:00, monday july_the_12 = time.mktime( time.strptime("12 Jul 2010 15:00:00", "%d %b %Y %H:%M:%S")) # Then a simple same day timeperiod = Timeperiod() timeperiod.timeperiod_name = 'T1' timeperiod.resolve_daterange(timeperiod.dateranges, 'tuesday 2 16:30-24:00') t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) print("T next", t_next) self.assertEqual("Tue Jul 13 16:30:00 2010", t_next) # Now we add this timeperiod an exception t2 = Timeperiod() t2.timeperiod_name = 'T2' t2.resolve_daterange(t2.dateranges, 'tuesday 00:00-23:58') timeperiod.exclude = [t2] # We are a bad boy: first time period want a tuesday # but exclude do not want it until 23:58. So next is 58 + 1 second :) timeperiod.cache = {} t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) self.assertEqual('Tue Jul 13 23:58:01 2010', t_next) t_exclude = t2.get_next_valid_time_from_t(july_the_12) t_exclude = time.asctime(time.localtime(t_exclude)) self.assertEqual('Tue Jul 13 00:00:00 2010', t_exclude) t_exclude_inv = t2.get_next_invalid_time_from_t(july_the_12) t_exclude_inv = time.asctime(time.localtime(t_exclude_inv)) self.assertEqual('Mon Jul 12 15:00:00 2010', t_exclude_inv)
def test_dayweek_exclusion_timeperiod(self): """ Test week day timeperiod with exclusion :return: None """ now = time.time() # Get the 13 of july 2010 at 15:00, tuesday july_the_13 = time.mktime( time.strptime("13 Jul 2010 15:00:00", "%d %b %Y %H:%M:%S")) print(july_the_13) # Now we add this timeperiod an exception timeperiod = Timeperiod() timeperiod.resolve_daterange(timeperiod.dateranges, 'monday 00:00-24:00') timeperiod.resolve_daterange(timeperiod.dateranges, 'tuesday 00:00-24:00') timeperiod.resolve_daterange(timeperiod.dateranges, 'wednesday 00:00-24:00') t2 = Timeperiod() t2.timeperiod_name = '' t2.resolve_daterange(t2.dateranges, 'tuesday 00:00-24:00') timeperiod.exclude = [t2] t_next = timeperiod.get_next_valid_time_from_t(july_the_13) t_next = time.asctime(time.localtime(t_next)) print("T next", t_next) self.assertEqual("Wed Jul 14 00:00:00 2010", t_next) july_the_12 = time.mktime( time.strptime("12 Jul 2010 15:00:00", "%d %b %Y %H:%M:%S")) t_inv = timeperiod.get_next_invalid_time_from_t(july_the_12) t_inv = time.asctime(time.localtime(t_inv)) self.assertEqual('Tue Jul 13 00:00:00 2010', t_inv)
def test_mondayweek_timeperiod_with_exclude(self): """ Test monday week timeperiod with exclude :return: None """ now = time.time() # Get the 12 of july 2010 at 15:00, monday july_the_12 = time.mktime( time.strptime("12 Jul 2010 15:00:00", "%d %b %Y %H:%M:%S")) # Then a simple same day timeperiod = Timeperiod() timeperiod.timeperiod_name = 'T1' timeperiod.resolve_daterange(timeperiod.dateranges, 'tuesday 3 16:30-24:00') t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) self.assertEqual("Tue Jul 20 16:30:00 2010", t_next) # Now we add this timeperiod an exception # And a good one: from april (so before) to august (after), and full time. # But the 17 is a tuesday, but the 3 of august, so the next 3 tuesday is # ..... the Tue Sep 21 :) Yes, we should wait quite a lot :) t2 = Timeperiod() t2.timeperiod_name = 'T2' t2.resolve_daterange(t2.dateranges, 'april 1 - august 23 00:00-24:00') timeperiod.exclude = [t2] timeperiod.cache = {} t_next = timeperiod.get_next_valid_time_from_t(july_the_12) t_next = time.asctime(time.localtime(t_next)) self.assertEqual('Tue Sep 21 16:30:00 2010', t_next) t_exclude_inv = t2.get_next_invalid_time_from_t(july_the_12) t_exclude_inv = time.asctime(time.localtime(t_exclude_inv)) self.assertEqual('Tue Aug 24 00:00:00 2010', t_exclude_inv)