"""Util functions and helpers related to dates and timestamps calculations.""" import datetime def get_prior_date_intervals(date, count=2, length=7): """Get n intervals of length m ending at given date. Starts with an interval with oldest dates, ends with an interval with the latest dates. Args: date (datetime.date): End date count (int): Number of intervals to get. length (int): Number of days in interval. Returns: list: A list of dicts: (dict): Dictionary representing an interval with keys start_date (datetime.date): Start date end_date (datetime.date): End date """ intervals = [] for interval_number in range(1, count + 1): interval = { "start_date": date - datetime.timedelta(days=(length * interval_number) - 1), "end_date": date - datetime.timedelta(days=length * (interval_number - 1)), } intervals.append(interval) return intervals[::-1] def get_time_period(start_date=None, end_date=None, max_available_date=None): """Determine time_period based on max_date or start and end_date. Args: start_date (datetime.date): Start date end_date (datetime.date): End date max_available_date (datetime.date): Max available date Returns: Time period """ if not (start_date and end_date): time_period, *_ = get_prior_date_intervals( max_available_date, count=1, length=28 ) else: time_period, *_ = get_prior_date_intervals( end_date, count=1, length=(end_date - start_date).days + 1 ) return time_period