apache-airflow-task-sdk 1.4.0b1__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.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/PKG-INFO +3 -2
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/dev/generate_task_sdk_models.py +2 -2
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/airflow-metadata.schema.json +1 -2
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/api.rst +4 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/conf.py +1 -1
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/executable-bundle-spec.rst +4 -3
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/index.rst +1 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/lang-sdk-spec.rst +3 -3
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/pyproject.toml +7 -3
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/__init__.py +4 -1
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/__init__.pyi +2 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/remote.py +12 -4
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/structlog.py +7 -12
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/metrics_template.yaml +6 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/secrets_masker/secrets_masker.py +20 -12
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/client.py +49 -29
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/datamodels/_generated.py +15 -1
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/xcom.py +339 -44
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/_subprocess.py +39 -2
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/loop.py +5 -5
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/deadline.py +18 -19
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/task_group.py +5 -1
- apache_airflow_task_sdk-1.4.0b2/src/airflow/sdk/definitions/loop.py +33 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/retry_policy.py +87 -7
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/callback_supervisor.py +31 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/comms.py +7 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/lazy_sequence.py +2 -2
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/loop.py +48 -22
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/schema.json +49 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/versions/v2026_10_30.py +10 -2
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/supervisor.py +66 -17
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/task_runner.py +87 -35
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/yaml_importer/builder.py +246 -50
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/types.py +2 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/__init__.py +5 -5
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/api/test_client.py +447 -399
- apache_airflow_task_sdk-1.4.0b2/tests/task_sdk/bases/test_xcom.py +667 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/test_subprocess.py +176 -3
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_retry_policy.py +113 -8
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_callback_supervisor.py +119 -2
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_lazy_sequence.py +27 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_loop.py +128 -86
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_request_handlers.py +3 -3
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_secrets.py +20 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_supervisor.py +263 -79
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_task_runner.py +294 -19
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/importers/yaml_importer/test_importer.py +201 -0
- apache_airflow_task_sdk-1.4.0b1/tests/task_sdk/bases/test_xcom.py +0 -290
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/.gitignore +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/.pre-commit-config.yaml +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/LICENSE +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/NOTICE +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/README.md +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/dev/datamodel_code_formatter.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/.gitignore +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/concepts.rst +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/deferred-vs-async-operators.rst +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/dynamic-task-mapping.rst +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/examples.rst +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/img/airflow-2-approach.png +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/img/airflow-2-arch.png +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/img/airflow-3-arch.png +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/img/airflow-3-task-sdk.png +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/lang-sdk.rst +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/resumable-job-mixin.rst +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/ts-bundle-spec.rst +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/configuration/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/configuration/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/configuration/parser.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/dagnode/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/dagnode/cycle.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/dagnode/node.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/listener.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/spec/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/spec/lifecycle.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/listeners/spec/taskinstance.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/_config.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/_noncaching.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/factory.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/percent_formatter.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/logging/types.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/module_loading/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/module_loading/dag_file.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/module_loading/file_discovery.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/common.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/base_stats_logger.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/datadog_logger.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/metrics_registry.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/otel_logger.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/protocols.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/stats.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/statsd_logger.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/metrics/validators.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/otel_env_config.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/observability/traces/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/plugins_manager/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/plugins_manager/plugins_manager.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/providers_discovery/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/providers_discovery/providers_discovery.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/secrets_backend/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/secrets_backend/base.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/secrets_masker/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/serialization/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/state/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/template_rendering/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/timezones/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/_shared/timezones/timezone.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/datamodels/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/datamodels/activities.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/branch.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/decorator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/hook.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/notifier.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/operator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/operatorlink.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/resumablejobmixin.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/secrets_backend.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/sensor.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/skipmixin.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/bases/timetable.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/configuration.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/_bundle_metadata.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/_dag_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/executable/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/executable/_bundle_reader.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/executable/_dag_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/executable/coordinator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/java/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/java/_dag_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/java/_jar_manifest.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/java/coordinator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/node/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/node/_bundle_reader.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/node/_dag_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/coordinators/node/coordinator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/crypto.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/abstractoperator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/contextmanager.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/dag_parsing_context.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/decorators.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/expandinput.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/logging_mixin.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/mixins.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/node.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/templater.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/_internal/types.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/asset/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/asset/access_control.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/asset/decorators.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/asset/metadata.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/callback.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/connection.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/context.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/dag.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/__init__.pyi +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/condition.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/decorators/setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/edges.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/mappedoperator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/operator_resources.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/param.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/allowed_key.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/base.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/chain.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/fixed_key.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/identity.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/product.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/temporal.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/wait_policy.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/partition_mappers/window.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/taskgroup.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/template.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/_cron.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/_delta.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/assets.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/events.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/interval.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/simple.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/timetables/trigger.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/variable.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/definitions/xcom_arg.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/bundles.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/cache.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/callback_runner.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/connection_test_supervisor.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/context.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/coordinator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/email_backend.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/execute_workload.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/hitl.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/macros.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/request_handlers.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/AGENTS.md +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/migrator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/schema/versions/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/secrets/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/secrets/execution_api.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/secrets_masker.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/sentry/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/sentry/configured.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/sentry/noop.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/task_mapping.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/timeout.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/tracing.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/execution_time/xcom.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/base.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/python_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/yaml_importer/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/yaml_importer/importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/yaml_importer/migrator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/yaml_importer/models.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/yaml_importer/parser.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/yaml_importer/schema.json +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/yaml_importer/versions/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/importers/zip_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/fs.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/path.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/stat.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/store.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/io/typedef.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/lineage.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/listener.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/log.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/module_loading.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/metrics/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/metrics/datadog_logger.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/metrics/otel_logger.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/metrics/stats_utils.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/metrics/statsd_logger.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/observability/stats.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/plugins_manager.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/providers_manager_runtime.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/py.typed +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/bignum.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/builtin.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/datetime.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/deltalake.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/iceberg.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/kubernetes.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/lazy_xcom_sequence.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/numpy.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/pandas.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/pydantic.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/timezone.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/serializers/uuid.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/serde/typing.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/state.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/timezone.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/yaml.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/conftest.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/api/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/notifier/test_notifier.txt +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_branch.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_decorator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_hook.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_notifier.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_operator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_resumablejobmixin.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_sensor.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/bases/test_skipmixin.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/executable/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/executable/_bundle_test_utils.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/executable/test_bundle_reader.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/executable/test_coordinator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/executable/test_dag_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/java/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/java/_jar_test_utils.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/java/test_coordinator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/java/test_dag_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/java/test_jar_manifest.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/node/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/node/_bundle_test_utils.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/node/test_bundle_reader.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/node/test_coordinator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/node/test_dag_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/coordinators/test_dag_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/dags/dag_parsing_context.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/dags/super_basic.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/dags/super_basic_deferred_run.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/dags/super_basic_run.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/_internal/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/_internal/test_decorators.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/_internal/test_loop.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/_internal/test_templater.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/conftest.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_condition.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_mapped.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_result.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/decorators/test_task_group.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/sensors/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_asset.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_asset_access_control.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_asset_decorators.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_callback.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_connection.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_context.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_dag.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_deadline.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_macros.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_mappedoperator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_mixins.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_module_loading.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_operator_resources.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_param.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_partition_mappers.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_taskgroup.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_template.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_variables.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_wait_policy.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/test_xcom_arg.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/timetables/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/timetables/test__cron.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/definitions/timetables/test_assets.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/docs/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/docs/test_docs_inventory.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/docs/test_public_api.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/_request_registration_types.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/conftest.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/exec_probe_target.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/schema/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/schema/_mock_version_bundle.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/schema/test_integration.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/schema/test_migrator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_bundles.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_cache.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_comms.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_connection_test_supervisor.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_context.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_context_cache.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_coordinator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_email_backend.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_hitl.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_sentry.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → 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.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_task_mapping.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_timeout.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/execution_time/test_tracing.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/importers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/importers/test_python_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/importers/test_registry.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/importers/test_zip_importer.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/importers/yaml_importer/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/importers/yaml_importer/example_dag.yaml +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/importers/yaml_importer/test_migrator.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/importers/yaml_importer/test_parser.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/io/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/io/test_path.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/serde/__init__.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/serde/test_serde.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/serde/test_serializers.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_configuration.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_crypto.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_exceptions.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_lineage.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_log.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_plugins_manager.py +0 -0
- {apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/tests/task_sdk/test_providers_manager_runtime.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: apache-airflow-task-sdk
|
|
3
|
-
Version: 1.4.
|
|
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/
|
|
@@ -37,7 +37,7 @@ 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
|
|
@@ -56,6 +56,7 @@ Requires-Dist: python-dateutil>=2.7.0
|
|
|
56
56
|
Requires-Dist: pyyaml>=6.0.3
|
|
57
57
|
Requires-Dist: structlog>=26.1.0
|
|
58
58
|
Requires-Dist: tenacity>=8.3.0
|
|
59
|
+
Requires-Dist: truststore>=0.10.0
|
|
59
60
|
Requires-Dist: typing-extensions>=4.14.1
|
|
60
61
|
Provides-Extra: all
|
|
61
62
|
Requires-Dist: datadog>=0.50.0; extra == 'all'
|
{apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/dev/generate_task_sdk_models.py
RENAMED
|
@@ -22,7 +22,7 @@ import sys
|
|
|
22
22
|
from pathlib import Path
|
|
23
23
|
from tomllib import load as load_tomllib
|
|
24
24
|
|
|
25
|
-
import
|
|
25
|
+
import httpx2
|
|
26
26
|
from datamodel_code_generator import (
|
|
27
27
|
DataModelType,
|
|
28
28
|
DatetimeClassType,
|
|
@@ -77,7 +77,7 @@ def generate_file():
|
|
|
77
77
|
app = InProcessExecutionAPI()
|
|
78
78
|
|
|
79
79
|
latest_version = app.app.versions.version_values[0]
|
|
80
|
-
client =
|
|
80
|
+
client = httpx2.Client(transport=app.transport)
|
|
81
81
|
openapi_schema = (
|
|
82
82
|
client.get(f"http://localhost/openapi.json?version={latest_version}").raise_for_status().text
|
|
83
83
|
)
|
|
@@ -57,8 +57,7 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dags": {
|
|
59
59
|
"type": "object",
|
|
60
|
-
"description": "Mapping of dag_id to
|
|
61
|
-
"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.",
|
|
62
61
|
"additionalProperties": {
|
|
63
62
|
"$ref": "#/$defs/dagEntry"
|
|
64
63
|
}
|
|
@@ -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
|
{apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/docs/executable-bundle-spec.rst
RENAMED
|
@@ -262,9 +262,10 @@ Top-level keys:
|
|
|
262
262
|
- ``sha256`` (string, required): the lower-case hexadecimal SHA-256 of the file's bytes.
|
|
263
263
|
|
|
264
264
|
``dags`` (mapping, required)
|
|
265
|
-
Mapping of ``dag_id`` to a *DAG entry
|
|
266
|
-
|
|
267
|
-
|
|
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.
|
|
268
269
|
|
|
269
270
|
DAG entry fields:
|
|
270
271
|
|
|
@@ -100,6 +100,7 @@ Why use ``airflow.sdk``?
|
|
|
100
100
|
- :class:`airflow.sdk.RetryPolicy`
|
|
101
101
|
- :class:`airflow.sdk.RetryRule`
|
|
102
102
|
- :class:`airflow.sdk.TaskGroup`
|
|
103
|
+
- :class:`airflow.sdk.LoopDecision`
|
|
103
104
|
- :class:`airflow.sdk.TaskInstanceState`
|
|
104
105
|
- :class:`airflow.sdk.DagRunState`
|
|
105
106
|
- :class:`airflow.sdk.WeightRule`
|
|
@@ -105,11 +105,11 @@ Per-SDK spelling
|
|
|
105
105
|
- an ``async`` function
|
|
106
106
|
* - ``TaskHandler``
|
|
107
107
|
- ``airflow.TaskHandler(dagId, taskId, fn)``
|
|
108
|
-
- ``@
|
|
108
|
+
- ``@Airflow.TaskHandler(dagId, taskId)``
|
|
109
109
|
- ``new TaskHandler(dagId, taskId, fn)``
|
|
110
110
|
* - ``Dag``
|
|
111
111
|
- ``airflow.Dag(spec)``
|
|
112
|
-
- ``@
|
|
112
|
+
- ``@Airflow.Dag(id, ...)``, or ``new Dag(id)``
|
|
113
113
|
- ``new Dag(id)``
|
|
114
114
|
* - ``dag``
|
|
115
115
|
- ``*airflow.DagRef``
|
|
@@ -117,7 +117,7 @@ Per-SDK spelling
|
|
|
117
117
|
- ``Dag``
|
|
118
118
|
* - ``dag.Task``
|
|
119
119
|
- ``dag.Task(fn, opts...)``
|
|
120
|
-
- ``@
|
|
120
|
+
- ``@Airflow.Task(id)``, or ``dag.task(id, cls)``
|
|
121
121
|
- ``dag.task(id, fn)``
|
|
122
122
|
* - data edge
|
|
123
123
|
- ``airflow.Inputs(refs...)``
|
|
@@ -55,7 +55,7 @@ dependencies = [
|
|
|
55
55
|
"cadwyn>=6.1.1",
|
|
56
56
|
"fsspec>=2023.10.0",
|
|
57
57
|
"greenback>=1.2.1",
|
|
58
|
-
"
|
|
58
|
+
"httpx2>=2.0.0",
|
|
59
59
|
"jinja2>=3.1.5",
|
|
60
60
|
"methodtools>=0.4.7",
|
|
61
61
|
"msgspec>=0.19.0",
|
|
@@ -64,6 +64,7 @@ dependencies = [
|
|
|
64
64
|
"pyyaml>=6.0.3",
|
|
65
65
|
"structlog>=26.1.0",
|
|
66
66
|
"tenacity>=8.3.0",
|
|
67
|
+
"truststore>=0.10.0",
|
|
67
68
|
# Start of shared timezones dependencies
|
|
68
69
|
"pendulum>=3.1.0",
|
|
69
70
|
# End of shared timezones dependencies
|
|
@@ -127,8 +128,8 @@ requires = [
|
|
|
127
128
|
"hatchling==1.32.4",
|
|
128
129
|
"packaging==26.3",
|
|
129
130
|
"pathspec==1.1.1",
|
|
130
|
-
"pluggy==1.
|
|
131
|
-
"tomlkit==0.15.
|
|
131
|
+
"pluggy==1.7.0",
|
|
132
|
+
"tomlkit==0.15.2",
|
|
132
133
|
"trove-classifiers==2026.9.21.13",
|
|
133
134
|
]
|
|
134
135
|
build-backend = "hatchling.build"
|
|
@@ -196,6 +197,9 @@ namespace-packages = ["src/airflow"]
|
|
|
196
197
|
# Generated file, be less strict
|
|
197
198
|
"src/airflow/sdk/*/_generated.py" = ["D"]
|
|
198
199
|
|
|
200
|
+
[tool.ruff.lint.flake8-tidy-imports.extend-banned-api]
|
|
201
|
+
"httpx".msg = "Use httpx2; httpx objects do not interoperate with the httpx2-based Task SDK client. See https://github.com/apache/airflow/issues/70522"
|
|
202
|
+
|
|
199
203
|
[tool.coverage.run]
|
|
200
204
|
branch = true
|
|
201
205
|
relative_files = true
|
{apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/__init__.py
RENAMED
|
@@ -63,6 +63,7 @@ __all__ = [
|
|
|
63
63
|
"HourWindow",
|
|
64
64
|
"IdentityMapper",
|
|
65
65
|
"Label",
|
|
66
|
+
"LoopDecision",
|
|
66
67
|
"Metadata",
|
|
67
68
|
"MinimumCount",
|
|
68
69
|
"MonthWindow",
|
|
@@ -122,7 +123,7 @@ __all__ = [
|
|
|
122
123
|
"teardown",
|
|
123
124
|
]
|
|
124
125
|
|
|
125
|
-
__version__ = "1.4.
|
|
126
|
+
__version__ = "1.4.0b2"
|
|
126
127
|
|
|
127
128
|
if TYPE_CHECKING:
|
|
128
129
|
from airflow.sdk.api.datamodels._generated import DagRunState, TaskInstanceState, TriggerRule, WeightRule
|
|
@@ -165,6 +166,7 @@ if TYPE_CHECKING:
|
|
|
165
166
|
from airflow.sdk.definitions.decorators import result, setup, task, teardown
|
|
166
167
|
from airflow.sdk.definitions.decorators.task_group import task_group
|
|
167
168
|
from airflow.sdk.definitions.edges import EdgeModifier, Label
|
|
169
|
+
from airflow.sdk.definitions.loop import LoopDecision
|
|
168
170
|
from airflow.sdk.definitions.param import Param, ParamsDict
|
|
169
171
|
from airflow.sdk.definitions.partition_mappers.allowed_key import AllowedKeyMapper
|
|
170
172
|
from airflow.sdk.definitions.partition_mappers.base import (
|
|
@@ -279,6 +281,7 @@ __lazy_imports: dict[str, str] = {
|
|
|
279
281
|
"HourWindow": ".definitions.partition_mappers.window",
|
|
280
282
|
"IdentityMapper": ".definitions.partition_mappers.identity",
|
|
281
283
|
"Label": ".definitions.edges",
|
|
284
|
+
"LoopDecision": ".definitions.loop",
|
|
282
285
|
"Metadata": ".definitions.asset.metadata",
|
|
283
286
|
"MinimumCount": ".definitions.partition_mappers.wait_policy",
|
|
284
287
|
"MonthWindow": ".definitions.partition_mappers.window",
|
{apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/__init__.pyi
RENAMED
|
@@ -70,6 +70,7 @@ from airflow.sdk.definitions.decorators import (
|
|
|
70
70
|
)
|
|
71
71
|
from airflow.sdk.definitions.decorators.task_group import task_group as task_group
|
|
72
72
|
from airflow.sdk.definitions.edges import EdgeModifier as EdgeModifier, Label as Label
|
|
73
|
+
from airflow.sdk.definitions.loop import LoopDecision as LoopDecision
|
|
73
74
|
from airflow.sdk.definitions.param import Param as Param
|
|
74
75
|
from airflow.sdk.definitions.partition_mappers.allowed_key import AllowedKeyMapper
|
|
75
76
|
from airflow.sdk.definitions.partition_mappers.base import PartitionMapper, RollupMapper
|
|
@@ -182,6 +183,7 @@ __all__ = [
|
|
|
182
183
|
"HourWindow",
|
|
183
184
|
"IdentityMapper",
|
|
184
185
|
"Label",
|
|
186
|
+
"LoopDecision",
|
|
185
187
|
"Metadata",
|
|
186
188
|
"MinimumCount",
|
|
187
189
|
"MonthWindow",
|
|
@@ -60,8 +60,12 @@ class RemoteLogIO(Protocol):
|
|
|
60
60
|
"""Upload the given log path to the remote storage."""
|
|
61
61
|
...
|
|
62
62
|
|
|
63
|
-
def read(self, relative_path: str, ti: RuntimeTI) -> LogResponse:
|
|
64
|
-
"""
|
|
63
|
+
def read(self, relative_path: str, ti: RuntimeTI | None) -> LogResponse:
|
|
64
|
+
"""
|
|
65
|
+
Read logs from the given remote log path.
|
|
66
|
+
|
|
67
|
+
``ti`` is None for logs not tied to a task instance, such as deadline callbacks.
|
|
68
|
+
"""
|
|
65
69
|
...
|
|
66
70
|
|
|
67
71
|
|
|
@@ -69,8 +73,12 @@ class RemoteLogIO(Protocol):
|
|
|
69
73
|
class RemoteLogStreamIO(RemoteLogIO, Protocol):
|
|
70
74
|
"""Interface for remote task loggers with stream-based read support."""
|
|
71
75
|
|
|
72
|
-
def stream(self, relative_path: str, ti: RuntimeTI) -> StreamingLogResponse:
|
|
73
|
-
"""
|
|
76
|
+
def stream(self, relative_path: str, ti: RuntimeTI | None) -> StreamingLogResponse:
|
|
77
|
+
"""
|
|
78
|
+
Stream-based read interface for reading logs from the given remote log path.
|
|
79
|
+
|
|
80
|
+
``ti`` is None for logs not tied to a task instance, such as deadline callbacks.
|
|
81
|
+
"""
|
|
74
82
|
...
|
|
75
83
|
|
|
76
84
|
|
|
@@ -420,22 +420,16 @@ def structlog_processors(
|
|
|
420
420
|
# structlog to ignore.
|
|
421
421
|
|
|
422
422
|
import contextlib
|
|
423
|
+
import importlib
|
|
423
424
|
|
|
424
425
|
import click
|
|
425
426
|
|
|
426
427
|
suppress: tuple[ModuleType, ...] = (click, contextlib)
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
suppress
|
|
431
|
-
|
|
432
|
-
pass
|
|
433
|
-
try:
|
|
434
|
-
import httpx
|
|
435
|
-
|
|
436
|
-
suppress = (*suppress, httpx)
|
|
437
|
-
except ImportError:
|
|
438
|
-
pass
|
|
428
|
+
# airflow-core is still on httpx while the Task SDK is on httpx2, so either (or both) may
|
|
429
|
+
# be installed; tracked at https://github.com/apache/airflow/issues/70522
|
|
430
|
+
for module_name in ("httpcore", "httpcore2", "httpx", "httpx2"):
|
|
431
|
+
with contextlib.suppress(ImportError):
|
|
432
|
+
suppress = (*suppress, importlib.import_module(module_name))
|
|
439
433
|
|
|
440
434
|
if json_output:
|
|
441
435
|
dict_exc_formatter = structlog.tracebacks.ExceptionDictTransformer(
|
|
@@ -690,6 +684,7 @@ def configure_logging(
|
|
|
690
684
|
"airflow": {"level": log_level.upper()},
|
|
691
685
|
# These ones are too chatty even at info
|
|
692
686
|
"httpx": {"level": "WARN"},
|
|
687
|
+
"httpx2": {"level": "WARN"},
|
|
693
688
|
"sqlalchemy.engine": {"level": "WARN"},
|
|
694
689
|
"alembic.runtime.plugins": {"level": "WARN"},
|
|
695
690
|
}
|
|
@@ -326,6 +326,12 @@ metrics:
|
|
|
326
326
|
legacy_name: "-"
|
|
327
327
|
name_variables: []
|
|
328
328
|
|
|
329
|
+
- name: "deadline_alerts.deadline_creation_failed"
|
|
330
|
+
description: "Number of deadline alerts skipped because their deadline could not be created"
|
|
331
|
+
type: "counter"
|
|
332
|
+
legacy_name: "-"
|
|
333
|
+
name_variables: []
|
|
334
|
+
|
|
329
335
|
- name: "deadline_alerts.deadline_missed"
|
|
330
336
|
description: "Number of deadline alerts that fired because a Dag run missed its deadline"
|
|
331
337
|
type: "counter"
|
|
@@ -79,6 +79,13 @@ DEFAULT_SENSITIVE_FIELDS = frozenset(
|
|
|
79
79
|
SECRETS_TO_SKIP_MASKING = {"airflow"}
|
|
80
80
|
"""Common terms that should be excluded from masking in both production and tests"""
|
|
81
81
|
|
|
82
|
+
# Word boundaries inside camelCase / PascalCase names: "privateKey" -> "private_Key",
|
|
83
|
+
# "APIKey" -> "API_Key". Applied before lowercasing so multi-word sensitive field names
|
|
84
|
+
# (``private_key``, ``connection_string``...) also match camelCase keys.
|
|
85
|
+
_CAMEL_LOWER_UPPER_RE = re.compile(r"([a-z0-9])([A-Z])")
|
|
86
|
+
_CAMEL_ACRONYM_RE = re.compile(r"([A-Z]+)([A-Z][a-z])")
|
|
87
|
+
_NON_WORD_RE = re.compile(r"\W+")
|
|
88
|
+
|
|
82
89
|
|
|
83
90
|
def should_hide_value_for_key(name):
|
|
84
91
|
"""
|
|
@@ -356,10 +363,12 @@ class SecretsMasker(logging.Filter):
|
|
|
356
363
|
self, item: Redactable, name: str | None, depth: int, max_depth: int, replacement: str = "***"
|
|
357
364
|
) -> Redacted:
|
|
358
365
|
try:
|
|
359
|
-
#
|
|
360
|
-
#
|
|
361
|
-
#
|
|
362
|
-
#
|
|
366
|
+
# Both key-name-based and pattern-based redaction apply at any
|
|
367
|
+
# nesting depth: a registered secret or a sensitive key must fail
|
|
368
|
+
# closed wherever it sits in the structure. ``max_depth`` only bounds
|
|
369
|
+
# the fail-closed walk of a value already known to be sensitive
|
|
370
|
+
# (``_redact_all``); self-referential structures are stopped by
|
|
371
|
+
# Python's recursion limit and the except clause below.
|
|
363
372
|
if name and self.should_hide_value_for_key(name):
|
|
364
373
|
return self._redact_all(item, depth, max_depth, replacement=replacement)
|
|
365
374
|
# Always walk dicts so deeper sensitive keys are still caught;
|
|
@@ -395,11 +404,6 @@ class SecretsMasker(logging.Filter):
|
|
|
395
404
|
)
|
|
396
405
|
for subval in item
|
|
397
406
|
]
|
|
398
|
-
# The depth cutoff only bounds the work of pattern-based string
|
|
399
|
-
# masking below — key-name redaction (dicts and iterables above) is
|
|
400
|
-
# unbounded so sensitive keys fail closed at any depth.
|
|
401
|
-
if depth > max_depth:
|
|
402
|
-
return item
|
|
403
407
|
if isinstance(item, Enum):
|
|
404
408
|
return self._redact(
|
|
405
409
|
item=item.value, name=name, depth=depth, max_depth=max_depth, replacement=replacement
|
|
@@ -588,9 +592,13 @@ class SecretsMasker(logging.Filter):
|
|
|
588
592
|
Name might be a Variable name, or key in conn.extra_dejson, for example.
|
|
589
593
|
"""
|
|
590
594
|
if isinstance(name, str) and self.hide_sensitive_var_conn_fields:
|
|
591
|
-
name = name.strip()
|
|
592
|
-
normalized =
|
|
593
|
-
|
|
595
|
+
name = name.strip()
|
|
596
|
+
normalized = _NON_WORD_RE.sub("_", name.lower())
|
|
597
|
+
split = _CAMEL_ACRONYM_RE.sub(r"\1_\2", _CAMEL_LOWER_UPPER_RE.sub(r"\1_\2", name))
|
|
598
|
+
split = _NON_WORD_RE.sub("_", split.lower())
|
|
599
|
+
# Check both forms so fields configured without separators (e.g. ``mysensitivekey``)
|
|
600
|
+
# keep matching camelCase keys such as ``mySensitiveKey``.
|
|
601
|
+
return any(s in normalized or s in split for s in self.sensitive_variables_fields)
|
|
594
602
|
return False
|
|
595
603
|
|
|
596
604
|
def add_mask(self, secret: JsonValue, name: str | None = None):
|
{apache_airflow_task_sdk-1.4.0b1 → apache_airflow_task_sdk-1.4.0b2}/src/airflow/sdk/api/client.py
RENAMED
|
@@ -27,10 +27,10 @@ from http import HTTPStatus
|
|
|
27
27
|
from typing import TYPE_CHECKING, Any, TypeVar
|
|
28
28
|
from urllib.parse import quote
|
|
29
29
|
|
|
30
|
-
import
|
|
31
|
-
import httpx
|
|
30
|
+
import httpx2
|
|
32
31
|
import msgspec
|
|
33
32
|
import structlog
|
|
33
|
+
import truststore
|
|
34
34
|
from opentelemetry import trace
|
|
35
35
|
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
|
|
36
36
|
from pydantic import BaseModel, JsonValue
|
|
@@ -63,6 +63,7 @@ from airflow.sdk.api.datamodels._generated import (
|
|
|
63
63
|
HITLDetailResponse,
|
|
64
64
|
HITLUser,
|
|
65
65
|
InactiveAssetsResponse,
|
|
66
|
+
LoopDecisionPayload,
|
|
66
67
|
Note,
|
|
67
68
|
PrevSuccessfulDagRunResponse,
|
|
68
69
|
ResultMessage,
|
|
@@ -192,22 +193,22 @@ __all__ = [
|
|
|
192
193
|
]
|
|
193
194
|
|
|
194
195
|
|
|
195
|
-
def get_json_error(response:
|
|
196
|
+
def get_json_error(response: httpx2.Response):
|
|
196
197
|
"""Raise a ServerResponseError if we can extract error info from the error."""
|
|
197
198
|
err = ServerResponseError.from_response(response)
|
|
198
199
|
if err:
|
|
199
200
|
raise err
|
|
200
201
|
|
|
201
202
|
|
|
202
|
-
def raise_on_4xx_5xx(response:
|
|
203
|
+
def raise_on_4xx_5xx(response: httpx2.Response):
|
|
203
204
|
return get_json_error(response) or response.raise_for_status()
|
|
204
205
|
|
|
205
206
|
|
|
206
207
|
# Py 3.11+ version
|
|
207
|
-
def raise_on_4xx_5xx_with_note(response:
|
|
208
|
+
def raise_on_4xx_5xx_with_note(response: httpx2.Response):
|
|
208
209
|
try:
|
|
209
210
|
return get_json_error(response) or response.raise_for_status()
|
|
210
|
-
except
|
|
211
|
+
except httpx2.HTTPStatusError as e:
|
|
211
212
|
if TYPE_CHECKING:
|
|
212
213
|
assert hasattr(e, "add_note")
|
|
213
214
|
e.add_note(
|
|
@@ -227,11 +228,11 @@ if hasattr(BaseException, "add_note"):
|
|
|
227
228
|
raise_on_4xx_5xx = raise_on_4xx_5xx_with_note
|
|
228
229
|
|
|
229
230
|
|
|
230
|
-
def add_correlation_id(request:
|
|
231
|
+
def add_correlation_id(request: httpx2.Request):
|
|
231
232
|
request.headers["correlation-id"] = str(uuid7())
|
|
232
233
|
|
|
233
234
|
|
|
234
|
-
def inject_trace_context(request:
|
|
235
|
+
def inject_trace_context(request: httpx2.Request) -> None:
|
|
235
236
|
_trace_propagator.inject(request.headers)
|
|
236
237
|
|
|
237
238
|
|
|
@@ -281,6 +282,7 @@ class TaskInstanceOperations:
|
|
|
281
282
|
retry_reason: str | None = None,
|
|
282
283
|
*,
|
|
283
284
|
pid: int | None = None,
|
|
285
|
+
loop_decision: LoopDecisionPayload | None = None,
|
|
284
286
|
):
|
|
285
287
|
"""Report a terminal outcome or acknowledge server-requested termination."""
|
|
286
288
|
if state == TaskInstanceState.SUCCESS:
|
|
@@ -291,6 +293,8 @@ class TaskInstanceOperations:
|
|
|
291
293
|
rendered_map_index=rendered_map_index,
|
|
292
294
|
retry_reason=retry_reason,
|
|
293
295
|
)
|
|
296
|
+
if loop_decision is not None:
|
|
297
|
+
body.loop_decision = loop_decision
|
|
294
298
|
if state == TerminalStateNonSuccess.SERVER_TERMINATED:
|
|
295
299
|
body.hostname = get_hostname()
|
|
296
300
|
body.pid = pid
|
|
@@ -313,13 +317,23 @@ class TaskInstanceOperations:
|
|
|
313
317
|
)
|
|
314
318
|
self.client.patch(f"task-instances/{id}/state", content=body.model_dump_json())
|
|
315
319
|
|
|
316
|
-
def succeed(
|
|
320
|
+
def succeed(
|
|
321
|
+
self,
|
|
322
|
+
id: uuid.UUID,
|
|
323
|
+
when: datetime,
|
|
324
|
+
task_outlets,
|
|
325
|
+
outlet_events,
|
|
326
|
+
rendered_map_index,
|
|
327
|
+
*,
|
|
328
|
+
loop_decision: LoopDecisionPayload | None = None,
|
|
329
|
+
):
|
|
317
330
|
"""Tell the API server that this TI has succeeded."""
|
|
318
331
|
body = TISuccessStatePayload(
|
|
319
332
|
end_date=when,
|
|
320
333
|
task_outlets=task_outlets,
|
|
321
334
|
outlet_events=outlet_events,
|
|
322
335
|
rendered_map_index=rendered_map_index,
|
|
336
|
+
loop_decision=loop_decision,
|
|
323
337
|
)
|
|
324
338
|
self.client.patch(f"task-instances/{id}/state", content=body.model_dump_json())
|
|
325
339
|
|
|
@@ -1168,11 +1182,11 @@ class CallbackOperations:
|
|
|
1168
1182
|
self.client.patch(f"callbacks/{callback_id}/run")
|
|
1169
1183
|
|
|
1170
1184
|
|
|
1171
|
-
class BearerAuth(
|
|
1185
|
+
class BearerAuth(httpx2.Auth):
|
|
1172
1186
|
def __init__(self, token: str):
|
|
1173
1187
|
self.token: str = token
|
|
1174
1188
|
|
|
1175
|
-
def auth_flow(self, request:
|
|
1189
|
+
def auth_flow(self, request: httpx2.Request):
|
|
1176
1190
|
if self.token:
|
|
1177
1191
|
request.headers["Authorization"] = "Bearer " + self.token
|
|
1178
1192
|
yield request
|
|
@@ -1180,13 +1194,13 @@ class BearerAuth(httpx.Auth):
|
|
|
1180
1194
|
|
|
1181
1195
|
# This exists as an aid for debugging or local running via the `dry_run` argument to Client. It doesn't make
|
|
1182
1196
|
# sense for returning connections etc.
|
|
1183
|
-
def noop_handler(request:
|
|
1197
|
+
def noop_handler(request: httpx2.Request) -> httpx2.Response:
|
|
1184
1198
|
path = request.url.path
|
|
1185
1199
|
log.debug("Dry-run request", method=request.method, path=path)
|
|
1186
1200
|
|
|
1187
1201
|
if path.startswith("/task-instances/") and path.endswith("/run"):
|
|
1188
1202
|
# Return a fake context
|
|
1189
|
-
return
|
|
1203
|
+
return httpx2.Response(
|
|
1190
1204
|
200,
|
|
1191
1205
|
json={
|
|
1192
1206
|
"dag_run": {
|
|
@@ -1202,7 +1216,7 @@ def noop_handler(request: httpx.Request) -> httpx.Response:
|
|
|
1202
1216
|
"should_retry": False,
|
|
1203
1217
|
},
|
|
1204
1218
|
)
|
|
1205
|
-
return
|
|
1219
|
+
return httpx2.Response(200, json={"text": "Hello, world!"})
|
|
1206
1220
|
|
|
1207
1221
|
|
|
1208
1222
|
# Note: Given defaults make attempts after 1, 3, 7, 15 and fails after 31seconds
|
|
@@ -1219,28 +1233,33 @@ API_CLIENT_USE_PUBLIC_CERTS = conf.getboolean("api", "client_use_public_certs",
|
|
|
1219
1233
|
|
|
1220
1234
|
def _should_retry_api_request(exception: BaseException) -> bool:
|
|
1221
1235
|
"""Determine if an API request should be retried based on the exception type."""
|
|
1222
|
-
if isinstance(exception,
|
|
1236
|
+
if isinstance(exception, httpx2.HTTPStatusError):
|
|
1223
1237
|
return exception.response.status_code >= 500
|
|
1224
1238
|
|
|
1225
|
-
return isinstance(exception,
|
|
1239
|
+
return isinstance(exception, httpx2.RequestError)
|
|
1226
1240
|
|
|
1227
1241
|
|
|
1228
|
-
class Client(
|
|
1242
|
+
class Client(httpx2.Client):
|
|
1229
1243
|
@lru_cache()
|
|
1230
1244
|
@staticmethod
|
|
1231
1245
|
def _get_ssl_context_cached(ca_file: str | None = None, ca_path: str | None = None) -> ssl.SSLContext:
|
|
1232
1246
|
"""
|
|
1233
1247
|
Cache SSL context to prevent memory growth from repeated context creation.
|
|
1234
1248
|
|
|
1235
|
-
If `client_use_public_certs` is enabled
|
|
1249
|
+
If `client_use_public_certs` is enabled, the system trust store is trusted alongside any
|
|
1250
|
+
explicitly loaded CAs.
|
|
1236
1251
|
|
|
1237
1252
|
:param ca_file: Certificate Authority, optional.
|
|
1238
1253
|
:param ca_path: Certificate File, optional.
|
|
1239
1254
|
"""
|
|
1240
|
-
ctx
|
|
1255
|
+
ctx: ssl.SSLContext
|
|
1241
1256
|
if API_CLIENT_USE_PUBLIC_CERTS:
|
|
1242
|
-
log.info("Using
|
|
1243
|
-
ctx.
|
|
1257
|
+
log.info("Using public CAs from the system trust store")
|
|
1258
|
+
ctx = truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
|
1259
|
+
if ca_file:
|
|
1260
|
+
ctx.load_verify_locations(ca_file)
|
|
1261
|
+
else:
|
|
1262
|
+
ctx = ssl.create_default_context(cafile=ca_file)
|
|
1244
1263
|
if ca_path:
|
|
1245
1264
|
ctx.load_verify_locations(ca_path)
|
|
1246
1265
|
return ctx
|
|
@@ -1253,7 +1272,7 @@ class Client(httpx.Client):
|
|
|
1253
1272
|
if dry_run:
|
|
1254
1273
|
# If dry run is requested, install a no op handler so that simple tasks can "heartbeat" using a
|
|
1255
1274
|
# real client, but just don't make any HTTP requests
|
|
1256
|
-
kwargs.setdefault("transport",
|
|
1275
|
+
kwargs.setdefault("transport", httpx2.MockTransport(noop_handler))
|
|
1257
1276
|
kwargs.setdefault("base_url", "dry-run://server")
|
|
1258
1277
|
else:
|
|
1259
1278
|
kwargs["base_url"] = base_url
|
|
@@ -1283,14 +1302,14 @@ class Client(httpx.Client):
|
|
|
1283
1302
|
**kwargs,
|
|
1284
1303
|
)
|
|
1285
1304
|
|
|
1286
|
-
def _update_auth(self, response:
|
|
1305
|
+
def _update_auth(self, response: httpx2.Response):
|
|
1287
1306
|
if new_token := response.headers.get("Refreshed-API-Token"):
|
|
1288
1307
|
log.debug("Execution API issued us a refreshed Task token")
|
|
1289
1308
|
self.auth = BearerAuth(new_token)
|
|
1290
1309
|
|
|
1291
1310
|
def request(self, *args, retry: bool = True, **kwargs):
|
|
1292
1311
|
"""
|
|
1293
|
-
Make a request using our
|
|
1312
|
+
Make a request using our httpx2.Client.request with a default retry policy.
|
|
1294
1313
|
|
|
1295
1314
|
Pass ``retry=False`` to bypass the default retry policy.
|
|
1296
1315
|
"""
|
|
@@ -1408,18 +1427,19 @@ class _ErrorBody(BaseModel):
|
|
|
1408
1427
|
return repr(self.detail)
|
|
1409
1428
|
|
|
1410
1429
|
|
|
1411
|
-
class ServerResponseError(
|
|
1412
|
-
def __init__(self, message: str, *, request:
|
|
1430
|
+
class ServerResponseError(httpx2.HTTPStatusError):
|
|
1431
|
+
def __init__(self, message: str, *, request: httpx2.Request, response: httpx2.Response):
|
|
1413
1432
|
super().__init__(message, request=request, response=response)
|
|
1414
1433
|
|
|
1415
1434
|
detail: list[RemoteValidationError] | str | dict[str, Any] | None
|
|
1416
1435
|
|
|
1417
1436
|
def __reduce__(self) -> tuple[Any, ...]:
|
|
1418
|
-
# Needed because https://github.com/encode/httpx/pull/3108
|
|
1437
|
+
# Needed because https://github.com/encode/httpx/pull/3108 never landed, and httpx2
|
|
1438
|
+
# forked from httpx 0.28.1 without it.
|
|
1419
1439
|
return Exception.__new__, (type(self),) + self.args, self.__dict__
|
|
1420
1440
|
|
|
1421
1441
|
@classmethod
|
|
1422
|
-
def from_response(cls, response:
|
|
1442
|
+
def from_response(cls, response: httpx2.Response) -> ServerResponseError | None:
|
|
1423
1443
|
if response.is_success:
|
|
1424
1444
|
return None
|
|
1425
1445
|
# 4xx or 5xx error?
|
|
@@ -1445,7 +1465,7 @@ class ServerResponseError(httpx.HTTPStatusError):
|
|
|
1445
1465
|
try:
|
|
1446
1466
|
detail = msgspec.json.decode(response.content)
|
|
1447
1467
|
except Exception:
|
|
1448
|
-
# Fallback to a normal
|
|
1468
|
+
# Fallback to a normal httpx2 error
|
|
1449
1469
|
return None
|
|
1450
1470
|
msg = "Server returned error"
|
|
1451
1471
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: http://0.0.0.0:8080/execution/openapi.json
|
|
3
|
-
# version: 0.
|
|
3
|
+
# version: 0.85.0
|
|
4
4
|
|
|
5
5
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
6
6
|
# or more contributor license agreements. See the NOTICE file
|
|
@@ -245,6 +245,18 @@ class LoopContext(BaseModel):
|
|
|
245
245
|
terminal_is_mapped: Annotated[bool, Field(title="Terminal Is Mapped")]
|
|
246
246
|
|
|
247
247
|
|
|
248
|
+
class LoopDecisionPayload(BaseModel):
|
|
249
|
+
"""
|
|
250
|
+
A loop gate's evaluation of its ``until`` callable.
|
|
251
|
+
"""
|
|
252
|
+
|
|
253
|
+
model_config = ConfigDict(
|
|
254
|
+
extra="forbid",
|
|
255
|
+
)
|
|
256
|
+
stop: Annotated[bool, Field(title="Stop")]
|
|
257
|
+
reason: Annotated[str | None, Field(title="Reason")] = None
|
|
258
|
+
|
|
259
|
+
|
|
248
260
|
class PrevSuccessfulDagRunResponse(BaseModel):
|
|
249
261
|
"""
|
|
250
262
|
Schema for response with previous successful DagRun information for Task Template Context.
|
|
@@ -387,6 +399,7 @@ class TISuccessStatePayload(BaseModel):
|
|
|
387
399
|
task_outlets: Annotated[list[AssetProfile] | None, Field(title="Task Outlets")] = None
|
|
388
400
|
outlet_events: Annotated[list[dict[str, Any]] | None, Field(title="Outlet Events")] = None
|
|
389
401
|
rendered_map_index: Annotated[str | None, Field(title="Rendered Map Index")] = None
|
|
402
|
+
loop_decision: LoopDecisionPayload | None = None
|
|
390
403
|
|
|
391
404
|
|
|
392
405
|
class TITargetStatePayload(BaseModel):
|
|
@@ -759,6 +772,7 @@ class TITerminalStatePayload(BaseModel):
|
|
|
759
772
|
retry_reason: Annotated[str | None, Field(title="Retry Reason")] = None
|
|
760
773
|
hostname: Annotated[str | None, Field(title="Hostname")] = None
|
|
761
774
|
pid: Annotated[int | None, Field(title="Pid")] = None
|
|
775
|
+
loop_decision: LoopDecisionPayload | None = None
|
|
762
776
|
|
|
763
777
|
|
|
764
778
|
class XComArgBinding(BaseModel):
|