from typing import Iterable import pendulum from airflow.models import DagRun from common.config.search import MIN_CHART_DAYS_AGO, MAX_CHART_DAYS_AGO, HISTORICAL_CHART_DAYS_AGO, CHANGE_DAYS,\ LAST_RELEASE_DAYS from .generic import _get_run_datetime __all__ = ["get_min_chart_date", "get_max_chart_date", "get_historical_chart_date", "get_chart_range", "get_change_date", "get_last_release_date"] def _get_date(dag_run: DagRun, days_ago: int) -> pendulum.Date: return _get_run_datetime(dag_run).date() - pendulum.duration(days=days_ago) def get_min_chart_date(dag_run: DagRun) -> pendulum.Date: return _get_date(dag_run, MIN_CHART_DAYS_AGO) def get_max_chart_date(dag_run: DagRun) -> pendulum.Date: return _get_date(dag_run, MAX_CHART_DAYS_AGO) def get_historical_chart_date(dag_run: DagRun) -> pendulum.Date: return _get_date(dag_run, HISTORICAL_CHART_DAYS_AGO) def get_change_date(dag_run: DagRun) -> pendulum.Date: return _get_date(dag_run, CHANGE_DAYS) def get_last_release_date(dag_run: DagRun) -> pendulum.Date: return _get_date(dag_run, LAST_RELEASE_DAYS) def get_chart_range(dag_run: DagRun) -> Iterable[pendulum.Date]: current_date = _get_run_datetime(dag_run).date() for days in range(MIN_CHART_DAYS_AGO, MAX_CHART_DAYS_AGO - 1, -1): yield current_date - pendulum.duration(days=days)