Common Compatibility Provider - providing compatibility code for previous Airflow versions
npx @tessl/cli install tessl/pypi-apache-airflow-providers-common-compat@1.7.0A compatibility provider package that provides backward compatibility utilities and shims for Apache Airflow to maintain compatibility across different Airflow versions. It includes compatibility modules for standard operators, triggers, utilities, asset/dataset handling, lineage tracking, security permissions, and OpenLineage integration to ensure smooth migrations between Airflow versions.
pip install apache-airflow-providers-common-compatfrom airflow.providers.common.compat import __version__Common compatibility utilities:
from airflow.providers.common.compat.version_compat import (
AIRFLOW_V_3_0_PLUS,
AIRFLOW_V_3_1_PLUS,
BaseOperator
)Assets/Dataset compatibility:
from airflow.providers.common.compat.assets import Asset, AssetAliasfrom airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator
from airflow.providers.common.compat.assets import Asset
from airflow.providers.common.compat.check import require_provider_version
# Check Airflow version compatibility
if AIRFLOW_V_3_0_PLUS:
# Use Airflow 3.0+ features
pass
# Use version-compatible BaseOperator
class MyOperator(BaseOperator):
def execute(self, context):
pass
# Create assets with version compatibility
my_asset = Asset("s3://bucket/data.csv")
# Require minimum provider version
@require_provider_version("apache-airflow-providers-openlineage", "1.0.1")
def my_function():
passThe package provides compatibility across Airflow versions through several key patterns:
Package version and metadata constants.
__version__: strCore utilities for detecting Airflow versions and importing version-appropriate modules, including version constants and compatible BaseOperator imports.
def get_base_airflow_version_tuple() -> tuple[int, int, int]: ...
AIRFLOW_V_3_0_PLUS: bool
AIRFLOW_V_3_1_PLUS: bool
BaseOperator: typeVersion-compatible asset and dataset handling with support for asset aliases, collections, and authorization details that work across Airflow versions.
class Asset: ...
class AssetAlias: ...
class AssetAll: ...
class AssetAny: ...
def expand_alias_to_assets(...): ...Decorators and utilities for enforcing minimum version requirements of provider packages and optional dependencies like OpenLineage.
def require_provider_version(provider_name: str, provider_min_version: str): ...
def require_openlineage_version(provider_min_version: str | None = None, client_min_version: str | None = None): ...Data lineage entities including files, users, tables, columns, and tags with template field support for dynamic content rendering.
class File: ...
class User: ...
class Table: ...
class Column: ...
class Tag: ...
def default_if_none(arg: bool | None) -> bool: ...Lineage collection utilities:
def get_hook_lineage_collector(): ...Version-compatible standard Airflow operators, triggers, and utilities including PythonOperator, TimeDeltaTrigger, and virtualenv preparation functions.
class PythonOperator(BaseOperator): ...
class ShortCircuitOperator(BaseOperator): ...
class TimeDeltaTrigger: ...
def get_current_context(): ...OpenLineage facets, utilities, and compatibility functions for data lineage tracking, including SQL and Spark integration utilities.
class BaseFacet: ...
class Dataset: ...
class RunFacet: ...
def get_openlineage_facets_with_sql(...): ...
def inject_parent_job_information_into_spark_properties(...): ...Security resource constants for assets, backfills, and DAG versions that maintain compatibility across Airflow security model changes.
RESOURCE_ASSET: str
RESOURCE_ASSET_ALIAS: str
RESOURCE_BACKFILL: str
RESOURCE_DAG_VERSION: strVersion-compatible base notifier class for creating custom notification handlers that work across different Airflow versions.
class BaseNotifier: ...