from datetime import date, timedelta from djagitit.tableau import refresh_extracts from loguru import logger from ..config import ( QUERY_PATHS, TABLES, TABLEAU_DATASOURCE_IDS, TABLEAU_SITE, ) from ..db import get_rdb, get_rdbs from ..db.queries import QueryLoader def _get_dates(rdb, ql: QueryLoader) -> tuple[date, date]: data = rdb.query(ql.load(QUERY_PATHS.date)) return data["base"][0], data["max_s"][0] def _get_date_list(base: date, max_s: date) -> list[date]: delta = max_s - base return [base + timedelta(days=x) for x in range(1, delta.days + 1)] def run_update() -> str | None: """Fill main table day-by-day, rebuild hyper, refresh Tableau.""" logger.info("Starting priority-tracks update") rdb = get_rdb() rdbs = get_rdbs() ql = QueryLoader() base, max_s = _get_dates(rdb, ql) date_list = _get_date_list(base, max_s) if not date_list: logger.info("No new data") return None logger.info(f"Updating {len(date_list)} day(s)") for d in date_list: logger.info(f"Filling {d}") rdbs.execute(ql.load(QUERY_PATHS.fill_main, date=str(d))) rdbs.commit() logger.info("Creating hyper table") rdbs.execute(ql.load(QUERY_PATHS.make_hyper)) rdbs.commit() logger.info("Triggering Tableau extract refresh") refresh_extracts(TABLEAU_DATASOURCE_IDS, site=TABLEAU_SITE) logger.success(f"Priority-tracks updated to {date_list[-1]}") return date_list[-1].strftime("%Y-%m-%d")