def test_date_range_with_timezone_aware_datetimes_other_than_utc(self): """ Check date_range with timezone-aware datetimes other than UTC.""" timezone = pytz.timezone('Europe/Brussels') start = datetime.datetime(1985, 1, 1) end = datetime.datetime(1986, 1, 1) start = timezone.localize(start) end = timezone.localize(end) expected = [ datetime.datetime(1985, 1, 1, 0, 0), datetime.datetime(1985, 2, 1, 0, 0), datetime.datetime(1985, 3, 1, 0, 0), datetime.datetime(1985, 4, 1, 0, 0), datetime.datetime(1985, 5, 1, 0, 0), datetime.datetime(1985, 6, 1, 0, 0), datetime.datetime(1985, 7, 1, 0, 0), datetime.datetime(1985, 8, 1, 0, 0), datetime.datetime(1985, 9, 1, 0, 0), datetime.datetime(1985, 10, 1, 0, 0), datetime.datetime(1985, 11, 1, 0, 0), datetime.datetime(1985, 12, 1, 0, 0), datetime.datetime(1986, 1, 1, 0, 0) ] expected = [timezone.localize(e) for e in expected] dates = [date for date in date_utils.date_range(start, end)] self.assertEqual(expected, dates)
def get_next_windows_start_datetime(self, from_datetime, to_datetime): """Get all delivery windows start time. Range from from_datetime weekday to to_datetime weekday. Note result can include a start datetime that is before from_datetime on the from_datetime weekday :param from_datetime: Datetime object :param to_datetime: Datetime object :return: List of Datetime objects """ res = list() for this_datetime in date_range(from_datetime, to_datetime, timedelta(days=1)): this_weekday_number = this_datetime.weekday() this_weekday = self.env["time.weekday"].search( [("name", "=", this_weekday_number)], limit=1) # Sort by start time to ensure the window we'll find will be the first # one for the weekday this_weekday_windows = self.delivery_time_window_ids.filtered( lambda w: this_weekday in w.time_window_weekday_ids).sorted( "time_window_start") for win in this_weekday_windows: this_weekday_start_datetime = datetime.combine( this_datetime, win.get_time_window_start_time()) res.append(this_weekday_start_datetime) return res
def test_date_range_with_identical_boundaries(self): """ date_range with indentical boundaries. """ start = datetime.datetime(1985, 1, 1) end = datetime.datetime(1985, 1, 1) with self.assertRaises(ValueError): dates = [date for date in date_utils.date_range(start, end)]
def test_date_range_with_timezone_aware_datetimes_other_than_utc(self): """ Check date_range with timezone-aware datetimes other than UTC.""" timezone = pytz.timezone('Europe/Brussels') start = datetime.datetime(1985, 1, 1) end = datetime.datetime(1986, 1, 1) start = timezone.localize(start) end = timezone.localize(end) expected = [datetime.datetime(1985, 1, 1, 0, 0), datetime.datetime(1985, 2, 1, 0, 0), datetime.datetime(1985, 3, 1, 0, 0), datetime.datetime(1985, 4, 1, 0, 0), datetime.datetime(1985, 5, 1, 0, 0), datetime.datetime(1985, 6, 1, 0, 0), datetime.datetime(1985, 7, 1, 0, 0), datetime.datetime(1985, 8, 1, 0, 0), datetime.datetime(1985, 9, 1, 0, 0), datetime.datetime(1985, 10, 1, 0, 0), datetime.datetime(1985, 11, 1, 0, 0), datetime.datetime(1985, 12, 1, 0, 0), datetime.datetime(1986, 1, 1, 0, 0)] expected = [timezone.localize(e) for e in expected] dates = [date for date in date_utils.date_range(start, end)] self.assertEqual(expected, dates)
def get_next_workdays_datetime(self, from_datetime, to_datetime): """Returns all the delivery windows in the provided date range. :param from_datetime: Datetime object :param to_datetime: Datetime object :return: List of Datetime objects """ dates = date_range(from_datetime, to_datetime, timedelta(days=1)) return [date for date in dates if date.weekday() < 5]
def test_date_range_with_inconsistent_datetimes(self): """ Check date_range with a timezone-aware datetime and a naive one.""" context_timezone = pytz.timezone('Europe/Brussels') start = datetime.datetime(1985, 1, 1) end = datetime.datetime(1986, 1, 1) end = context_timezone.localize(end) with self.assertRaises(ValueError): dates = [date for date in date_utils.date_range(start, end)]
def test_date_range_with_inconsistent_datetimes(self): """ Check date_range with a timezone-aware datetime and a naive one.""" context_timezone = pytz.timezone('Europe/Brussels') start = datetime.datetime(1985, 1, 1) end = datetime.datetime(1986, 1, 1) end = context_timezone.localize(end) with self.assertRaises(ValueError): dates = [date for date in date_utils.date_range(start, end)]
def test_date_range_with_mismatching_zones(self): """ Check date_range with mismatching zone should raise an exception.""" start_timezone = pytz.timezone('Europe/Brussels') end_timezone = pytz.timezone('America/Recife') start = datetime.datetime(1985, 1, 1) end = datetime.datetime(1986, 1, 1) start = start_timezone.localize(start) end = end_timezone.localize(end) with self.assertRaises(ValueError): dates = [date for date in date_utils.date_range(start, end)]
def test_date_range_with_mismatching_zones(self): """ Check date_range with mismatching zone should raise an exception.""" start_timezone = pytz.timezone('Europe/Brussels') end_timezone = pytz.timezone('America/Recife') start = datetime.datetime(1985, 1, 1) end = datetime.datetime(1986, 1, 1) start = start_timezone.localize(start) end = end_timezone.localize(end) with self.assertRaises(ValueError): dates = [date for date in date_utils.date_range(start, end)]
def test_date_range_with_hour(self): """ Test date range with hour and naive datetime.""" start = datetime.datetime(2018, 3, 25) end = datetime.datetime(2018, 3, 26) step = relativedelta(hours=1) expected = [ datetime.datetime(2018, 3, 25, 0, 0), datetime.datetime(2018, 3, 25, 1, 0), datetime.datetime(2018, 3, 25, 2, 0), datetime.datetime(2018, 3, 25, 3, 0), datetime.datetime(2018, 3, 25, 4, 0), datetime.datetime(2018, 3, 25, 5, 0), datetime.datetime(2018, 3, 25, 6, 0), datetime.datetime(2018, 3, 25, 7, 0), datetime.datetime(2018, 3, 25, 8, 0), datetime.datetime(2018, 3, 25, 9, 0), datetime.datetime(2018, 3, 25, 10, 0), datetime.datetime(2018, 3, 25, 11, 0), datetime.datetime(2018, 3, 25, 12, 0), datetime.datetime(2018, 3, 25, 13, 0), datetime.datetime(2018, 3, 25, 14, 0), datetime.datetime(2018, 3, 25, 15, 0), datetime.datetime(2018, 3, 25, 16, 0), datetime.datetime(2018, 3, 25, 17, 0), datetime.datetime(2018, 3, 25, 18, 0), datetime.datetime(2018, 3, 25, 19, 0), datetime.datetime(2018, 3, 25, 20, 0), datetime.datetime(2018, 3, 25, 21, 0), datetime.datetime(2018, 3, 25, 22, 0), datetime.datetime(2018, 3, 25, 23, 0), datetime.datetime(2018, 3, 26, 0, 0) ] dates = [date for date in date_utils.date_range(start, end, step)] self.assertEqual(dates, expected)
def test_date_range_with_hour(self): """ Test date range with hour and naive datetime.""" start = datetime.datetime(2018, 3, 25) end = datetime.datetime(2018, 3, 26) step = relativedelta(hours=1) expected = [ datetime.datetime(2018, 3, 25, 0, 0), datetime.datetime(2018, 3, 25, 1, 0), datetime.datetime(2018, 3, 25, 2, 0), datetime.datetime(2018, 3, 25, 3, 0), datetime.datetime(2018, 3, 25, 4, 0), datetime.datetime(2018, 3, 25, 5, 0), datetime.datetime(2018, 3, 25, 6, 0), datetime.datetime(2018, 3, 25, 7, 0), datetime.datetime(2018, 3, 25, 8, 0), datetime.datetime(2018, 3, 25, 9, 0), datetime.datetime(2018, 3, 25, 10, 0), datetime.datetime(2018, 3, 25, 11, 0), datetime.datetime(2018, 3, 25, 12, 0), datetime.datetime(2018, 3, 25, 13, 0), datetime.datetime(2018, 3, 25, 14, 0), datetime.datetime(2018, 3, 25, 15, 0), datetime.datetime(2018, 3, 25, 16, 0), datetime.datetime(2018, 3, 25, 17, 0), datetime.datetime(2018, 3, 25, 18, 0), datetime.datetime(2018, 3, 25, 19, 0), datetime.datetime(2018, 3, 25, 20, 0), datetime.datetime(2018, 3, 25, 21, 0), datetime.datetime(2018, 3, 25, 22, 0), datetime.datetime(2018, 3, 25, 23, 0), datetime.datetime(2018, 3, 26, 0, 0) ] dates = [date for date in date_utils.date_range(start, end, step)] self.assertEqual(dates, expected)
def test_date_range_with_naive_datetimes(self): """ Check date_range with naive datetimes. """ start = datetime.datetime(1985, 1, 1) end = datetime.datetime(1986, 1, 1) expected = [ datetime.datetime(1985, 1, 1, 0, 0), datetime.datetime(1985, 2, 1, 0, 0), datetime.datetime(1985, 3, 1, 0, 0), datetime.datetime(1985, 4, 1, 0, 0), datetime.datetime(1985, 5, 1, 0, 0), datetime.datetime(1985, 6, 1, 0, 0), datetime.datetime(1985, 7, 1, 0, 0), datetime.datetime(1985, 8, 1, 0, 0), datetime.datetime(1985, 9, 1, 0, 0), datetime.datetime(1985, 10, 1, 0, 0), datetime.datetime(1985, 11, 1, 0, 0), datetime.datetime(1985, 12, 1, 0, 0), datetime.datetime(1986, 1, 1, 0, 0) ] dates = [date for date in date_utils.date_range(start, end)] self.assertEqual(dates, expected)
def test_date_range_with_naive_datetimes(self): """ Check date_range with naive datetimes. """ start = datetime.datetime(1985, 1, 1) end = datetime.datetime(1986, 1, 1) expected = [ datetime.datetime(1985, 1, 1, 0, 0), datetime.datetime(1985, 2, 1, 0, 0), datetime.datetime(1985, 3, 1, 0, 0), datetime.datetime(1985, 4, 1, 0, 0), datetime.datetime(1985, 5, 1, 0, 0), datetime.datetime(1985, 6, 1, 0, 0), datetime.datetime(1985, 7, 1, 0, 0), datetime.datetime(1985, 8, 1, 0, 0), datetime.datetime(1985, 9, 1, 0, 0), datetime.datetime(1985, 10, 1, 0, 0), datetime.datetime(1985, 11, 1, 0, 0), datetime.datetime(1985, 12, 1, 0, 0), datetime.datetime(1986, 1, 1, 0, 0) ] dates = [date for date in date_utils.date_range(start, end)] self.assertEqual(dates, expected)
date_utils.end_of(today, 'hour') # 2019-03-29 01:59:59.999999 date_utils.end_of(today, 'day') # 2019-03-29 23:59:59.999999 date_utils.end_of(today, 'week') # 2019-03-31 23:59:59.999999 date_utils.end_of(today, 'month') # 2019-03-31 23:59:59.999999 date_utils.end_of(today, 'quarter') # 2019-03-31 23:59:59.999999 date_utils.end_of(today, 'year') # 2019-12-31 23:59:59.999999 for date in date_utils.date_range(start=today, end=date_utils.add(today, days=15), step=relativedelta(days=1)): print(date) # 2019-03-29 01:53:48 # 2019-03-30 01:53:48 # 2019-03-31 01:53:48 # 2019-04-01 01:53:48 # 2019-04-02 01:53:48 # 2019-04-03 01:53:48 # 2019-04-04 01:53:48 # 2019-04-05 01:53:48 # 2019-04-06 01:53:48 # 2019-04-07 01:53:48 # 2019-04-08 01:53:48 # 2019-04-09 01:53:48 # 2019-04-10 01:53:48