Source code for airflow_config.testing

"""Assertions for configuration models without an Airflow database."""

from collections.abc import Collection

from airflow_pydantic import Dag

from .configuration import Configuration

__all__ = ("assert_dag_ids", "assert_task_ids", "assert_task_type")


[docs] def assert_dag_ids(config: Configuration, expected: Collection[str]) -> None: """Assert the exact set of DAG keys in a configuration.""" actual, expected = set(config.dags), set(expected) assert actual == expected, f"DAG IDs differ: missing={sorted(expected - actual)}; unexpected={sorted(actual - expected)}"
[docs] def assert_task_ids(dag: Dag, expected: Collection[str]) -> None: """Assert the exact set of task keys in a DAG model.""" actual, expected = set(dag.tasks or {}), set(expected) assert actual == expected, f"DAG {dag.dag_id!r} task IDs differ: missing={sorted(expected - actual)}; unexpected={sorted(actual - expected)}"
[docs] def assert_task_type(dag: Dag, task_id: str, expected: type) -> None: """Assert a task model type or an installed Airflow operator base class.""" tasks = dag.tasks or {} assert task_id in tasks, f"Task {task_id!r} missing from DAG {dag.dag_id!r}; available={sorted(tasks)}" task = tasks[task_id] assert isinstance(task, expected) or issubclass(task.operator, expected), ( f"DAG {dag.dag_id!r} task {task_id!r} has model {type(task).__name__} and operator {task.operator.__name__}; expected {expected.__name__}" )