"""Logic for max available date.""" import datetime from sound_recordings.constants.parameters import ALL_TIME from sound_recordings.models import data_availability HIGHWATERMARK_DATE = "HIGHWATERMARK" def _get_max_available_date(downloads): if downloads: return data_availability.get_downloads_max_available_date() return data_availability.get_max_available_date() def get_date_range(start_date, days, downloads=False): """Return date range based on start date, highwatermark and days. Args: start_date (string): Start date or highwatermark key word days (int): number of days downloads (bool): get max available date for downloads videos (bool): get max available date for video views Returns: start_date (datetime.date): Start date end_date (datetime.date): End date """ is_highwater_mark = start_date == HIGHWATERMARK_DATE is_all_time = is_highwater_mark and days == 0 abs_start_date = datetime.datetime.strptime( _get_max_available_date(downloads) if is_highwater_mark else start_date, "%Y-%m-%d", ).date() if is_all_time: abs_end_date = abs_start_date abs_start_date = ALL_TIME elif days < 0: abs_end_date = abs_start_date abs_start_date += datetime.timedelta(days=days + 1) elif is_highwater_mark: abs_end_date = abs_start_date abs_start_date -= datetime.timedelta(days=days - 1) else: abs_end_date = abs_start_date + datetime.timedelta(days=days - 1) return abs_start_date, abs_end_date def get_max_available_date(): """Return max available date for all stores. Returns: max_available_date (datetime.date): Max available date """ return datetime.datetime.strptime( data_availability.get_max_available_date(), "%Y-%m-%d" ).date() def get_downloads_max_available_date(): """Return max available date for all download stores. Returns: max_available_date (datetime.date): Max available date """ return datetime.datetime.strptime( data_availability.get_downloads_max_available_date(), "%Y-%m-%d" ).date()