"""Feed Status Monitor utils.""" import collections import datetime from datetime import date, timedelta from dateutil.relativedelta import relativedelta from feed_status import config EMPTY_VALUE = '--' ONE_DAY = datetime.timedelta(days=1) def generate_default_date_dict_range( from_date: datetime.date, to_date: datetime.date): """Generate default date dict range.""" assert from_date < to_date current_date = to_date default_days = collections.OrderedDict() while current_date > from_date: default_days[str(current_date)] = EMPTY_VALUE current_date -= ONE_DAY return default_days def generate_default_month_date_dict_range( from_date: datetime.date, to_date: datetime.date, ): """Generate default date dict range.""" assert from_date < to_date first_month = from_date.replace(day=1) end_month = to_date.replace(day=1) delta = relativedelta(end_month, first_month) return collections.OrderedDict( { str(end_month - relativedelta(months=m)): EMPTY_VALUE for m in range(delta.years*12+delta.months) } ) def get_start_date(): """Return stating date of feed_statuses displayed on dashboard.""" return str(date.today() - timedelta(days=config.DASHBOARD_DISPLAYED_DAYS)) def set_date_range_for_feeds(ingestion_feeds, dates): """Produce the same date range for all feeds.""" for feed in ingestion_feeds: for dt in dates - set(feed.status.keys()): feed.status[dt] = EMPTY_VALUE feed.status = collections.OrderedDict( sorted( feed.status.items(), reverse=True, ) ) return ingestion_feeds