apache-airflow-task-sdk 1.3.2rc1__tar.gz → 1.4.0b2__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.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/PKG-INFO +7 -5
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/dev/generate_task_sdk_models.py +3 -7
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/airflow-metadata.schema.json +47 -5
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/api.rst +49 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/concepts.rst +1 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/conf.py +2 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/deferred-vs-async-operators.rst +8 -8
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/dynamic-task-mapping.rst +4 -4
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/examples.rst +3 -3
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/executable-bundle-spec.rst +85 -41
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/index.rst +4 -0
- apache_airflow_task_sdk-1.4.0b2/docs/lang-sdk-spec.rst +170 -0
- apache_airflow_task_sdk-1.4.0b2/docs/lang-sdk.rst +42 -0
- apache_airflow_task_sdk-1.4.0b2/docs/ts-bundle-spec.rst +219 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/pyproject.toml +17 -12
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/__init__.py +13 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/__init__.pyi +16 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/configuration/parser.py +13 -5
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/_shared/dagnode/cycle.py +73 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/dagnode/node.py +113 -8
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/percent_formatter.py +1 -4
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/remote.py +12 -4
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/structlog.py +7 -12
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/module_loading/__init__.py +4 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/_shared/module_loading/dag_file.py +152 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/_shared/observability/__init__.py +21 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/datadog_logger.py +18 -31
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/metrics_template.yaml +116 -36
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/otel_logger.py +20 -3
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/stats.py +30 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/statsd_logger.py +63 -16
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/validators.py +0 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/traces/__init__.py +61 -24
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/plugins_manager/__init__.py +6 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/plugins_manager/plugins_manager.py +76 -8
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/providers_discovery/providers_discovery.py +30 -2
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/secrets_backend/base.py +19 -13
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/secrets_masker/secrets_masker.py +20 -12
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/state/__init__.py +40 -10
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/client.py +182 -65
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/datamodels/_generated.py +91 -4
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/decorator.py +27 -5
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/operator.py +23 -17
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/timetable.py +7 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/xcom.py +362 -73
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/_bundle_metadata.py +142 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/_dag_importer.py +166 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/_subprocess.py +784 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/executable/_bundle_reader.py +195 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/executable/_dag_importer.py +105 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/executable/coordinator.py +132 -91
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/java/_dag_importer.py +122 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/java/_jar_manifest.py +71 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/java/coordinator.py +325 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/node/__init__.py +28 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/node/_bundle_reader.py +560 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/node/_dag_importer.py +72 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/coordinators/node/coordinator.py +142 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/abstractoperator.py +2 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/definitions/_internal/loop.py +218 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/node.py +9 -6
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/asset/__init__.py +14 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/asset/decorators.py +5 -4
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/callback.py +23 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/connection.py +38 -2
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/context.py +4 -4
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/dag.py +99 -52
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/deadline.py +72 -28
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/__init__.pyi +6 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/task_group.py +35 -8
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/definitions/loop.py +33 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/mappedoperator.py +3 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/retry_policy.py +176 -6
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/taskgroup.py +61 -45
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/definitions/timetables/assets.py +152 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/variable.py +54 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/xcom_arg.py +10 -5
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/exceptions.py +4 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/execution_time/bundles.py +90 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/cache.py +31 -9
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/callback_supervisor.py +39 -2
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/comms.py +71 -6
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/connection_test_supervisor.py +9 -4
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/context.py +276 -45
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/execution_time/coordinator.py +466 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/lazy_sequence.py +6 -2
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/execution_time/loop.py +130 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/request_handlers.py +43 -6
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/schema.json +541 -5
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/versions/__init__.py +18 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/execution_time/schema/versions/v2026_10_30.py +121 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/supervisor.py +997 -449
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/task_runner.py +288 -146
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/execution_time/tracing.py +60 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/__init__.py +56 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/base.py +695 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/python_importer.py +343 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/yaml_importer/__init__.py +33 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/yaml_importer/builder.py +651 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/yaml_importer/importer.py +169 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/yaml_importer/migrator.py +169 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/yaml_importer/models.py +527 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/yaml_importer/parser.py +102 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/yaml_importer/schema.json +417 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/yaml_importer/versions/__init__.py +38 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/importers/zip_importer.py +320 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/path.py +2 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/lineage.py +1 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/log.py +34 -14
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/metrics/datadog_logger.py +1 -0
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/observability/metrics/statsd_logger.py +70 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/plugins_manager.py +18 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/providers_manager_runtime.py +75 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/__init__.py +3 -7
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/datetime.py +2 -2
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/serde/serializers/lazy_xcom_sequence.py +46 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/state.py +1 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/types.py +12 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/yaml.py +2 -4
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/conftest.py +6 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/__init__.py +5 -5
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/api/test_client.py +694 -374
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_decorator.py +12 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_operator.py +156 -2
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/bases/test_xcom.py +667 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/executable/_bundle_test_utils.py +98 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/executable/test_bundle_reader.py +217 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/executable/test_coordinator.py +275 -40
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/executable/test_dag_importer.py +283 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/java/_jar_test_utils.py +53 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/java/test_coordinator.py +709 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/java/test_dag_importer.py +327 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/java/test_jar_manifest.py +94 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/node/__init__.py +17 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/node/_bundle_test_utils.py +180 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/node/test_bundle_reader.py +623 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/node/test_coordinator.py +429 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/node/test_dag_importer.py +275 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/test_dag_importer.py +214 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/coordinators/test_subprocess.py +1692 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/definitions/_internal/test_loop.py +431 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/_internal/test_templater.py +2 -2
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_result.py +38 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_task_group.py +119 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_asset.py +28 -9
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_asset_decorators.py +38 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_callback.py +17 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_connection.py +67 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_dag.py +369 -10
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_deadline.py +131 -17
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_mappedoperator.py +10 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_retry_policy.py +336 -7
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_variables.py +137 -2
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_xcom_arg.py +115 -2
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/definitions/timetables/test_assets.py +166 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/docs/test_public_api.py +1 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/execution_time/_request_registration_types.py +41 -0
- apache_airflow_task_sdk-1.3.2rc1/src/airflow/sdk/_shared/observability/__init__.py → apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/execution_time/exec_probe_target.py +9 -5
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/schema/test_migrator.py +289 -6
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/execution_time/test_bundles.py +86 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_cache.py +43 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_callback_supervisor.py +182 -3
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_comms.py +75 -1
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_connection_test_supervisor.py +112 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_context.py +665 -8
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/execution_time/test_coordinator.py +800 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_lazy_sequence.py +27 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/execution_time/test_loop.py +287 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_request_handlers.py +51 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_secrets.py +20 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_supervisor.py +1974 -183
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_task_runner.py +1105 -233
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/execution_time/test_tracing.py +144 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/importers/test_python_importer.py +395 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/importers/test_registry.py +754 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/importers/test_zip_importer.py +367 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/importers/yaml_importer/example_dag.yaml +69 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/importers/yaml_importer/test_importer.py +806 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/importers/yaml_importer/test_migrator.py +188 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/importers/yaml_importer/test_parser.py +586 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/io/__init__.py +16 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/serde/__init__.py +16 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/serde/test_serializers.py +13 -1
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/test_log.py +121 -0
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/test_plugins_manager.py +112 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_providers_manager_runtime.py +137 -2
- apache_airflow_task_sdk-1.3.2rc1/src/airflow/sdk/_shared/module_loading/dag_file.py +0 -23
- apache_airflow_task_sdk-1.3.2rc1/src/airflow/sdk/coordinators/_subprocess.py +0 -431
- apache_airflow_task_sdk-1.3.2rc1/src/airflow/sdk/coordinators/java/coordinator.py +0 -230
- apache_airflow_task_sdk-1.3.2rc1/src/airflow/sdk/definitions/timetables/assets.py +0 -86
- apache_airflow_task_sdk-1.3.2rc1/src/airflow/sdk/execution_time/coordinator.py +0 -275
- apache_airflow_task_sdk-1.3.2rc1/src/airflow/sdk/observability/metrics/statsd_logger.py +0 -62
- apache_airflow_task_sdk-1.3.2rc1/tests/task_sdk/bases/test_xcom.py +0 -274
- apache_airflow_task_sdk-1.3.2rc1/tests/task_sdk/coordinators/java/test_coordinator.py +0 -388
- apache_airflow_task_sdk-1.3.2rc1/tests/task_sdk/coordinators/test_subprocess.py +0 -846
- apache_airflow_task_sdk-1.3.2rc1/tests/task_sdk/dags/signal_forward_test.py +0 -44
- apache_airflow_task_sdk-1.3.2rc1/tests/task_sdk/execution_time/test_coordinator.py +0 -231
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/.gitignore +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/.pre-commit-config.yaml +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/LICENSE +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/NOTICE +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/README.md +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/dev/datamodel_code_formatter.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/.gitignore +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/img/airflow-2-approach.png +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/img/airflow-2-arch.png +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/img/airflow-3-arch.png +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/img/airflow-3-task-sdk.png +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/resumable-job-mixin.rst +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/configuration/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/configuration/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/dagnode/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/listener.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/spec/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/spec/lifecycle.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/spec/taskinstance.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/_config.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/_noncaching.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/factory.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/types.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/module_loading/file_discovery.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/common.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/base_stats_logger.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/metrics_registry.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/protocols.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/otel_env_config.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/providers_discovery/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/secrets_backend/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/secrets_masker/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/serialization/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/template_rendering/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/timezones/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/timezones/timezone.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/datamodels/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/datamodels/activities.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/branch.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/hook.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/notifier.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/operatorlink.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/resumablejobmixin.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/secrets_backend.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/sensor.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/skipmixin.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/configuration.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/executable/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/java/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/crypto.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/contextmanager.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/dag_parsing_context.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/decorators.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/expandinput.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/logging_mixin.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/mixins.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/templater.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/types.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/asset/access_control.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/asset/metadata.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/condition.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/edges.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/operator_resources.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/param.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/allowed_key.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/base.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/chain.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/fixed_key.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/identity.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/product.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/temporal.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/wait_policy.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/window.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/template.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/_cron.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/_delta.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/events.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/interval.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/simple.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/trigger.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/callback_runner.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/email_backend.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/execute_workload.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/hitl.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/macros.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/AGENTS.md +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/migrator.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/secrets/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/secrets/execution_api.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/secrets_masker.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/sentry/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/sentry/configured.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/sentry/noop.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/task_mapping.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/timeout.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/xcom.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/fs.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/stat.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/store.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/typedef.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/listener.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/module_loading.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/metrics/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/metrics/otel_logger.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/metrics/stats_utils.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/stats.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/py.typed +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/bignum.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/builtin.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/deltalake.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/iceberg.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/kubernetes.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/numpy.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/pandas.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/pydantic.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/timezone.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/uuid.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/typing.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/timezone.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/api/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/notifier/test_notifier.txt +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_branch.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_hook.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_notifier.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_resumablejobmixin.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_sensor.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_skipmixin.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/executable/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/java/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/dags/dag_parsing_context.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/dags/super_basic.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/dags/super_basic_deferred_run.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/dags/super_basic_run.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/_internal/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/_internal/test_decorators.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/conftest.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_condition.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_mapped.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/sensors/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_asset_access_control.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_context.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_macros.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_mixins.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_module_loading.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_operator_resources.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_param.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_partition_mappers.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_taskgroup.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_template.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_wait_policy.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/timetables/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/timetables/test__cron.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/docs/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/docs/test_docs_inventory.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/conftest.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/schema/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/schema/_mock_version_bundle.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/schema/test_integration.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_context_cache.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_email_backend.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_hitl.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_sentry.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_supervisor_schemas_name_type_sync.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_task_mapping.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_timeout.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1/tests/task_sdk/io → apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/importers}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1/tests/task_sdk/serde → apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/importers/yaml_importer}/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/io/test_path.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/serde/test_serde.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_configuration.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_crypto.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_exceptions.py +0 -0
- {apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_lineage.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: apache-airflow-task-sdk
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0b2
|
|
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/
|
|
@@ -22,22 +22,22 @@ Classifier: Environment :: Web Environment
|
|
|
22
22
|
Classifier: Framework :: Apache Airflow
|
|
23
23
|
Classifier: Intended Audience :: Developers
|
|
24
24
|
Classifier: Intended Audience :: System Administrators
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
26
25
|
Classifier: Programming Language :: Python :: 3.11
|
|
27
26
|
Classifier: Programming Language :: Python :: 3.12
|
|
28
27
|
Classifier: Programming Language :: Python :: 3.13
|
|
29
28
|
Classifier: Programming Language :: Python :: 3.14
|
|
30
29
|
Classifier: Topic :: System :: Monitoring
|
|
31
|
-
Requires-Python: !=3.15,>=3.
|
|
32
|
-
Requires-Dist: apache-airflow-core<3.
|
|
30
|
+
Requires-Python: !=3.15,>=3.11
|
|
31
|
+
Requires-Dist: apache-airflow-core<3.5.0,>=3.4.0b1
|
|
33
32
|
Requires-Dist: asgiref>=2.3.0; python_version < '3.14'
|
|
34
33
|
Requires-Dist: asgiref>=3.11.1; python_version >= '3.14'
|
|
35
34
|
Requires-Dist: attrs!=25.2.0,>=24.2.0
|
|
36
35
|
Requires-Dist: babel>=2.17.0
|
|
36
|
+
Requires-Dist: cadwyn>=6.1.1
|
|
37
37
|
Requires-Dist: colorlog>=6.8.2
|
|
38
38
|
Requires-Dist: fsspec>=2023.10.0
|
|
39
39
|
Requires-Dist: greenback>=1.2.1
|
|
40
|
-
Requires-Dist:
|
|
40
|
+
Requires-Dist: httpx2>=2.0.0
|
|
41
41
|
Requires-Dist: importlib-metadata>=6.5; python_version < '3.12'
|
|
42
42
|
Requires-Dist: isoduration>=20.11.0
|
|
43
43
|
Requires-Dist: jinja2>=3.1.5
|
|
@@ -53,8 +53,10 @@ Requires-Dist: psutil>=6.1.0
|
|
|
53
53
|
Requires-Dist: pydantic>2.11.0
|
|
54
54
|
Requires-Dist: pygtrie>=2.5.0
|
|
55
55
|
Requires-Dist: python-dateutil>=2.7.0
|
|
56
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
56
57
|
Requires-Dist: structlog>=26.1.0
|
|
57
58
|
Requires-Dist: tenacity>=8.3.0
|
|
59
|
+
Requires-Dist: truststore>=0.10.0
|
|
58
60
|
Requires-Dist: typing-extensions>=4.14.1
|
|
59
61
|
Provides-Extra: all
|
|
60
62
|
Requires-Dist: datadog>=0.50.0; extra == 'all'
|
{apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/dev/generate_task_sdk_models.py
RENAMED
|
@@ -20,8 +20,9 @@ import json
|
|
|
20
20
|
import os
|
|
21
21
|
import sys
|
|
22
22
|
from pathlib import Path
|
|
23
|
+
from tomllib import load as load_tomllib
|
|
23
24
|
|
|
24
|
-
import
|
|
25
|
+
import httpx2
|
|
25
26
|
from datamodel_code_generator import (
|
|
26
27
|
DataModelType,
|
|
27
28
|
DatetimeClassType,
|
|
@@ -47,11 +48,6 @@ task_sdk_root = Path(__file__).parents[1]
|
|
|
47
48
|
|
|
48
49
|
|
|
49
50
|
def load_config():
|
|
50
|
-
try:
|
|
51
|
-
from tomllib import load as load_tomllib
|
|
52
|
-
except ImportError:
|
|
53
|
-
from tomli import load as load_tomllib
|
|
54
|
-
|
|
55
51
|
pyproject = AIRFLOW_TASK_SDK_ROOT_PATH / "pyproject.toml"
|
|
56
52
|
# Simulate what `datamodel-code-generator` does on the CLI
|
|
57
53
|
with pyproject.open("rb") as fh:
|
|
@@ -81,7 +77,7 @@ def generate_file():
|
|
|
81
77
|
app = InProcessExecutionAPI()
|
|
82
78
|
|
|
83
79
|
latest_version = app.app.versions.version_values[0]
|
|
84
|
-
client =
|
|
80
|
+
client = httpx2.Client(transport=app.transport)
|
|
85
81
|
openapi_schema = (
|
|
86
82
|
client.get(f"http://localhost/openapi.json?version={latest_version}").raise_for_status().text
|
|
87
83
|
)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"title": "Airflow Executable SDK Bundle Metadata",
|
|
5
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
6
|
"type": "object",
|
|
7
|
-
"required": ["airflow_bundle_metadata_version", "sdk", "
|
|
7
|
+
"required": ["airflow_bundle_metadata_version", "sdk", "dags"],
|
|
8
8
|
"additionalProperties": true,
|
|
9
9
|
"properties": {
|
|
10
10
|
"airflow_bundle_metadata_version": {
|
|
@@ -35,21 +35,63 @@
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
|
-
"
|
|
38
|
+
"entrypoint_path": {
|
|
39
39
|
"type": "string",
|
|
40
|
-
"description": "
|
|
40
|
+
"description": "Path of the entrypoint source file (e.g. 'example/bundle/main.go'). It must be one of the sources paths. Shown for a Dag that dag_source_paths does not map.",
|
|
41
41
|
"minLength": 1
|
|
42
42
|
},
|
|
43
|
+
"dag_source_paths": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"description": "Mapping of dag_id to the path of the file that defines the Dag. Every value must be one of the sources paths.",
|
|
46
|
+
"additionalProperties": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"minLength": 1
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"sources": {
|
|
52
|
+
"type": "array",
|
|
53
|
+
"description": "The embedded source files, in the order they appear in the source region. A bundle without it embeds no source. Paths must be unique.",
|
|
54
|
+
"items": {
|
|
55
|
+
"$ref": "#/$defs/sourceEntry"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
43
58
|
"dags": {
|
|
44
59
|
"type": "object",
|
|
45
|
-
"description": "Mapping of dag_id to
|
|
46
|
-
"minProperties": 1,
|
|
60
|
+
"description": "Mapping of dag_id to the tasks the bundle runs for a Python Dag with stub TaskHandler. May be empty, for example when the bundle only declares Dag definitions.",
|
|
47
61
|
"additionalProperties": {
|
|
48
62
|
"$ref": "#/$defs/dagEntry"
|
|
49
63
|
}
|
|
50
64
|
}
|
|
51
65
|
},
|
|
52
66
|
"$defs": {
|
|
67
|
+
"sourceEntry": {
|
|
68
|
+
"type": "object",
|
|
69
|
+
"description": "One embedded source file inside the bundle's source region.",
|
|
70
|
+
"required": ["path", "offset", "length", "sha256"],
|
|
71
|
+
"additionalProperties": true,
|
|
72
|
+
"properties": {
|
|
73
|
+
"path": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"description": "The file's path as the author knows it (e.g. 'example/bundle/main.go').",
|
|
76
|
+
"minLength": 1
|
|
77
|
+
},
|
|
78
|
+
"offset": {
|
|
79
|
+
"type": "integer",
|
|
80
|
+
"description": "The file's start, in bytes from the start of the source region.",
|
|
81
|
+
"minimum": 0
|
|
82
|
+
},
|
|
83
|
+
"length": {
|
|
84
|
+
"type": "integer",
|
|
85
|
+
"description": "The file's length in bytes.",
|
|
86
|
+
"minimum": 0
|
|
87
|
+
},
|
|
88
|
+
"sha256": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"description": "Lower-case hexadecimal SHA-256 of the file's bytes.",
|
|
91
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
53
95
|
"dagEntry": {
|
|
54
96
|
"type": "object",
|
|
55
97
|
"description": "Static description of a single DAG declared in the bundle.",
|
|
@@ -94,6 +94,8 @@ Bases
|
|
|
94
94
|
|
|
95
95
|
.. autoapiclass:: airflow.sdk.BaseXCom
|
|
96
96
|
|
|
97
|
+
.. autoapiclass:: airflow.sdk.bases.xcom.XComCoordinate
|
|
98
|
+
|
|
97
99
|
.. autoapiclass:: airflow.sdk.BranchMixIn
|
|
98
100
|
|
|
99
101
|
.. autoapiclass:: airflow.sdk.PokeReturnValue
|
|
@@ -130,6 +132,8 @@ Tasks & Operators
|
|
|
130
132
|
-----------------
|
|
131
133
|
.. autoapiclass:: airflow.sdk.TaskGroup
|
|
132
134
|
|
|
135
|
+
.. autoapiclass:: airflow.sdk.LoopDecision
|
|
136
|
+
|
|
133
137
|
.. autoclass:: airflow.sdk.TaskInstance
|
|
134
138
|
|
|
135
139
|
.. autoapiclass:: airflow.sdk.XComArg
|
|
@@ -156,6 +160,8 @@ Tasks page in the core docs for usage and design rationale.
|
|
|
156
160
|
|
|
157
161
|
.. autoapiclass:: airflow.sdk.ExceptionRetryPolicy
|
|
158
162
|
|
|
163
|
+
.. autoapiclass:: airflow.sdk.ChainRetryPolicy
|
|
164
|
+
|
|
159
165
|
.. autoapiclass:: airflow.sdk.RetryRule
|
|
160
166
|
|
|
161
167
|
.. autoapiclass:: airflow.sdk.RetryDecision
|
|
@@ -202,8 +208,12 @@ Assets
|
|
|
202
208
|
|
|
203
209
|
Timetables
|
|
204
210
|
----------
|
|
211
|
+
.. autoapiclass:: airflow.sdk.AssetAndTimeSchedule
|
|
212
|
+
|
|
205
213
|
.. autoapiclass:: airflow.sdk.AssetOrTimeSchedule
|
|
206
214
|
|
|
215
|
+
.. autoapiclass:: airflow.sdk.AssetTriggeredTimetable
|
|
216
|
+
|
|
207
217
|
.. autoapiclass:: airflow.sdk.CronDataIntervalTimetable
|
|
208
218
|
|
|
209
219
|
.. autoapiclass:: airflow.sdk.CronTriggerTimetable
|
|
@@ -302,6 +312,45 @@ See :doc:`apache-airflow:authoring-and-scheduling/language-sdks/index` for a con
|
|
|
302
312
|
|
|
303
313
|
.. autoapiclass:: airflow.sdk.coordinators.executable.ExecutableCoordinator
|
|
304
314
|
|
|
315
|
+
.. rubric:: Node.js (TypeScript)
|
|
316
|
+
|
|
317
|
+
.. autoapiclass:: airflow.sdk.coordinators.node.NodeCoordinator
|
|
318
|
+
|
|
319
|
+
Dag Importers
|
|
320
|
+
-------------
|
|
321
|
+
|
|
322
|
+
|experimental|
|
|
323
|
+
|
|
324
|
+
Dag importers turn the contents of a Dag bundle into Dags. This interface may still change in a minor
|
|
325
|
+
release while it is being stabilized. See :doc:`apache-airflow:administration-and-deployment/dag-importers` for how
|
|
326
|
+
importers are configured and how to write one.
|
|
327
|
+
|
|
328
|
+
.. autoapiclass:: airflow.sdk.importers.AbstractDagImporter
|
|
329
|
+
|
|
330
|
+
.. autoapiclass:: airflow.sdk.importers.DagDefinition
|
|
331
|
+
|
|
332
|
+
.. autoapiclass:: airflow.sdk.importers.FileDagDefinition
|
|
333
|
+
|
|
334
|
+
.. autoapiclass:: airflow.sdk.importers.FilesystemDagDefinition
|
|
335
|
+
|
|
336
|
+
.. autoapiclass:: airflow.sdk.importers.DagImportResult
|
|
337
|
+
|
|
338
|
+
.. autoapiclass:: airflow.sdk.importers.DagImportError
|
|
339
|
+
|
|
340
|
+
.. autoapiclass:: airflow.sdk.importers.DagImportWarning
|
|
341
|
+
|
|
342
|
+
.. autoapiclass:: airflow.sdk.importers.DagSourceCode
|
|
343
|
+
|
|
344
|
+
.. autoapifunction:: airflow.sdk.importers.find_file_dag_definitions
|
|
345
|
+
|
|
346
|
+
.. autoapifunction:: airflow.sdk.importers.get_file_suffix
|
|
347
|
+
|
|
348
|
+
.. rubric:: Built-in importers
|
|
349
|
+
|
|
350
|
+
.. autoapiclass:: airflow.sdk.importers.PythonDagImporter
|
|
351
|
+
|
|
352
|
+
.. autoapiclass:: airflow.sdk.importers.ZipImporter
|
|
353
|
+
|
|
305
354
|
Execution Time Components
|
|
306
355
|
-------------------------
|
|
307
356
|
.. rubric:: Context
|
|
@@ -45,7 +45,7 @@ Understanding the task lifecycle helps Dag authors write more effective tasks an
|
|
|
45
45
|
- ``task_reschedule_count``: Number of times this task has been rescheduled
|
|
46
46
|
- ``variables``: List of Airflow variables accessible to the task instance
|
|
47
47
|
- ``connections``: List of Airflow connections accessible to the task instance
|
|
48
|
-
- ``upstream_map_indexes``: Mapping of upstream task IDs to their map indexes for
|
|
48
|
+
- ``upstream_map_indexes``: Mapping of upstream task IDs to their map indexes for task mapping scenarios
|
|
49
49
|
- ``next_method``: Method name to call when resuming from a deferred state (set when task resumes from a trigger)
|
|
50
50
|
- ``next_kwargs``: Arguments to pass to the ``next_method`` (can be encrypted for sensitive data)
|
|
51
51
|
- ``xcom_keys_to_clear``: List of XCom keys that need to be cleared and purged by the worker
|
|
@@ -38,7 +38,7 @@ Deferred Operators
|
|
|
38
38
|
------------------
|
|
39
39
|
|
|
40
40
|
A deferred operator is an operator that can pause its execution until an external trigger event occurs,
|
|
41
|
-
without holding a worker slot. For more details see :doc:`airflow:authoring-and-scheduling/deferring`.
|
|
41
|
+
without holding a worker slot. For more details see :doc:`apache-airflow:authoring-and-scheduling/deferring`.
|
|
42
42
|
Examples include the HttpOperator in deferrable mode, sensors or operators integrated with triggers.
|
|
43
43
|
|
|
44
44
|
Key characteristics:
|
|
@@ -65,7 +65,7 @@ When to Use Deferred Operators
|
|
|
65
65
|
Prefer a deferred operator when:
|
|
66
66
|
|
|
67
67
|
- There is an existing deferrable operator that covers your use case (e.g., HttpOperator deferrable mode).
|
|
68
|
-
- The task waits for a single or limited
|
|
68
|
+
- The task waits for a single external event or a limited number of events.
|
|
69
69
|
- You want to free worker resources while waiting for triggers.
|
|
70
70
|
- You don't need to loop over the same operator multiple times (e.g. multiplexing).
|
|
71
71
|
|
|
@@ -265,17 +265,17 @@ it is equally important to understand scenarios where one may **not** be appropr
|
|
|
265
265
|
If your workflow is better suited for deferring but no operator exists yet,
|
|
266
266
|
consider implementing a custom deferred operator rather than defaulting to async.
|
|
267
267
|
|
|
268
|
-
Comparison with
|
|
269
|
-
|
|
268
|
+
Comparison with task mapping
|
|
269
|
+
----------------------------
|
|
270
270
|
|
|
271
|
-
Async operators and
|
|
271
|
+
Async operators and task mapping solve different problems and have different trade-offs.
|
|
272
272
|
|
|
273
273
|
.. list-table::
|
|
274
274
|
:header-rows: 1
|
|
275
275
|
|
|
276
276
|
* - Aspect
|
|
277
277
|
- Async ``@task``
|
|
278
|
-
-
|
|
278
|
+
- Task mapping (deferrable)
|
|
279
279
|
* - Worker slots
|
|
280
280
|
- 1 worker slot (shared event loop)
|
|
281
281
|
- N worker slots (one per mapped task instance)
|
|
@@ -292,5 +292,5 @@ Async operators and Dynamic Task Mapping solve different problems and have diffe
|
|
|
292
292
|
- Minimal
|
|
293
293
|
- Scheduler must manage N task instances
|
|
294
294
|
|
|
295
|
-
For more details about
|
|
296
|
-
:ref:`
|
|
295
|
+
For more details about task mapping, see the
|
|
296
|
+
:ref:`task mapping <sdk-dynamic-task-mapping>` page.
|
{apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/dynamic-task-mapping.rst
RENAMED
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
|
|
18
18
|
.. _sdk-dynamic-task-mapping:
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
Mapped tasks with Task SDK
|
|
21
|
+
==========================
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Task mapping, also called dynamic task mapping, allows tasks defined with the Task SDK to generate
|
|
24
24
|
a variable number of task instances at runtime based on upstream data.
|
|
25
25
|
This is enabled via the ``expand()`` method on tasks, providing a way
|
|
26
26
|
to parallelize execution without knowing the number of tasks ahead of time.
|
|
@@ -96,4 +96,4 @@ For advanced patterns—such as repeated mapping, cross-product mapping,
|
|
|
96
96
|
named mappings (via ``map_index_template``), and handling large
|
|
97
97
|
datasets—see the Airflow Core documentation:
|
|
98
98
|
|
|
99
|
-
`
|
|
99
|
+
`Mapped tasks in the Airflow Core docs <https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/dynamic-task-mapping.html>`_.
|
|
@@ -63,13 +63,13 @@ Tasks and Operators
|
|
|
63
63
|
|
|
64
64
|
Example: Defining tasks and using operators
|
|
65
65
|
|
|
66
|
-
Use the :func:`airflow.sdk.task` decorator to wrap Python callables as tasks and leverage
|
|
66
|
+
Use the :func:`airflow.sdk.task` decorator to wrap Python callables as tasks and leverage task mapping with the ``.expand()`` method. Tasks communicate via :class:`airflow.sdk.XComArg`. For traditional operators and sensors, import classes like :class:`airflow.sdk.BaseOperator` or :class:`airflow.sdk.Sensor`.
|
|
67
67
|
|
|
68
68
|
.. exampleinclude:: ../../airflow-core/src/airflow/example_dags/example_dynamic_task_mapping.py
|
|
69
69
|
:language: python
|
|
70
70
|
:start-after: [START example_dynamic_task_mapping]
|
|
71
71
|
:end-before: [END example_dynamic_task_mapping]
|
|
72
|
-
:caption:
|
|
72
|
+
:caption: Task mapping with ``expand()``
|
|
73
73
|
|
|
74
74
|
.. exampleinclude:: ../../airflow-core/src/airflow/example_dags/example_xcomargs.py
|
|
75
75
|
:language: python
|
|
@@ -100,7 +100,7 @@ TaskFlow API Tutorial
|
|
|
100
100
|
---------------------
|
|
101
101
|
|
|
102
102
|
This section provides a concise, code-first view. For the full tutorial and context,
|
|
103
|
-
see the
|
|
103
|
+
see the :doc:`core TaskFlow tutorial <apache-airflow:tutorial/taskflow>`.
|
|
104
104
|
|
|
105
105
|
Step 1: Define the Dag
|
|
106
106
|
----------------------
|
{apache_airflow_task_sdk-1.3.2rc1 → apache_airflow_task_sdk-1.4.0b2}/docs/executable-bundle-spec.rst
RENAMED
|
@@ -42,29 +42,37 @@ A bundle file therefore has three regions, in order from offset 0:
|
|
|
42
42
|
|
|
43
43
|
1. The native executable (ELF / Mach-O / PE), including any code-signing
|
|
44
44
|
structures the platform appends.
|
|
45
|
-
2. The
|
|
45
|
+
2. The embedded source files, each verbatim (UTF-8), back to back. MAY have length 0.
|
|
46
|
+
The metadata indexes them. See :ref:`the source region <bundle-source-region>`.
|
|
46
47
|
3. The build-time manifest (``airflow-metadata.yaml`` content, UTF-8).
|
|
47
48
|
|
|
48
49
|
The file ends with a fixed 64-byte trailer that locates regions (2) and (3),
|
|
49
50
|
carries an integrity hash of the binary region, and identifies the file as a
|
|
50
51
|
bundle. See :ref:`bundle-trailer-layout`.
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
A bundle file has no file extension, and the Dag processor does not treat a
|
|
54
|
+
file with an extension as a bundle. The scanner identifies bundles by the
|
|
55
|
+
trailer's magic.
|
|
55
56
|
|
|
56
57
|
The complete bundle file regions are:
|
|
57
58
|
|
|
58
59
|
.. code-block:: text
|
|
59
60
|
|
|
60
61
|
[0, source_start) native binary (must be non-empty)
|
|
61
|
-
[source_start, metadata_start) embedded source (may be zero length)
|
|
62
|
+
[source_start, metadata_start) embedded source files (may be zero length)
|
|
62
63
|
[metadata_start, file_size-64) build-time manifest
|
|
63
64
|
[file_size-64, file_size) 64-byte trailer
|
|
64
65
|
|
|
65
66
|
where ``metadata_start = file_size - 64 - metadata_len`` and
|
|
66
67
|
``source_start = metadata_start - source_len``.
|
|
67
68
|
|
|
69
|
+
.. _bundle-source-region:
|
|
70
|
+
|
|
71
|
+
The source region holds the source files of the Dags the bundle defines, one entry per file. Files
|
|
72
|
+
are concatenated with no separator, and the ``sources`` list in the manifest gives each file's
|
|
73
|
+
``path``, ``offset`` and ``length`` within the region and its ``sha256``. A file's ``offset`` is
|
|
74
|
+
relative to ``source_start``, so the first file has offset ``0``.
|
|
75
|
+
|
|
68
76
|
Reference Implementation
|
|
69
77
|
------------------------
|
|
70
78
|
|
|
@@ -78,12 +86,13 @@ for SDK users. Go SDK's ``airflow-go-pack`` is a good example.
|
|
|
78
86
|
#!/usr/bin/env python3
|
|
79
87
|
|
|
80
88
|
import hashlib
|
|
89
|
+
import pathlib
|
|
81
90
|
import shutil
|
|
82
91
|
import struct
|
|
83
92
|
|
|
84
93
|
BINARY = pathlib.Path(...) # Path to the compiled executable.
|
|
85
94
|
OUTPUT = pathlib.Path(...) # Where to put the processed executable.
|
|
86
|
-
|
|
95
|
+
SOURCES = [b"..."] # Source files to embed, in the order the manifest lists them.
|
|
87
96
|
METADATA = b"..." # UTF-8-encoded YAML metadata.
|
|
88
97
|
|
|
89
98
|
# SHA-256 covers the binary region only: bytes [0, source_start).
|
|
@@ -91,7 +100,7 @@ for SDK users. Go SDK's ``airflow-go-pack`` is a good example.
|
|
|
91
100
|
|
|
92
101
|
trailer = struct.pack(
|
|
93
102
|
"<III 32s 12s 8s",
|
|
94
|
-
len
|
|
103
|
+
sum(map(len, SOURCES)), # source_len
|
|
95
104
|
len(METADATA), # metadata_len
|
|
96
105
|
1, # footer_ver
|
|
97
106
|
binary_sha256,
|
|
@@ -102,7 +111,7 @@ for SDK users. Go SDK's ``airflow-go-pack`` is a good example.
|
|
|
102
111
|
|
|
103
112
|
shutil.copy(BINARY, OUTPUT)
|
|
104
113
|
with OUTPUT.open("ab") as fh:
|
|
105
|
-
fh.
|
|
114
|
+
fh.writelines(SOURCES) # Embedded source region.
|
|
106
115
|
fh.write(METADATA) # Metadata region.
|
|
107
116
|
fh.write(trailer)
|
|
108
117
|
OUTPUT.chmod(0o755)
|
|
@@ -155,9 +164,17 @@ Reader algorithm:
|
|
|
155
164
|
re-hash on every exec; a cache miss (file replaced, mtime bumped)
|
|
156
165
|
triggers re-verification.
|
|
157
166
|
7. Read ``metadata_len`` bytes from ``metadata_start`` for the manifest.
|
|
158
|
-
8. Read
|
|
159
|
-
|
|
160
|
-
|
|
167
|
+
8. Read the source files through the manifest's ``sources`` list. For each entry, check that
|
|
168
|
+
``offset`` and ``length`` are non-negative integers and that ``offset + length <= source_len``.
|
|
169
|
+
To read a file, read ``length`` bytes from ``source_start + offset`` and compare their SHA-256 to
|
|
170
|
+
``sha256``. A duplicate ``path`` or a digest mismatch is an error. Without a ``sources`` key, no
|
|
171
|
+
source is embedded, and the UI shows a notice in place of the source.
|
|
172
|
+
|
|
173
|
+
A Dag's source file is the ``dag_source_paths`` entry for its ``dag_id``. A Dag with no entry,
|
|
174
|
+
such as one built dynamically, shows ``entrypoint_path``. A Dag owned by another language, such as
|
|
175
|
+
the Python Dag that a bundle's task handlers run for, shows its own source and not an embedded
|
|
176
|
+
file. ``entrypoint_path`` and every ``dag_source_paths`` value MUST be one of the ``sources``
|
|
177
|
+
paths.
|
|
161
178
|
|
|
162
179
|
Source comes *before* metadata so a future ``footer_ver`` MAY introduce
|
|
163
180
|
additional trailing blobs (e.g. signed checksums, compressed deps) by
|
|
@@ -181,7 +198,19 @@ and editors.
|
|
|
181
198
|
language: go
|
|
182
199
|
version: "0.1.0"
|
|
183
200
|
supervisor_schema_version: "2026-06-16"
|
|
184
|
-
|
|
201
|
+
entrypoint_path: example/bundle/main.go
|
|
202
|
+
dag_source_paths:
|
|
203
|
+
example_dag: example/bundle/main.go
|
|
204
|
+
another_dag: example/bundle/dags/another.go
|
|
205
|
+
sources:
|
|
206
|
+
- path: example/bundle/main.go
|
|
207
|
+
offset: 0
|
|
208
|
+
length: 1532
|
|
209
|
+
sha256: 0f3a...e91c
|
|
210
|
+
- path: example/bundle/dags/another.go
|
|
211
|
+
offset: 1532
|
|
212
|
+
length: 811
|
|
213
|
+
sha256: 7b21...04d8
|
|
185
214
|
dags:
|
|
186
215
|
example_dag:
|
|
187
216
|
tasks:
|
|
@@ -213,17 +242,30 @@ Top-level keys:
|
|
|
213
242
|
task-execution time, and an unknown version causes that bundle to be
|
|
214
243
|
skipped.
|
|
215
244
|
|
|
216
|
-
``
|
|
217
|
-
|
|
218
|
-
The
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
245
|
+
``entrypoint_path`` (string, optional)
|
|
246
|
+
Path of the entrypoint source file, such as the Go ``main`` package file. It MUST be one of
|
|
247
|
+
the ``sources`` paths. The Airflow UI shows it for a Dag that ``dag_source_paths`` does not map.
|
|
248
|
+
|
|
249
|
+
``dag_source_paths`` (mapping, optional)
|
|
250
|
+
Mapping of ``dag_id`` to the path of the file that defines the Dag. Every value MUST be one of
|
|
251
|
+
the ``sources`` paths.
|
|
252
|
+
|
|
253
|
+
``sources`` (list, optional)
|
|
254
|
+
The embedded source files, in the order they appear in the source region. A bundle without it
|
|
255
|
+
embeds no source. Each entry has:
|
|
256
|
+
|
|
257
|
+
- ``path`` (string, required): the file's path as the author knows it, such as
|
|
258
|
+
``example/bundle/main.go``. Paths MUST be unique. The Airflow UI picks a syntax-highlighting
|
|
259
|
+
mode from the extension.
|
|
260
|
+
- ``offset`` (integer, required): the file's start, in bytes from ``source_start``.
|
|
261
|
+
- ``length`` (integer, required): the file's length in bytes.
|
|
262
|
+
- ``sha256`` (string, required): the lower-case hexadecimal SHA-256 of the file's bytes.
|
|
222
263
|
|
|
223
264
|
``dags`` (mapping, required)
|
|
224
|
-
Mapping of ``dag_id`` to a *DAG entry
|
|
225
|
-
|
|
226
|
-
|
|
265
|
+
Mapping of ``dag_id`` to a *DAG entry*, for each Python Dag with stub TaskHandler whose tasks the
|
|
266
|
+
bundle runs. The scanner uses these keys to match a task-execution request to the bundle that
|
|
267
|
+
owns it. The mapping MAY be empty, for example when the bundle only declares Dag definitions,
|
|
268
|
+
because the Dag processor finds those by running the binary.
|
|
227
269
|
|
|
228
270
|
DAG entry fields:
|
|
229
271
|
|
|
@@ -242,16 +284,16 @@ Go bundle::
|
|
|
242
284
|
|
|
243
285
|
example
|
|
244
286
|
├── ELF/Mach-O/PE executable
|
|
245
|
-
├── source region:
|
|
246
|
-
├── metadata region: airflow-metadata.yaml (
|
|
287
|
+
├── source region: example/bundle/main.go, example/bundle/dags/another.go
|
|
288
|
+
├── metadata region: airflow-metadata.yaml (entrypoint_path, dag_source_paths, sources)
|
|
247
289
|
└── trailer (64 B): lengths + binary_sha256 + AFBNDL01 magic
|
|
248
290
|
|
|
249
291
|
Rust bundle::
|
|
250
292
|
|
|
251
293
|
pipeline
|
|
252
294
|
├── ELF/Mach-O/PE executable
|
|
253
|
-
├── source region:
|
|
254
|
-
├── metadata region: airflow-metadata.yaml (
|
|
295
|
+
├── source region: src/main.rs
|
|
296
|
+
├── metadata region: airflow-metadata.yaml (entrypoint_path: src/main.rs)
|
|
255
297
|
└── trailer (64 B): lengths + binary_sha256 + AFBNDL01 magic
|
|
256
298
|
|
|
257
299
|
The bundle is one file. ``./example`` runs the binary; the appended data
|
|
@@ -271,7 +313,7 @@ that perform additional post-build steps MUST observe the following order:
|
|
|
271
313
|
binary region; nothing has been written past its OS-defined end yet, so
|
|
272
314
|
the digest matches what the reader will recompute over
|
|
273
315
|
``[0, source_start)`` after the append.
|
|
274
|
-
- **Append** ``<
|
|
316
|
+
- **Append** ``<sources><metadata><trailer>`` in a single write so a
|
|
275
317
|
partially written file fails the magic or hash check rather than
|
|
276
318
|
appearing as a half-valid bundle.
|
|
277
319
|
|
|
@@ -282,10 +324,10 @@ Code Signing
|
|
|
282
324
|
|
|
283
325
|
The bundle format itself does not require OS-level code signing.
|
|
284
326
|
``binary_sha256`` provides integrity against truncation, in-flight
|
|
285
|
-
corruption, and naive tampering, and Airflow's threat model treats
|
|
286
|
-
|
|
287
|
-
(signed by a trusted identity) is a deployment-time concern
|
|
288
|
-
bundle-format one.
|
|
327
|
+
corruption, and naive tampering, and Airflow's threat model treats the Dag
|
|
328
|
+
bundle holding the bundles as Deployment-Manager-controlled, so
|
|
329
|
+
*authenticity* (signed by a trusted identity) is a deployment-time concern
|
|
330
|
+
rather than a bundle-format one.
|
|
289
331
|
|
|
290
332
|
**Compressors** such as UPX are NOT supported. They rewrite the file
|
|
291
333
|
end-to-end, destroying both the trailer and the hash invariant.
|
|
@@ -298,22 +340,24 @@ yields a byte-identical bundle file (and therefore a stable
|
|
|
298
340
|
Deployment Layout
|
|
299
341
|
-----------------
|
|
300
342
|
|
|
301
|
-
Bundle files are placed **as-is** in
|
|
302
|
-
``
|
|
343
|
+
Bundle files are placed **as-is** in the Dag bundle named by the
|
|
344
|
+
``task_handler_bundle_name`` kwarg on the
|
|
303
345
|
:class:`~airflow.sdk.coordinators.executable.ExecutableCoordinator` entry
|
|
304
|
-
under ``[sdk] coordinators
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
their trailer. For each candidate it reads the last 64 bytes and treats files
|
|
346
|
+
under ``[sdk] coordinators`` (or, when it is unset, in the task's own Dag
|
|
347
|
+
bundle). The scanner walks the Dag bundle **recursively** and considers every
|
|
348
|
+
regular file. For each candidate it reads the last 64 bytes and treats files
|
|
308
349
|
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
|
-
|
|
311
|
-
|
|
312
|
-
|
|
350
|
+
SHA-256-verified per the reader algorithm; a mismatch demotes the file back to
|
|
351
|
+
"ignored, with an error log." Files without the magic are silently ignored, so
|
|
352
|
+
non-bundle files (READMEs, dotfiles) MAY share the Dag bundle without
|
|
353
|
+
interfering with the scan. A file that matches the selected bundle's
|
|
354
|
+
``dag_id`` is marked executable before it is run, so an object-store Dag
|
|
355
|
+
bundle (which has no concept of file permissions, and so cannot preserve the
|
|
356
|
+
execute bit a build produced) works too.
|
|
313
357
|
|
|
314
358
|
::
|
|
315
359
|
|
|
316
|
-
/opt/airflow/
|
|
360
|
+
/opt/airflow/go-task-handlers/
|
|
317
361
|
├── example
|
|
318
362
|
├── team-a/
|
|
319
363
|
│ └── pipeline
|
|
@@ -86,6 +86,7 @@ Why use ``airflow.sdk``?
|
|
|
86
86
|
- :class:`airflow.sdk.BaseOperator`
|
|
87
87
|
- :class:`airflow.sdk.BaseOperatorLink`
|
|
88
88
|
- :class:`airflow.sdk.BaseSensorOperator`
|
|
89
|
+
- :class:`airflow.sdk.ChainRetryPolicy`
|
|
89
90
|
- :class:`airflow.sdk.Connection`
|
|
90
91
|
- :class:`airflow.sdk.Context`
|
|
91
92
|
- :class:`airflow.sdk.DAG`
|
|
@@ -99,6 +100,7 @@ Why use ``airflow.sdk``?
|
|
|
99
100
|
- :class:`airflow.sdk.RetryPolicy`
|
|
100
101
|
- :class:`airflow.sdk.RetryRule`
|
|
101
102
|
- :class:`airflow.sdk.TaskGroup`
|
|
103
|
+
- :class:`airflow.sdk.LoopDecision`
|
|
102
104
|
- :class:`airflow.sdk.TaskInstanceState`
|
|
103
105
|
- :class:`airflow.sdk.DagRunState`
|
|
104
106
|
- :class:`airflow.sdk.WeightRule`
|
|
@@ -178,4 +180,6 @@ For the full public API reference, see the :doc:`api` page.
|
|
|
178
180
|
resumable-job-mixin
|
|
179
181
|
api
|
|
180
182
|
concepts
|
|
183
|
+
lang-sdk
|
|
181
184
|
executable-bundle-spec
|
|
185
|
+
ts-bundle-spec
|