apache-airflow-task-sdk 1.2.2rc2__tar.gz → 1.3.0b1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/.pre-commit-config.yaml +3 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/PKG-INFO +4 -2
- apache_airflow_task_sdk-1.3.0b1/docs/airflow-metadata.schema.json +70 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/api.rst +77 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/conf.py +3 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/deferred-vs-async-operators.rst +9 -0
- apache_airflow_task_sdk-1.3.0b1/docs/executable-bundle-spec.rst +359 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/index.rst +7 -0
- apache_airflow_task_sdk-1.3.0b1/docs/resumable-job-mixin.rst +167 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/pyproject.toml +10 -3
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/__init__.py +85 -3
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/__init__.pyi +50 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/configuration/parser.py +1 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/listener.py +47 -1
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/_shared/logging/factory.py +182 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/remote.py +1 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/module_loading/__init__.py +32 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/_shared/module_loading/dag_file.py +23 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/common.py +16 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/base_stats_logger.py +1 -3
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/datadog_logger.py +5 -6
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/metrics_template.yaml +152 -10
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/otel_logger.py +80 -16
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/protocols.py +6 -4
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/_shared/observability/metrics/stats.py +329 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/statsd_logger.py +4 -4
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/traces/__init__.py +33 -2
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/providers_discovery/providers_discovery.py +2 -2
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/secrets_backend/base.py +39 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/secrets_masker/secrets_masker.py +10 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/serialization/__init__.py +1 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/_shared/state/__init__.py +308 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/client.py +242 -15
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/datamodels/_generated.py +132 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/operator.py +42 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/bases/resumablejobmixin.py +235 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/sensor.py +3 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/timetable.py +8 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/xcom.py +2 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/configuration.py +42 -2
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/__init__.py +19 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/_subprocess.py +410 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/executable/__init__.py +25 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/executable/coordinator.py +395 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/java/__init__.py +27 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/java/coordinator.py +231 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/abstractoperator.py +2 -77
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/templater.py +84 -10
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/asset/__init__.py +11 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/asset/access_control.py +43 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/asset/decorators.py +7 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/connection.py +31 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/context.py +8 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/dag.py +76 -28
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/deadline.py +63 -2
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/__init__.py +4 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/task_group.py +7 -2
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/mappedoperator.py +26 -7
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/operator_resources.py +8 -8
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/param.py +7 -3
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/allowed_key.py +4 -2
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/base.py +93 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/chain.py +7 -1
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/fixed_key.py +52 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/product.py +12 -2
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/temporal.py +210 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/wait_policy.py +74 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/window.py +170 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/retry_policy.py +344 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/taskgroup.py +163 -46
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/_cron.py +18 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/assets.py +7 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/variable.py +25 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/exceptions.py +54 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/callback_runner.py +1 -1
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/callback_supervisor.py +460 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/comms.py +191 -20
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/connection_test_supervisor.py +130 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/context.py +494 -4
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/coordinator.py +246 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/execute_workload.py +3 -23
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/request_handlers.py +274 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/AGENTS.md +122 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/__init__.py +128 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/migrator.py +215 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/schema.json +4879 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/versions/__init__.py +25 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/sentry/configured.py +14 -10
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/supervisor.py +451 -213
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/task_runner.py +352 -73
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/timeout.py +9 -6
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/xcom.py +2 -2
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/fs.py +2 -2
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/log.py +9 -32
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/datadog_logger.py +1 -2
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/stats_utils.py +2 -3
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/stats.py +20 -3
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/plugins_manager.py +3 -3
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/providers_manager_runtime.py +55 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/__init__.py +95 -5
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/datetime.py +6 -0
- apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/state.py +25 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/types.py +41 -6
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/api/test_client.py +315 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_operator.py +20 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/bases/test_resumablejobmixin.py +341 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_sensor.py +14 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/executable/test_coordinator.py +505 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/java/test_coordinator.py +388 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/test_subprocess.py +789 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/dags/signal_forward_test.py +44 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/_internal/test_templater.py +333 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/decorators/test_task_group.py +56 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_asset.py +22 -2
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/test_asset_access_control.py +101 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_asset_decorators.py +54 -14
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_connection.py +9 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_dag.py +55 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_deadline.py +51 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_mappedoperator.py +2 -2
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_operator_resources.py +38 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_param.py +33 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/test_partition_mappers.py +205 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/test_retry_policy.py +405 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_taskgroup.py +266 -2
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_variables.py +104 -1
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/test_wait_policy.py +56 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_xcom_arg.py +1 -1
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/timetables/test__cron.py +64 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/docs/__init__.py +16 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/docs/test_docs_inventory.py +0 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/docs/test_public_api.py +12 -10
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/__init__.py +16 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/schema/__init__.py +16 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/schema/_mock_version_bundle.py +189 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/schema/test_integration.py +338 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/schema/test_migrator.py +336 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_callback_supervisor.py +530 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_comms.py +23 -8
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_connection_test_supervisor.py +264 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_context.py +844 -2
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_coordinator.py +122 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_sentry.py +65 -12
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_supervisor.py +710 -26
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_supervisor_schemas_name_type_sync.py +78 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_task_runner.py +1038 -32
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_timeout.py +77 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/io/__init__.py +16 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/serde/__init__.py +16 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/serde/test_serde.py +95 -1
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/serde/test_serializers.py +18 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/test_configuration.py +27 -0
- apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/test_exceptions.py +43 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/test_providers_manager_runtime.py +69 -1
- apache_airflow_task_sdk-1.2.2rc2/src/airflow/sdk/_shared/observability/metrics/dual_stats_manager.py +0 -282
- apache_airflow_task_sdk-1.2.2rc2/src/airflow/sdk/_shared/observability/metrics/stats.py +0 -133
- apache_airflow_task_sdk-1.2.2rc2/src/airflow/sdk/definitions/partition_mappers/base.py +0 -25
- apache_airflow_task_sdk-1.2.2rc2/src/airflow/sdk/definitions/partition_mappers/temporal.py +0 -67
- apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions/_internal/test_templater.py +0 -145
- apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/test_log.py +0 -120
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/.gitignore +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/LICENSE +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/NOTICE +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/README.md +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/dev/datamodel_code_formatter.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/dev/generate_task_sdk_models.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/.gitignore +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/concepts.rst +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/dynamic-task-mapping.rst +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/examples.rst +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/img/airflow-2-approach.png +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/img/airflow-2-arch.png +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/img/airflow-3-arch.png +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/img/airflow-3-task-sdk.png +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/configuration/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/configuration/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/dagnode/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/dagnode/node.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/spec/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/spec/lifecycle.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/spec/taskinstance.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/_config.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/_noncaching.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/percent_formatter.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/structlog.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/types.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/module_loading/file_discovery.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/metrics_registry.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/validators.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/otel_env_config.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/plugins_manager/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/plugins_manager/plugins_manager.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/providers_discovery/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/secrets_backend/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/secrets_masker/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/template_rendering/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/timezones/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/timezones/timezone.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/datamodels/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/datamodels/activities.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/branch.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/decorator.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/hook.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/notifier.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/operatorlink.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/secrets_backend.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/skipmixin.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/crypto.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/contextmanager.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/dag_parsing_context.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/decorators.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/expandinput.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/logging_mixin.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/mixins.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/node.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/types.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/asset/metadata.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/callback.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/__init__.pyi +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/condition.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/edges.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/identity.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/template.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/_delta.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/events.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/interval.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/simple.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/trigger.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/xcom_arg.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/cache.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/hitl.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/lazy_sequence.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/macros.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/secrets/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/secrets/execution_api.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/secrets_masker.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/sentry/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/sentry/noop.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/task_mapping.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/path.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/stat.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/store.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/typedef.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/lineage.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/listener.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/module_loading.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/otel_logger.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/statsd_logger.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/py.typed +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/bignum.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/builtin.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/deltalake.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/iceberg.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/kubernetes.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/numpy.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/pandas.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/pydantic.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/timezone.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/uuid.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/typing.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/timezone.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/yaml.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/conftest.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/api/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/notifier/test_notifier.txt +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_branch.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_decorator.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_hook.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_notifier.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_skipmixin.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_xcom.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions/_internal → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/executable}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions/decorators → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/java}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/dags/dag_parsing_context.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/dags/super_basic.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/dags/super_basic_deferred_run.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/dags/super_basic_run.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions/sensors → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/docs → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/_internal}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/_internal/test_decorators.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/conftest.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/execution_time → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/decorators}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/decorators/test_condition.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/decorators/test_mapped.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/decorators/test_setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/io → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/sensors}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_callback.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_context.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_macros.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_mixins.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_module_loading.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_template.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/serde → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/timetables}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/conftest.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_cache.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_context_cache.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_hitl.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_lazy_sequence.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_secrets.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_task_mapping.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/io/test_path.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/test_crypto.py +0 -0
- {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/test_lineage.py +0 -0
{apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/.pre-commit-config.yaml
RENAMED
|
@@ -43,8 +43,11 @@ repos:
|
|
|
43
43
|
^src/airflow/sdk/definitions/deadline\.py$|
|
|
44
44
|
^src/airflow/sdk/definitions/dag\.py$|
|
|
45
45
|
^src/airflow/sdk/definitions/_internal/types\.py$|
|
|
46
|
+
^src/airflow/sdk/execution_time/callback_supervisor\.py$|
|
|
46
47
|
^src/airflow/sdk/execution_time/execute_workload\.py$|
|
|
47
48
|
^src/airflow/sdk/execution_time/secrets_masker\.py$|
|
|
49
|
+
^src/airflow/sdk/execution_time/connection_test_supervisor\.py$|
|
|
50
|
+
^src/airflow/sdk/execution_time/schema/__init__\.py$|
|
|
48
51
|
^src/airflow/sdk/execution_time/supervisor\.py$|
|
|
49
52
|
^src/airflow/sdk/execution_time/task_runner\.py$|
|
|
50
53
|
^src/airflow/sdk/serde/serializers/kubernetes\.py$|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-task-sdk
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.0b1
|
|
4
4
|
Summary: Python Task SDK for Apache Airflow DAG Authors
|
|
5
5
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
6
6
|
Project-URL: Documentation, https://airflow.staged.apache.org/docs/
|
|
@@ -29,7 +29,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
29
29
|
Classifier: Programming Language :: Python :: 3.14
|
|
30
30
|
Classifier: Topic :: System :: Monitoring
|
|
31
31
|
Requires-Python: !=3.15,>=3.10
|
|
32
|
-
Requires-Dist: apache-airflow-core<3.
|
|
32
|
+
Requires-Dist: apache-airflow-core<3.4.0,>=3.3.0b1
|
|
33
33
|
Requires-Dist: asgiref>=2.3.0; python_version < '3.14'
|
|
34
34
|
Requires-Dist: asgiref>=3.11.1; python_version >= '3.14'
|
|
35
35
|
Requires-Dist: attrs!=25.2.0,>=24.2.0
|
|
@@ -39,10 +39,12 @@ Requires-Dist: fsspec>=2023.10.0
|
|
|
39
39
|
Requires-Dist: greenback>=1.2.1
|
|
40
40
|
Requires-Dist: httpx>=0.27.0
|
|
41
41
|
Requires-Dist: importlib-metadata>=6.5; python_version < '3.12'
|
|
42
|
+
Requires-Dist: isoduration>=20.11.0
|
|
42
43
|
Requires-Dist: jinja2>=3.1.5
|
|
43
44
|
Requires-Dist: jsonschema>=4.19.1
|
|
44
45
|
Requires-Dist: methodtools>=0.4.7
|
|
45
46
|
Requires-Dist: msgspec>=0.19.0
|
|
47
|
+
Requires-Dist: opentelemetry-api>=1.27.0
|
|
46
48
|
Requires-Dist: packaging>=25.0
|
|
47
49
|
Requires-Dist: pathspec>=0.9.0
|
|
48
50
|
Requires-Dist: pendulum>=3.1.0
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://airflow.apache.org/schemas/sdk-executable/airflow-metadata-1.0.schema.json",
|
|
4
|
+
"title": "Airflow Executable SDK Bundle Metadata",
|
|
5
|
+
"description": "Build-time manifest declaring DAG and task identifiers exposed by an Airflow native-executable SDK bundle. See the Executable Bundle Spec documentation in the Airflow Task SDK.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["airflow_bundle_metadata_version", "sdk", "source", "dags"],
|
|
8
|
+
"additionalProperties": true,
|
|
9
|
+
"properties": {
|
|
10
|
+
"airflow_bundle_metadata_version": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "Bundle-spec version this manifest conforms to (currently '1.0').",
|
|
13
|
+
"pattern": "^[0-9]+\\.[0-9]+(\\.[0-9]+)?$"
|
|
14
|
+
},
|
|
15
|
+
"sdk": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"description": "Identifies the SDK that produced the bundle.",
|
|
18
|
+
"required": ["language", "version", "supervisor_schema_version"],
|
|
19
|
+
"additionalProperties": true,
|
|
20
|
+
"properties": {
|
|
21
|
+
"language": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Lower-case source-language identifier (e.g. 'go', 'rust', 'cpp', 'zig').",
|
|
24
|
+
"pattern": "^[a-z][a-z0-9_+.\\-]*$"
|
|
25
|
+
},
|
|
26
|
+
"version": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "SDK version used at build time.",
|
|
29
|
+
"minLength": 1
|
|
30
|
+
},
|
|
31
|
+
"supervisor_schema_version": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Dated supervisor wire-schema version the bundle was compiled against (e.g. '2026-06-16'). The coordinator passes this value to the supervisor so it can downgrade outbound messages / upgrade inbound messages to a shape the bundle understands.",
|
|
34
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"source": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"description": "Original filename of the primary DAG source file (e.g. 'example.go'). The file's bytes are embedded in the bundle's source region; this field is a display name used by the Airflow UI.",
|
|
41
|
+
"minLength": 1
|
|
42
|
+
},
|
|
43
|
+
"dags": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"description": "Mapping of dag_id to DAG entry. Every dag_id the bundle exposes must appear here.",
|
|
46
|
+
"minProperties": 1,
|
|
47
|
+
"additionalProperties": {
|
|
48
|
+
"$ref": "#/$defs/dagEntry"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"$defs": {
|
|
53
|
+
"dagEntry": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"description": "Static description of a single DAG declared in the bundle.",
|
|
56
|
+
"required": ["tasks"],
|
|
57
|
+
"additionalProperties": true,
|
|
58
|
+
"properties": {
|
|
59
|
+
"tasks": {
|
|
60
|
+
"type": "array",
|
|
61
|
+
"description": "Static list of task_ids declared in the DAG.",
|
|
62
|
+
"items": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"minLength": 1
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -99,6 +99,8 @@ Bases
|
|
|
99
99
|
|
|
100
100
|
.. autoapiclass:: airflow.sdk.SkipMixin
|
|
101
101
|
|
|
102
|
+
.. autoclass:: airflow.sdk.ResumableJobMixin
|
|
103
|
+
|
|
102
104
|
.. autoapiclass:: airflow.sdk.BaseHook
|
|
103
105
|
|
|
104
106
|
Callbacks
|
|
@@ -139,6 +141,22 @@ Tasks & Operators
|
|
|
139
141
|
|
|
140
142
|
.. autoapifunction:: airflow.sdk.get_parsing_context
|
|
141
143
|
|
|
144
|
+
Retry Policies
|
|
145
|
+
--------------
|
|
146
|
+
Retry policies let you configure per-exception retry behaviour as a parameter on any
|
|
147
|
+
task or operator without modifying task code. See the Retry Policies section of the
|
|
148
|
+
Tasks page in the core docs for usage and design rationale.
|
|
149
|
+
|
|
150
|
+
.. autoapiclass:: airflow.sdk.RetryPolicy
|
|
151
|
+
|
|
152
|
+
.. autoapiclass:: airflow.sdk.ExceptionRetryPolicy
|
|
153
|
+
|
|
154
|
+
.. autoapiclass:: airflow.sdk.RetryRule
|
|
155
|
+
|
|
156
|
+
.. autoapiclass:: airflow.sdk.RetryDecision
|
|
157
|
+
|
|
158
|
+
.. autoclass:: airflow.sdk.RetryAction
|
|
159
|
+
|
|
142
160
|
State Enums
|
|
143
161
|
-----------
|
|
144
162
|
.. autoclass:: airflow.sdk.TaskInstanceState
|
|
@@ -165,6 +183,8 @@ Assets
|
|
|
165
183
|
------
|
|
166
184
|
.. autoapiclass:: airflow.sdk.Asset
|
|
167
185
|
|
|
186
|
+
.. autoapiclass:: airflow.sdk.AssetAccessControl
|
|
187
|
+
|
|
168
188
|
.. autoapiclass:: airflow.sdk.AssetAlias
|
|
169
189
|
|
|
170
190
|
.. autoapiclass:: airflow.sdk.AssetAll
|
|
@@ -193,6 +213,8 @@ Timetables
|
|
|
193
213
|
|
|
194
214
|
.. autoapiclass:: airflow.sdk.MultipleCronTriggerTimetable
|
|
195
215
|
|
|
216
|
+
.. autoapiclass:: airflow.sdk.PartitionAtRuntime
|
|
217
|
+
|
|
196
218
|
.. autoapiclass:: airflow.sdk.PartitionedAssetTimetable
|
|
197
219
|
|
|
198
220
|
|
|
@@ -217,14 +239,64 @@ Partition Mapper
|
|
|
217
239
|
|
|
218
240
|
.. autoapiclass:: airflow.sdk.StartOfYearMapper
|
|
219
241
|
|
|
242
|
+
.. autoapiclass:: airflow.sdk.RollupMapper
|
|
243
|
+
|
|
244
|
+
.. autoapiclass:: airflow.sdk.WaitForAll
|
|
245
|
+
|
|
246
|
+
.. autoapiclass:: airflow.sdk.MinimumCount
|
|
247
|
+
|
|
220
248
|
.. autoapiclass:: airflow.sdk.ProductMapper
|
|
221
249
|
|
|
222
250
|
.. autoapiclass:: airflow.sdk.AllowedKeyMapper
|
|
223
251
|
|
|
252
|
+
.. autoapiclass:: airflow.sdk.FanOutMapper
|
|
253
|
+
|
|
254
|
+
.. autoapiclass:: airflow.sdk.FixedKeyMapper
|
|
255
|
+
|
|
256
|
+
Rollup Windows
|
|
257
|
+
~~~~~~~~~~~~~~
|
|
258
|
+
|
|
259
|
+
.. autoapiclass:: airflow.sdk.Window
|
|
260
|
+
|
|
261
|
+
.. autoapiclass:: airflow.sdk.HourWindow
|
|
262
|
+
|
|
263
|
+
.. autoapiclass:: airflow.sdk.DayWindow
|
|
264
|
+
|
|
265
|
+
.. autoapiclass:: airflow.sdk.WeekWindow
|
|
266
|
+
|
|
267
|
+
.. autoapiclass:: airflow.sdk.MonthWindow
|
|
268
|
+
|
|
269
|
+
.. autoapiclass:: airflow.sdk.QuarterWindow
|
|
270
|
+
|
|
271
|
+
.. autoapiclass:: airflow.sdk.YearWindow
|
|
272
|
+
|
|
273
|
+
.. autoapiclass:: airflow.sdk.SegmentWindow
|
|
274
|
+
|
|
224
275
|
I/O Helpers
|
|
225
276
|
-----------
|
|
226
277
|
.. autoapiclass:: airflow.sdk.ObjectStoragePath
|
|
227
278
|
|
|
279
|
+
Lineage
|
|
280
|
+
-------
|
|
281
|
+
The ``lineage`` module is available as part of the Task SDK. It provides the public hook lineage
|
|
282
|
+
collector interfaces used to capture and retrieve asset lineage metadata during task execution.
|
|
283
|
+
|
|
284
|
+
.. autoapimodule:: airflow.sdk.lineage
|
|
285
|
+
|
|
286
|
+
Coordinators
|
|
287
|
+
------------
|
|
288
|
+
|
|
289
|
+
Coordinators bridge the Airflow worker and a non-Python language runtime.
|
|
290
|
+
See :doc:`apache-airflow:authoring-and-scheduling/language-sdks/index` for a conceptual overview.
|
|
291
|
+
|
|
292
|
+
.. rubric:: JVM
|
|
293
|
+
|
|
294
|
+
.. autoapiclass:: airflow.sdk.coordinators.java.JavaCoordinator
|
|
295
|
+
|
|
296
|
+
.. rubric:: Native executable (e.g. Go)
|
|
297
|
+
|
|
298
|
+
.. autoapiclass:: airflow.sdk.coordinators.executable.ExecutableCoordinator
|
|
299
|
+
|
|
228
300
|
Execution Time Components
|
|
229
301
|
-------------------------
|
|
230
302
|
.. rubric:: Context
|
|
@@ -238,6 +310,10 @@ For a complete list of available context variables (such as ``dag_run``,
|
|
|
238
310
|
``task_instance``, ``logical_date``, etc.), see the
|
|
239
311
|
:ref:`Templates reference <templates-ref>`.
|
|
240
312
|
|
|
313
|
+
.. rubric:: Task State
|
|
314
|
+
|
|
315
|
+
.. autodata:: airflow.sdk.NEVER_EXPIRE
|
|
316
|
+
|
|
241
317
|
.. rubric:: Logging
|
|
242
318
|
|
|
243
319
|
.. autofunction:: airflow.sdk.log.mask_secret
|
|
@@ -252,7 +328,7 @@ Everything else
|
|
|
252
328
|
.. autoapimodule:: airflow.sdk
|
|
253
329
|
:members:
|
|
254
330
|
:special-members: __version__
|
|
255
|
-
:exclude-members: BaseAsyncOperator, BaseOperator, DAG, dag, asset, Asset, AssetAlias, AssetAll, AssetAny, AssetWatcher, TaskGroup, TaskInstance, XComArg, get_current_context, get_parsing_context
|
|
331
|
+
:exclude-members: BaseAsyncOperator, BaseOperator, DAG, dag, asset, Asset, AssetAccessControl, AssetAlias, AssetAll, AssetAny, AssetWatcher, TaskGroup, TaskInstance, XComArg, get_current_context, get_parsing_context
|
|
256
332
|
:undoc-members:
|
|
257
333
|
:imported-members:
|
|
258
334
|
:no-index:
|
|
@@ -55,6 +55,7 @@ extensions = [
|
|
|
55
55
|
"sphinx.ext.autodoc",
|
|
56
56
|
"autoapi.extension",
|
|
57
57
|
"sphinx.ext.intersphinx",
|
|
58
|
+
"airflow_intersphinx",
|
|
58
59
|
"exampleinclude",
|
|
59
60
|
"sphinxcontrib.spelling",
|
|
60
61
|
]
|
|
@@ -100,6 +101,8 @@ rst_epilog = "\n".join(f".. |{key}| replace:: {replace}" for key, replace in glo
|
|
|
100
101
|
|
|
101
102
|
|
|
102
103
|
intersphinx_resolve_self = "airflow"
|
|
104
|
+
# ``airflow:`` resolves against the published site; ``apache-airflow:`` (added by
|
|
105
|
+
# airflow_intersphinx) against the local inventory — use it for not-yet-published pages.
|
|
103
106
|
intersphinx_mapping = {
|
|
104
107
|
"airflow": ("https://airflow.apache.org/docs/apache-airflow/stable/", None),
|
|
105
108
|
}
|
|
@@ -25,6 +25,15 @@ Deferred vs Async Operators
|
|
|
25
25
|
Airflow 3.2 introduces Python-native async support for tasks, allowing concurrent I/O within a single worker slot.
|
|
26
26
|
This page explains how async operators differ from deferred operators and when to use each.
|
|
27
27
|
|
|
28
|
+
.. versionchanged:: 3.3.0
|
|
29
|
+
|
|
30
|
+
Airflow 3.3 adds a third pattern for long-running tasks: resumable tasks, which use the
|
|
31
|
+
task state store to checkpoint progress across retries. For guidance on when to use
|
|
32
|
+
resumable tasks versus deferrable operators, see
|
|
33
|
+
:ref:`apache-airflow:concepts-resumable-tasks`. For details on the
|
|
34
|
+
:class:`~airflow.sdk.ResumableJobMixin` for external job crash recovery, see
|
|
35
|
+
:doc:`resumable-job-mixin`.
|
|
36
|
+
|
|
28
37
|
Deferred Operators
|
|
29
38
|
------------------
|
|
30
39
|
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
.. Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
or more contributor license agreements. See the NOTICE file
|
|
3
|
+
distributed with this work for additional information
|
|
4
|
+
regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
to you under the Apache License, Version 2.0 (the
|
|
6
|
+
"License"); you may not use this file except in compliance
|
|
7
|
+
with the License. You may obtain a copy of the License at
|
|
8
|
+
|
|
9
|
+
.. http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
|
|
11
|
+
.. Unless required by applicable law or agreed to in writing,
|
|
12
|
+
software distributed under the License is distributed on an
|
|
13
|
+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
KIND, either express or implied. See the License for the
|
|
15
|
+
specific language governing permissions and limitations
|
|
16
|
+
under the License.
|
|
17
|
+
|
|
18
|
+
Executable Bundle Spec
|
|
19
|
+
======================
|
|
20
|
+
|
|
21
|
+
This document specifies the on-disk format of a build artifact produced by an
|
|
22
|
+
Airflow native-executable SDK (Go, Rust, C++, Zig, ...) and consumed by
|
|
23
|
+
:class:`~airflow.sdk.coordinators.executable.ExecutableCoordinator`
|
|
24
|
+
at deployment time.
|
|
25
|
+
|
|
26
|
+
The goal is a single, language-agnostic *bundle* shape so that scheduler,
|
|
27
|
+
worker, and UI behave identically regardless of which compiled SDK produced
|
|
28
|
+
the DAG.
|
|
29
|
+
|
|
30
|
+
Bundle-spec version: ``1.0``.
|
|
31
|
+
|
|
32
|
+
Container
|
|
33
|
+
---------
|
|
34
|
+
|
|
35
|
+
A bundle is **the compiled executable itself, with a fixed-format footer
|
|
36
|
+
appended after the binary's normal end-of-file**. The executable remains
|
|
37
|
+
directly runnable; the footer is data that follows the last byte the OS
|
|
38
|
+
loader cares about and is invisible to ``exec()``. There is no enclosing
|
|
39
|
+
archive.
|
|
40
|
+
|
|
41
|
+
A bundle file therefore has three regions, in order from offset 0:
|
|
42
|
+
|
|
43
|
+
1. The native executable (ELF / Mach-O / PE), including any code-signing
|
|
44
|
+
structures the platform appends.
|
|
45
|
+
2. The primary DAG source file, embedded verbatim (UTF-8). MAY have length 0.
|
|
46
|
+
3. The build-time manifest (``airflow-metadata.yaml`` content, UTF-8).
|
|
47
|
+
|
|
48
|
+
The file ends with a fixed 64-byte trailer that locates regions (2) and (3),
|
|
49
|
+
carries an integrity hash of the binary region, and identifies the file as a
|
|
50
|
+
bundle. See :ref:`bundle-trailer-layout`.
|
|
51
|
+
|
|
52
|
+
Filenames follow OS conventions for executables: no extension on Linux/macOS,
|
|
53
|
+
``.exe`` on Windows. The scanner identifies bundles by the trailer's magic,
|
|
54
|
+
not by the filename.
|
|
55
|
+
|
|
56
|
+
The complete bundle file regions are:
|
|
57
|
+
|
|
58
|
+
.. code-block:: text
|
|
59
|
+
|
|
60
|
+
[0, source_start) native binary (must be non-empty)
|
|
61
|
+
[source_start, metadata_start) embedded source (may be zero length)
|
|
62
|
+
[metadata_start, file_size-64) build-time manifest
|
|
63
|
+
[file_size-64, file_size) 64-byte trailer
|
|
64
|
+
|
|
65
|
+
where ``metadata_start = file_size - 64 - metadata_len`` and
|
|
66
|
+
``source_start = metadata_start - source_len``.
|
|
67
|
+
|
|
68
|
+
Reference Implementation
|
|
69
|
+
------------------------
|
|
70
|
+
|
|
71
|
+
Below is a simple implementation to append the trailer with Python as a
|
|
72
|
+
reference when building your own packer. A language SDK is encouraged to
|
|
73
|
+
integrate trailer-packing into the build process to streamline the experience
|
|
74
|
+
for SDK users. Go SDK's ``airflow-go-pack`` is a good example.
|
|
75
|
+
|
|
76
|
+
.. code-block:: python
|
|
77
|
+
|
|
78
|
+
#!/usr/bin/env python3
|
|
79
|
+
|
|
80
|
+
import hashlib
|
|
81
|
+
import shutil
|
|
82
|
+
import struct
|
|
83
|
+
|
|
84
|
+
BINARY = pathlib.Path(...) # Path to the compiled executable.
|
|
85
|
+
OUTPUT = pathlib.Path(...) # Where to put the processed executable.
|
|
86
|
+
SOURCE = b"..." # Source code to embed.
|
|
87
|
+
METADATA = b"..." # UTF-8-encoded YAML metadata.
|
|
88
|
+
|
|
89
|
+
# SHA-256 covers the binary region only: bytes [0, source_start).
|
|
90
|
+
binary_sha256 = hashlib.sha256(BINARY.read_bytes()).digest()
|
|
91
|
+
|
|
92
|
+
trailer = struct.pack(
|
|
93
|
+
"<III 32s 12s 8s",
|
|
94
|
+
len(SOURCE), # source_len
|
|
95
|
+
len(METADATA), # metadata_len
|
|
96
|
+
1, # footer_ver
|
|
97
|
+
binary_sha256,
|
|
98
|
+
bytes(12), # reserved
|
|
99
|
+
b"AFBNDL01", # magic
|
|
100
|
+
)
|
|
101
|
+
assert len(trailer) == 64
|
|
102
|
+
|
|
103
|
+
shutil.copy(BINARY, OUTPUT)
|
|
104
|
+
with OUTPUT.open("ab") as fh:
|
|
105
|
+
fh.write(SOURCE) # Embedded source region.
|
|
106
|
+
fh.write(METADATA) # Metadata region.
|
|
107
|
+
fh.write(trailer)
|
|
108
|
+
OUTPUT.chmod(0o755)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
.. _bundle-trailer-layout:
|
|
112
|
+
|
|
113
|
+
Trailer Layout
|
|
114
|
+
--------------
|
|
115
|
+
|
|
116
|
+
The last 64 bytes of a conforming bundle are the trailer. All multi-byte
|
|
117
|
+
integers are little-endian.
|
|
118
|
+
|
|
119
|
+
.. code-block:: text
|
|
120
|
+
|
|
121
|
+
bytes 0..3 source_len uint32 length of the source region in bytes
|
|
122
|
+
bytes 4..7 metadata_len uint32 length of the metadata region in bytes
|
|
123
|
+
bytes 8..11 footer_ver uint32 currently 1
|
|
124
|
+
bytes 12..43 binary_sha256 32 bytes SHA-256 of the binary region [0, source_start)
|
|
125
|
+
bytes 44..55 reserved 12 bytes MUST be zero
|
|
126
|
+
bytes 56..63 magic 8 bytes ASCII "AFBNDL01"
|
|
127
|
+
|
|
128
|
+
The magic is the byte sequence ``0x41 0x46 0x42 0x4E 0x44 0x4C 0x30 0x31``
|
|
129
|
+
(``"AFBNDL01"``). The trailing ``01`` is the footer-format version repeated
|
|
130
|
+
in ASCII so a human can identify a bundle at a glance
|
|
131
|
+
(``tail -c 8 ./mybundle | xxd``); the binary ``footer_ver`` field is the
|
|
132
|
+
authoritative source of truth for parsing.
|
|
133
|
+
|
|
134
|
+
``binary_sha256`` is the SHA-256 digest computed over the **binary region
|
|
135
|
+
only** — bytes ``[0, source_start)``. The hash field sits inside the trailer
|
|
136
|
+
and therefore cannot cover the bytes it occupies; it provides *integrity*
|
|
137
|
+
(the binary region has not been truncated, corrupted, or naively edited
|
|
138
|
+
between packing and exec) rather than *authenticity*
|
|
139
|
+
(see :ref:`bundle-code-signing` for how authenticity layers on top).
|
|
140
|
+
|
|
141
|
+
Reader algorithm:
|
|
142
|
+
|
|
143
|
+
1. Open the file. Seek to ``EOF - 64``. Read 64 bytes.
|
|
144
|
+
2. Compare bytes ``56..63`` against ``"AFBNDL01"``. If different, the file
|
|
145
|
+
is not a bundle; the scanner MUST ignore it.
|
|
146
|
+
3. Parse ``footer_ver``. If unknown, fail with a versioning error.
|
|
147
|
+
4. Compute ``metadata_start = filesize - 64 - metadata_len`` and
|
|
148
|
+
``source_start = metadata_start - source_len``.
|
|
149
|
+
5. Validate ``source_start >= 0`` and that the implied binary region
|
|
150
|
+
(``[0, source_start)``) is non-empty.
|
|
151
|
+
6. Compute SHA-256 over the binary region ``[0, source_start)`` and compare
|
|
152
|
+
to ``binary_sha256``. Mismatch is a hard failure handled identically to
|
|
153
|
+
a magic-check failure: the scanner logs and skips the file. The result
|
|
154
|
+
MAY be cached by ``(path, inode, mtime, size)`` so the runtime does not
|
|
155
|
+
re-hash on every exec; a cache miss (file replaced, mtime bumped)
|
|
156
|
+
triggers re-verification.
|
|
157
|
+
7. Read ``metadata_len`` bytes from ``metadata_start`` for the manifest.
|
|
158
|
+
8. Read ``source_len`` bytes from ``source_start`` for the source view.
|
|
159
|
+
If ``source_len == 0``, no source is embedded; the UI displays
|
|
160
|
+
"(source not available)".
|
|
161
|
+
|
|
162
|
+
Source comes *before* metadata so a future ``footer_ver`` MAY introduce
|
|
163
|
+
additional trailing blobs (e.g. signed checksums, compressed deps) by
|
|
164
|
+
extending the trailer rather than inserting between existing blobs.
|
|
165
|
+
|
|
166
|
+
.. _bundle-metadata-schema:
|
|
167
|
+
|
|
168
|
+
``airflow-metadata.yaml`` schema
|
|
169
|
+
--------------------------------
|
|
170
|
+
|
|
171
|
+
The metadata region carries the same YAML manifest documented previously,
|
|
172
|
+
produced at build time from a static scan of the DAG source. A
|
|
173
|
+
machine-readable JSON Schema is published at
|
|
174
|
+
:download:`airflow-metadata.schema.json` for use by build tooling, validators,
|
|
175
|
+
and editors.
|
|
176
|
+
|
|
177
|
+
.. code-block:: yaml
|
|
178
|
+
|
|
179
|
+
airflow_bundle_metadata_version: "1.0"
|
|
180
|
+
sdk:
|
|
181
|
+
language: go
|
|
182
|
+
version: "0.1.0"
|
|
183
|
+
supervisor_schema_version: "2026-06-16"
|
|
184
|
+
source: example.go
|
|
185
|
+
dags:
|
|
186
|
+
example_dag:
|
|
187
|
+
tasks:
|
|
188
|
+
- extract
|
|
189
|
+
- transform
|
|
190
|
+
- load
|
|
191
|
+
another_dag:
|
|
192
|
+
tasks:
|
|
193
|
+
- run
|
|
194
|
+
|
|
195
|
+
Top-level keys:
|
|
196
|
+
|
|
197
|
+
``airflow_bundle_metadata_version`` (string, required)
|
|
198
|
+
The bundle-spec version this manifest conforms to. Currently ``"1.0"``.
|
|
199
|
+
|
|
200
|
+
``sdk`` (mapping, required)
|
|
201
|
+
Identifies the SDK that produced the bundle.
|
|
202
|
+
|
|
203
|
+
- ``language`` (string, required): lower-case source-language identifier
|
|
204
|
+
(e.g. ``go``, ``rust``, ``cpp``, ``zig``).
|
|
205
|
+
- ``version`` (string, required): SDK version used at build time.
|
|
206
|
+
- ``supervisor_schema_version`` (string, required): dated AIP-72
|
|
207
|
+
supervisor wire-schema version the bundle was compiled against, in
|
|
208
|
+
``YYYY-MM-DD`` format (e.g. ``"2026-06-16"``). The coordinator passes
|
|
209
|
+
this value to the supervisor so it can downgrade outbound messages /
|
|
210
|
+
upgrade inbound messages to a shape the bundle understands. The value
|
|
211
|
+
MUST resolve against the supervisor's schema bundle; the coordinator
|
|
212
|
+
validates it lazily when matching a bundle to a task at
|
|
213
|
+
task-execution time, and an unknown version causes that bundle to be
|
|
214
|
+
skipped.
|
|
215
|
+
|
|
216
|
+
``source`` (string, required)
|
|
217
|
+
Original filename of the primary DAG source file (e.g. ``example.go``).
|
|
218
|
+
The file's bytes live in the source region of the bundle, not at this
|
|
219
|
+
path; this field is a display name the Airflow UI uses to label the
|
|
220
|
+
source-view panel and pick a syntax-highlighting mode from the
|
|
221
|
+
extension.
|
|
222
|
+
|
|
223
|
+
``dags`` (mapping, required)
|
|
224
|
+
Mapping of ``dag_id`` to a *DAG entry*. Every ``dag_id`` the bundle
|
|
225
|
+
exposes MUST appear here. The scanner uses these keys to match a DAG
|
|
226
|
+
parsing or task-execution request to the bundle that owns it.
|
|
227
|
+
|
|
228
|
+
DAG entry fields:
|
|
229
|
+
|
|
230
|
+
``tasks`` (list of strings, required)
|
|
231
|
+
Static list of ``task_id``\ s declared in the DAG. Empty lists are
|
|
232
|
+
permitted but discouraged.
|
|
233
|
+
|
|
234
|
+
Unrecognized top-level or DAG-entry keys MUST be ignored by the consumer so
|
|
235
|
+
that future SDK versions can extend the manifest without breaking older
|
|
236
|
+
runtimes.
|
|
237
|
+
|
|
238
|
+
Examples
|
|
239
|
+
--------
|
|
240
|
+
|
|
241
|
+
Go bundle::
|
|
242
|
+
|
|
243
|
+
example
|
|
244
|
+
├── ELF/Mach-O/PE executable
|
|
245
|
+
├── source region: contents of example.go
|
|
246
|
+
├── metadata region: airflow-metadata.yaml (source: example.go)
|
|
247
|
+
└── trailer (64 B): lengths + binary_sha256 + AFBNDL01 magic
|
|
248
|
+
|
|
249
|
+
Rust bundle::
|
|
250
|
+
|
|
251
|
+
pipeline
|
|
252
|
+
├── ELF/Mach-O/PE executable
|
|
253
|
+
├── source region: contents of main.rs
|
|
254
|
+
├── metadata region: airflow-metadata.yaml (source: main.rs)
|
|
255
|
+
└── trailer (64 B): lengths + binary_sha256 + AFBNDL01 magic
|
|
256
|
+
|
|
257
|
+
The bundle is one file. ``./example`` runs the binary; the appended data
|
|
258
|
+
is invisible to ``exec()``.
|
|
259
|
+
|
|
260
|
+
Build Pipeline Ordering
|
|
261
|
+
-----------------------
|
|
262
|
+
|
|
263
|
+
The footer is appended after the executable is otherwise complete. Producers
|
|
264
|
+
that perform additional post-build steps MUST observe the following order:
|
|
265
|
+
|
|
266
|
+
- **Strip** debug symbols *before* appending the footer. Strip
|
|
267
|
+
implementations operate on the binary's defined end and either leave
|
|
268
|
+
trailing data intact or truncate it; do not rely on either behaviour.
|
|
269
|
+
- **Compute binary_sha256** over the on-disk bytes *as they stand
|
|
270
|
+
immediately before the append*. At that moment the whole file is the
|
|
271
|
+
binary region; nothing has been written past its OS-defined end yet, so
|
|
272
|
+
the digest matches what the reader will recompute over
|
|
273
|
+
``[0, source_start)`` after the append.
|
|
274
|
+
- **Append** ``<source><metadata><trailer>`` in a single write so a
|
|
275
|
+
partially written file fails the magic or hash check rather than
|
|
276
|
+
appearing as a half-valid bundle.
|
|
277
|
+
|
|
278
|
+
.. _bundle-code-signing:
|
|
279
|
+
|
|
280
|
+
Code Signing
|
|
281
|
+
~~~~~~~~~~~~
|
|
282
|
+
|
|
283
|
+
The bundle format itself does not require OS-level code signing.
|
|
284
|
+
``binary_sha256`` provides integrity against truncation, in-flight
|
|
285
|
+
corruption, and naive tampering, and Airflow's threat model treats
|
|
286
|
+
``executables_root`` as Deployment-Manager-controlled — *authenticity*
|
|
287
|
+
(signed by a trusted identity) is a deployment-time concern rather than a
|
|
288
|
+
bundle-format one.
|
|
289
|
+
|
|
290
|
+
**Compressors** such as UPX are NOT supported. They rewrite the file
|
|
291
|
+
end-to-end, destroying both the trailer and the hash invariant.
|
|
292
|
+
|
|
293
|
+
Determinism: the trailer is byte-identical for byte-identical inputs, so a
|
|
294
|
+
deterministic build plus a canonical (sorted-key) manifest serialization
|
|
295
|
+
yields a byte-identical bundle file (and therefore a stable
|
|
296
|
+
``binary_sha256``).
|
|
297
|
+
|
|
298
|
+
Deployment Layout
|
|
299
|
+
-----------------
|
|
300
|
+
|
|
301
|
+
Bundle files are placed **as-is** in any of the directories configured as the
|
|
302
|
+
``executables_root`` kwarg on the
|
|
303
|
+
:class:`~airflow.sdk.coordinators.executable.ExecutableCoordinator` entry
|
|
304
|
+
under ``[sdk] coordinators``. The scanner walks each directory **recursively**
|
|
305
|
+
and considers only regular files whose **executable bit is set** for the
|
|
306
|
+
invoking user; files without the executable bit are skipped without reading
|
|
307
|
+
their trailer. For each candidate it reads the last 64 bytes and treats files
|
|
308
|
+
whose magic matches ``"AFBNDL01"`` as bundles. Matched files are then
|
|
309
|
+
SHA-256-verified per the reader algorithm; a mismatch demotes the file back
|
|
310
|
+
to "ignored, with an error log." Files without the magic are silently
|
|
311
|
+
ignored, so non-bundle files (READMEs, dotfiles) MAY share the directory
|
|
312
|
+
without interfering with the scan.
|
|
313
|
+
|
|
314
|
+
::
|
|
315
|
+
|
|
316
|
+
/opt/airflow/executable-bundles/
|
|
317
|
+
├── example
|
|
318
|
+
├── team-a/
|
|
319
|
+
│ └── pipeline
|
|
320
|
+
└── analytics
|
|
321
|
+
|
|
322
|
+
At task-execution time the runtime execs the bundle file directly with the
|
|
323
|
+
coordinator arguments (``--comm=<addr>`` / ``--logs=<addr>``). No extraction,
|
|
324
|
+
no transient cache directory, no chmod-after-extract step is required: the
|
|
325
|
+
file is already a runnable executable with the appropriate permission bits
|
|
326
|
+
preserved by the build pipeline. The integrity check runs at scan/discovery
|
|
327
|
+
time and is cached by ``(path, inode, mtime, size)``, so the exec hot path
|
|
328
|
+
does not re-hash.
|
|
329
|
+
|
|
330
|
+
The compiled executable MUST honor the SDK coordinator protocol —
|
|
331
|
+
``--comm=<host:port>`` / ``--logs=<host:port>`` socket-based IPC.
|
|
332
|
+
|
|
333
|
+
See :class:`~airflow.sdk.coordinators.executable.ExecutableCoordinator`
|
|
334
|
+
for the consumer-side coordinator.
|
|
335
|
+
|
|
336
|
+
Inspection
|
|
337
|
+
----------
|
|
338
|
+
|
|
339
|
+
Because the bundle is a single executable rather than an archive,
|
|
340
|
+
inspecting the embedded source and manifest requires a small CLI rather
|
|
341
|
+
than an off-the-shelf ``unzip``. The Go SDK's ``airflow-go-pack`` tool
|
|
342
|
+
provides an ``inspect`` subcommand that dumps both regions; equivalent
|
|
343
|
+
helpers are expected from each language's packer.
|
|
344
|
+
|
|
345
|
+
Compatibility and Versioning
|
|
346
|
+
----------------------------
|
|
347
|
+
|
|
348
|
+
- The current bundle-spec format version is ``1.0``
|
|
349
|
+
(``airflow_bundle_metadata_version``); the current trailer format version is
|
|
350
|
+
``1`` (``footer_ver = 1``).
|
|
351
|
+
- Backward-incompatible bundle-spec changes increment the major component
|
|
352
|
+
of ``airflow_bundle_metadata_version`` and are gated behind an explicit opt-in
|
|
353
|
+
on the consumer side.
|
|
354
|
+
- New optional manifest fields MAY be added in minor versions and MUST be
|
|
355
|
+
ignored by older consumers.
|
|
356
|
+
- New trailer-format versions append fields after ``binary_sha256``
|
|
357
|
+
(consuming the reserved region) or extend the trailer with additional
|
|
358
|
+
trailing blobs ahead of the magic. Older readers MUST reject unknown
|
|
359
|
+
``footer_ver`` rather than guessing.
|
|
@@ -88,9 +88,14 @@ Why use ``airflow.sdk``?
|
|
|
88
88
|
- :class:`airflow.sdk.Context`
|
|
89
89
|
- :class:`airflow.sdk.DAG`
|
|
90
90
|
- :class:`airflow.sdk.EdgeModifier`
|
|
91
|
+
- :class:`airflow.sdk.ExceptionRetryPolicy`
|
|
91
92
|
- :class:`airflow.sdk.Label`
|
|
92
93
|
- :class:`airflow.sdk.ObjectStoragePath`
|
|
93
94
|
- :class:`airflow.sdk.Param`
|
|
95
|
+
- :class:`airflow.sdk.RetryAction`
|
|
96
|
+
- :class:`airflow.sdk.RetryDecision`
|
|
97
|
+
- :class:`airflow.sdk.RetryPolicy`
|
|
98
|
+
- :class:`airflow.sdk.RetryRule`
|
|
94
99
|
- :class:`airflow.sdk.TaskGroup`
|
|
95
100
|
- :class:`airflow.sdk.TaskInstanceState`
|
|
96
101
|
- :class:`airflow.sdk.DagRunState`
|
|
@@ -168,5 +173,7 @@ For the full public API reference, see the :doc:`api` page.
|
|
|
168
173
|
examples
|
|
169
174
|
dynamic-task-mapping
|
|
170
175
|
deferred-vs-async-operators
|
|
176
|
+
resumable-job-mixin
|
|
171
177
|
api
|
|
172
178
|
concepts
|
|
179
|
+
executable-bundle-spec
|