canvod.airflow API Reference¶
Package¶
canvod-airflow: Airflow DAG definitions for canvodpy GNSS-T pipelines.
See daily_processing.py (one daily DAG per site) and
backfill.py (manual date-range backfill DAG). No pipeline logic lives
here; every task wraps a stateless function from canvodpy.workflows.tasks.
daily_processing.py and backfill.py import airflow at module
level — they require the airflow extra (canvod-airflow[airflow])
to import at all, since these modules only ever run inside an Airflow
scheduler process. canvodpy-side config/task imports are deferred
inside each DAG-construction function instead, so a missing or
misconfigured canvodpy config doesn't crash DAG parsing.
Why the DAG modules aren't auto-generated below
daily_processing.py and backfill.py import airflow at module level
(required to actually build TaskFlow DAGs), so mkdocstrings can't safely
import them in an environment without Airflow installed. Their public
interface is documented by hand below instead.
daily_processing¶
Per-site @daily DAG factories, called dynamically for every site
configured in canvodpy's sites.yaml.
create_sbf_dag(site_name: str)¶
Builds canvod_{site_name}_sbf — broadcast-ephemeris DAG, same-day results.
Chain: validate_dirs → check_sbf → process_sbf → validate_ingest → calculate_vod → cleanup.
create_rinex_dag(site_name: str)¶
Builds canvod_{site_name}_rinex — agency SP3/CLK ephemeris DAG. Chain:
validate_dirs → {wait_for_rinex, wait_for_sp3} → fetch_aux_data → process_rinex → validate_ingest → calculate_vod → cleanup.
create_sbf_agency_dag(site_name: str)¶
Builds canvod_{site_name}_sbf_agency — SBF observables with agency
geometry. Chain: validate_dirs → {check_sbf, wait_for_sp3} → fetch_aux_data → process_sbf → validate_ingest → calculate_vod → cleanup.
backfill¶
canvod_backfill¶
Manually-triggered DAG accepting site, branch (sbf/rinex/sbf_agency),
start_date, and end_date (YYYYDDD format) as Params. Expands the date
range into one dynamically-mapped process_day task per date, serialized
via max_active_tis_per_dagrun=1.
See the Overview for full usage examples.