apache-airflow-task-sdk 1.3.0b2__tar.gz → 1.3.0rc1__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.0b2 → apache_airflow_task_sdk-1.3.0rc1}/PKG-INFO +2 -2
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/dev/generate_task_sdk_models.py +0 -2
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/api.rst +1 -1
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/pyproject.toml +1 -1
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/__init__.py +4 -4
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/__init__.pyi +2 -2
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/datamodels/_generated.py +1 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/timetable.py +1 -1
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/_subprocess.py +15 -5
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/executable/coordinator.py +3 -4
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/java/coordinator.py +4 -5
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/dag.py +17 -2
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/assets.py +1 -1
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/request_handlers.py +94 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/schema/__init__.py +12 -1
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/schema/migrator.py +7 -2
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/schema/schema.json +12 -0
- apache_airflow_task_sdk-1.3.0rc1/src/airflow/sdk/execution_time/schema/versions/__init__.py +51 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/test_subprocess.py +35 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_dag.py +13 -4
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/schema/test_migrator.py +35 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_context.py +18 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_coordinator.py +31 -1
- apache_airflow_task_sdk-1.3.0rc1/tests/task_sdk/execution_time/test_request_handlers.py +167 -0
- apache_airflow_task_sdk-1.3.0b2/src/airflow/sdk/execution_time/schema/versions/__init__.py +0 -25
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/.gitignore +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/.pre-commit-config.yaml +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/LICENSE +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/NOTICE +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/README.md +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/dev/datamodel_code_formatter.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/.gitignore +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/airflow-metadata.schema.json +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/concepts.rst +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/conf.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/deferred-vs-async-operators.rst +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/dynamic-task-mapping.rst +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/examples.rst +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/executable-bundle-spec.rst +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/img/airflow-2-approach.png +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/img/airflow-2-arch.png +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/img/airflow-3-arch.png +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/img/airflow-3-task-sdk.png +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/index.rst +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/resumable-job-mixin.rst +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/configuration/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/configuration/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/configuration/parser.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/dagnode/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/dagnode/node.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/listener.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/spec/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/spec/lifecycle.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/spec/taskinstance.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/_config.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/_noncaching.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/factory.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/percent_formatter.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/remote.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/structlog.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/types.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/module_loading/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/module_loading/dag_file.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/module_loading/file_discovery.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/common.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/base_stats_logger.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/datadog_logger.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/metrics_registry.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/metrics_template.yaml +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/otel_logger.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/protocols.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/stats.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/statsd_logger.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/validators.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/otel_env_config.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/traces/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/plugins_manager/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/plugins_manager/plugins_manager.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/providers_discovery/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/providers_discovery/providers_discovery.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/secrets_backend/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/secrets_backend/base.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/secrets_masker/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/secrets_masker/secrets_masker.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/serialization/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/state/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/template_rendering/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/timezones/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/timezones/timezone.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/client.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/datamodels/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/datamodels/activities.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/branch.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/decorator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/hook.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/notifier.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/operator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/operatorlink.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/resumablejobmixin.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/secrets_backend.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/sensor.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/skipmixin.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/xcom.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/configuration.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/executable/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/java/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/crypto.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/abstractoperator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/contextmanager.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/dag_parsing_context.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/decorators.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/expandinput.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/logging_mixin.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/mixins.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/node.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/templater.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/types.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/asset/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/asset/access_control.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/asset/decorators.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/asset/metadata.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/callback.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/connection.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/context.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/deadline.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/__init__.pyi +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/condition.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/task_group.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/edges.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/mappedoperator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/operator_resources.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/param.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/allowed_key.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/base.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/chain.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/fixed_key.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/identity.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/product.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/temporal.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/wait_policy.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/window.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/retry_policy.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/taskgroup.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/template.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/_cron.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/_delta.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/events.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/interval.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/simple.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/trigger.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/variable.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/xcom_arg.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/exceptions.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/cache.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/callback_runner.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/callback_supervisor.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/comms.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/connection_test_supervisor.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/context.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/coordinator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/execute_workload.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/hitl.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/lazy_sequence.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/macros.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/schema/AGENTS.md +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/secrets/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/secrets/execution_api.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/secrets_masker.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/sentry/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/sentry/configured.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/sentry/noop.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/supervisor.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/task_mapping.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/task_runner.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/timeout.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/xcom.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/fs.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/path.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/stat.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/store.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/typedef.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/lineage.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/listener.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/log.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/module_loading.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/datadog_logger.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/otel_logger.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/stats_utils.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/statsd_logger.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/stats.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/plugins_manager.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/providers_manager_runtime.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/py.typed +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/bignum.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/builtin.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/datetime.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/deltalake.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/iceberg.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/kubernetes.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/numpy.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/pandas.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/pydantic.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/timezone.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/uuid.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/typing.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/state.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/timezone.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/types.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/yaml.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/conftest.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/api/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/api/test_client.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/notifier/test_notifier.txt +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_branch.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_decorator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_hook.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_notifier.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_operator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_resumablejobmixin.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_sensor.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_skipmixin.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_xcom.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/executable/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/executable/test_coordinator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/java/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/java/test_coordinator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/dags/dag_parsing_context.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/dags/signal_forward_test.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/dags/super_basic.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/dags/super_basic_deferred_run.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/dags/super_basic_run.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/_internal/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/_internal/test_decorators.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/_internal/test_templater.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/conftest.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/test_condition.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/test_mapped.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/test_result.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/test_setup_teardown.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/test_task_group.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/sensors/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_asset.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_asset_access_control.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_asset_decorators.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_callback.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_connection.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_context.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_deadline.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_macros.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_mappedoperator.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_mixins.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_module_loading.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_operator_resources.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_param.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_partition_mappers.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_retry_policy.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_taskgroup.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_template.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_variables.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_wait_policy.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_xcom_arg.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/timetables/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/timetables/test__cron.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/docs/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/docs/test_docs_inventory.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/docs/test_public_api.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/conftest.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/schema/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/schema/_mock_version_bundle.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/schema/test_integration.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_cache.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_callback_supervisor.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_comms.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_connection_test_supervisor.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_context_cache.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_hitl.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_lazy_sequence.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_secrets.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_sentry.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_supervisor.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_supervisor_schemas_name_type_sync.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_task_mapping.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_task_runner.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_timeout.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/io/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/io/test_path.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/serde/__init__.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/serde/test_serde.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/serde/test_serializers.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/test_configuration.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/test_crypto.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/test_exceptions.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/test_lineage.py +0 -0
- {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/test_providers_manager_runtime.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-task-sdk
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.0rc1
|
|
4
4
|
Summary: Python Task SDK for Apache Airflow DAG Authors
|
|
5
5
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
6
6
|
Project-URL: Documentation, https://airflow.staged.apache.org/docs/
|
|
@@ -29,7 +29,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
29
29
|
Classifier: Programming Language :: Python :: 3.14
|
|
30
30
|
Classifier: Topic :: System :: Monitoring
|
|
31
31
|
Requires-Python: !=3.15,>=3.10
|
|
32
|
-
Requires-Dist: apache-airflow-core<3.4.0,>=3.3.
|
|
32
|
+
Requires-Dist: apache-airflow-core<3.4.0,>=3.3.0rc1
|
|
33
33
|
Requires-Dist: asgiref>=2.3.0; python_version < '3.14'
|
|
34
34
|
Requires-Dist: asgiref>=3.11.1; python_version >= '3.14'
|
|
35
35
|
Requires-Dist: attrs!=25.2.0,>=24.2.0
|
{apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/dev/generate_task_sdk_models.py
RENAMED
|
@@ -33,8 +33,6 @@ from datamodel_code_generator import (
|
|
|
33
33
|
from openapi_spec_validator import validate_spec
|
|
34
34
|
|
|
35
35
|
os.environ["_AIRFLOW__AS_LIBRARY"] = "1"
|
|
36
|
-
# Set a placeholder secret to allow the in-process FastAPI app to run its lifecycle hooks.
|
|
37
|
-
os.environ.setdefault("AIRFLOW__API_AUTH__JWT_SECRET", "task-sdk-model-generation")
|
|
38
36
|
|
|
39
37
|
AIRFLOW_ROOT_PATH = Path(__file__).parents[2].resolve()
|
|
40
38
|
AIRFLOW_TASK_SDK_ROOT_PATH = AIRFLOW_ROOT_PATH / "task-sdk"
|
|
@@ -214,7 +214,7 @@ Timetables
|
|
|
214
214
|
|
|
215
215
|
.. autoapiclass:: airflow.sdk.MultipleCronTriggerTimetable
|
|
216
216
|
|
|
217
|
-
.. autoapiclass:: airflow.sdk.
|
|
217
|
+
.. autoapiclass:: airflow.sdk.PartitionedAtRuntime
|
|
218
218
|
|
|
219
219
|
.. autoapiclass:: airflow.sdk.PartitionedAssetTimetable
|
|
220
220
|
|
|
@@ -48,7 +48,7 @@ classifiers = [
|
|
|
48
48
|
"Topic :: System :: Monitoring",
|
|
49
49
|
]
|
|
50
50
|
dependencies = [
|
|
51
|
-
"apache-airflow-core<3.4.0,>=3.3.
|
|
51
|
+
"apache-airflow-core<3.4.0,>=3.3.0rc1",
|
|
52
52
|
"asgiref>=2.3.0; python_version < '3.14'",
|
|
53
53
|
"asgiref>=3.11.1; python_version >= '3.14'",
|
|
54
54
|
"attrs>=24.2.0, !=25.2.0",
|
{apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/__init__.py
RENAMED
|
@@ -67,7 +67,7 @@ __all__ = [
|
|
|
67
67
|
"ObjectStoragePath",
|
|
68
68
|
"Param",
|
|
69
69
|
"ParamsDict",
|
|
70
|
-
"
|
|
70
|
+
"PartitionedAtRuntime",
|
|
71
71
|
"PartitionedAssetTimetable",
|
|
72
72
|
"PartitionMapper",
|
|
73
73
|
"PokeReturnValue",
|
|
@@ -117,7 +117,7 @@ __all__ = [
|
|
|
117
117
|
"teardown",
|
|
118
118
|
]
|
|
119
119
|
|
|
120
|
-
__version__ = "1.3.
|
|
120
|
+
__version__ = "1.3.0rc1"
|
|
121
121
|
|
|
122
122
|
if TYPE_CHECKING:
|
|
123
123
|
from airflow.sdk.api.datamodels._generated import DagRunState, TaskInstanceState, TriggerRule, WeightRule
|
|
@@ -199,8 +199,8 @@ if TYPE_CHECKING:
|
|
|
199
199
|
from airflow.sdk.definitions.template import literal
|
|
200
200
|
from airflow.sdk.definitions.timetables.assets import (
|
|
201
201
|
AssetOrTimeSchedule,
|
|
202
|
-
PartitionAtRuntime,
|
|
203
202
|
PartitionedAssetTimetable,
|
|
203
|
+
PartitionedAtRuntime,
|
|
204
204
|
)
|
|
205
205
|
from airflow.sdk.definitions.timetables.events import EventsTimetable
|
|
206
206
|
from airflow.sdk.definitions.timetables.interval import (
|
|
@@ -269,7 +269,7 @@ __lazy_imports: dict[str, str] = {
|
|
|
269
269
|
"ObjectStoragePath": ".io.path",
|
|
270
270
|
"Param": ".definitions.param",
|
|
271
271
|
"ParamsDict": ".definitions.param",
|
|
272
|
-
"
|
|
272
|
+
"PartitionedAtRuntime": ".definitions.timetables.assets",
|
|
273
273
|
"PartitionedAssetTimetable": ".definitions.timetables.assets",
|
|
274
274
|
"PartitionMapper": ".definitions.partition_mappers.base",
|
|
275
275
|
"PokeReturnValue": ".bases.sensor",
|
{apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/__init__.pyi
RENAMED
|
@@ -110,8 +110,8 @@ from airflow.sdk.definitions.taskgroup import TaskGroup as TaskGroup
|
|
|
110
110
|
from airflow.sdk.definitions.template import literal as literal
|
|
111
111
|
from airflow.sdk.definitions.timetables.assets import (
|
|
112
112
|
AssetOrTimeSchedule,
|
|
113
|
-
PartitionAtRuntime,
|
|
114
113
|
PartitionedAssetTimetable,
|
|
114
|
+
PartitionedAtRuntime,
|
|
115
115
|
)
|
|
116
116
|
from airflow.sdk.definitions.timetables.events import EventsTimetable
|
|
117
117
|
from airflow.sdk.definitions.timetables.interval import (
|
|
@@ -177,7 +177,7 @@ __all__ = [
|
|
|
177
177
|
"ObjectStoragePath",
|
|
178
178
|
"Param",
|
|
179
179
|
"PokeReturnValue",
|
|
180
|
-
"
|
|
180
|
+
"PartitionedAtRuntime",
|
|
181
181
|
"PartitionedAssetTimetable",
|
|
182
182
|
"PartitionMapper",
|
|
183
183
|
"ProductMapper",
|
|
@@ -725,6 +725,7 @@ class AssetEventDagRunReference(BaseModel):
|
|
|
725
725
|
source_map_index: Annotated[int | None, Field(title="Source Map Index")] = None
|
|
726
726
|
source_aliases: Annotated[list[AssetAliasReferenceAssetEventDagRun], Field(title="Source Aliases")]
|
|
727
727
|
timestamp: Annotated[AwareDatetime, Field(title="Timestamp")]
|
|
728
|
+
partition_key: Annotated[str | None, Field(title="Partition Key")] = None
|
|
728
729
|
|
|
729
730
|
|
|
730
731
|
class AssetEventResponse(BaseModel):
|
|
@@ -51,7 +51,7 @@ class BaseTimetable:
|
|
|
51
51
|
"""
|
|
52
52
|
Whether this timetable defers partition selection to task runtime.
|
|
53
53
|
|
|
54
|
-
*True* for :class:`~airflow.sdk.
|
|
54
|
+
*True* for :class:`~airflow.sdk.PartitionedAtRuntime`; downstream code can
|
|
55
55
|
branch on this flag instead of using ``isinstance``.
|
|
56
56
|
"""
|
|
57
57
|
|
|
@@ -72,16 +72,26 @@ def _socket_address(value: tuple | str) -> tuple[str, int] | None:
|
|
|
72
72
|
return None
|
|
73
73
|
host, port = value[:2]
|
|
74
74
|
host = str(host)
|
|
75
|
-
# Canonicalize IPv4-
|
|
76
|
-
#
|
|
77
|
-
#
|
|
75
|
+
# Canonicalize an IPv4 address that a dual-stack client embeds in IPv6 so it matches
|
|
76
|
+
# the AF_INET supervisor socket's plain-IPv4 address in the ownership check below. A
|
|
77
|
+
# dual-stack JVM's loopback connection is rendered in two different forms depending on
|
|
78
|
+
# the platform, and both must collapse to plain "127.0.0.1":
|
|
79
|
+
# * IPv4-mapped "::ffff:127.0.0.1" -> "127.0.0.1" (Linux, via /proc/net/tcp6)
|
|
80
|
+
# * IPv4-compatible "::127.0.0.1" -> "127.0.0.1" (macOS, via psutil)
|
|
81
|
+
# Otherwise the JVM's connection fails the check and every Java task is rejected with
|
|
82
|
+
# "process exited with 1 before connecting".
|
|
78
83
|
try:
|
|
79
84
|
parsed = ipaddress.ip_address(host)
|
|
80
85
|
except ValueError:
|
|
81
86
|
pass
|
|
82
87
|
else:
|
|
83
|
-
if isinstance(parsed, ipaddress.IPv6Address)
|
|
84
|
-
|
|
88
|
+
if isinstance(parsed, ipaddress.IPv6Address):
|
|
89
|
+
if parsed.ipv4_mapped is not None:
|
|
90
|
+
host = str(parsed.ipv4_mapped)
|
|
91
|
+
elif 1 < int(parsed) <= 0xFFFFFFFF:
|
|
92
|
+
# IPv4-compatible IPv6: ::/96 with the IPv4 in the low 32 bits. Exclude
|
|
93
|
+
# "::" (unspecified) and "::1" (IPv6 loopback), which are not IPv4.
|
|
94
|
+
host = str(ipaddress.IPv4Address(int(parsed)))
|
|
85
95
|
return host, int(port)
|
|
86
96
|
|
|
87
97
|
|
|
@@ -370,12 +370,11 @@ class ExecutableCoordinator(SubprocessCoordinator):
|
|
|
370
370
|
Configuration is taken from the ``[sdk] coordinators`` entry that constructs
|
|
371
371
|
this instance::
|
|
372
372
|
|
|
373
|
-
{
|
|
374
|
-
"name": "go",
|
|
373
|
+
"go": {
|
|
375
374
|
"classpath": "airflow.sdk.coordinators.executable.ExecutableCoordinator",
|
|
376
375
|
"kwargs": {
|
|
377
|
-
"executables_root": ["~/airflow/executable-bundles"]
|
|
378
|
-
}
|
|
376
|
+
"executables_root": ["~/airflow/executable-bundles"]
|
|
377
|
+
}
|
|
379
378
|
}
|
|
380
379
|
|
|
381
380
|
:param executables_root: A list of directories scanned for executable
|
|
@@ -174,14 +174,13 @@ class JavaCoordinator(SubprocessCoordinator):
|
|
|
174
174
|
Configuration is taken from the ``[sdk] coordinators`` entry that constructs
|
|
175
175
|
this instance::
|
|
176
176
|
|
|
177
|
-
{
|
|
178
|
-
"name": "jdk-17",
|
|
177
|
+
"jdk-17": {
|
|
179
178
|
"classpath": "airflow.sdk.coordinators.java.JavaCoordinator",
|
|
180
179
|
"kwargs": {
|
|
181
|
-
"java_executable": "/usr/lib/jvm/java-17-openjdk/bin/java",
|
|
182
|
-
"jvm_args": ["-Xmx1024m"],
|
|
183
180
|
"jars_root": ["~/airflow/jars"],
|
|
184
|
-
|
|
181
|
+
"java_executable": "/usr/lib/jvm/java-17-openjdk/bin/java",
|
|
182
|
+
"jvm_args": ["-Xmx1024m"]
|
|
183
|
+
}
|
|
185
184
|
}
|
|
186
185
|
|
|
187
186
|
:param java_executable: Path to the ``java`` command (defaults to
|
|
@@ -1404,8 +1404,23 @@ class DAG:
|
|
|
1404
1404
|
# triggerer may mark tasks scheduled so we read from DB
|
|
1405
1405
|
all_tis = set(dr.get_task_instances(session=session))
|
|
1406
1406
|
scheduled_tis = {x for x in all_tis if x.state == TaskInstanceState.SCHEDULED}
|
|
1407
|
-
|
|
1408
|
-
|
|
1407
|
+
awaiting_input_tis = {x for x in all_tis if x.state == TaskInstanceState.AWAITING_INPUT}
|
|
1408
|
+
ids_unrunnable = (
|
|
1409
|
+
{x for x in all_tis if x.state not in FINISHED_STATES}
|
|
1410
|
+
- scheduled_tis
|
|
1411
|
+
- awaiting_input_tis
|
|
1412
|
+
)
|
|
1413
|
+
if not scheduled_tis and awaiting_input_tis:
|
|
1414
|
+
# Human-in-the-loop tasks stay parked in AWAITING_INPUT: dag.test() never
|
|
1415
|
+
# resolves them itself. Keep the run alive until a response recorded from
|
|
1416
|
+
# outside -- the Required Actions UI or the HITL REST API of an api-server
|
|
1417
|
+
# sharing this metadata DB -- flips them back to SCHEDULED.
|
|
1418
|
+
log.info(
|
|
1419
|
+
"Waiting for Human-in-the-loop input for tasks: %s",
|
|
1420
|
+
sorted(x.task_id for x in awaiting_input_tis),
|
|
1421
|
+
)
|
|
1422
|
+
time.sleep(1)
|
|
1423
|
+
elif not scheduled_tis and ids_unrunnable:
|
|
1409
1424
|
log.warning("No tasks to run. unrunnable tasks: %s", ids_unrunnable)
|
|
1410
1425
|
time.sleep(1)
|
|
1411
1426
|
|
|
@@ -54,7 +54,7 @@ class PartitionedAssetTimetable(AssetTriggeredTimetable):
|
|
|
54
54
|
default_partition_mapper: PartitionMapper = IdentityMapper()
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
class
|
|
57
|
+
class PartitionedAtRuntime(BaseTimetable):
|
|
58
58
|
"""Marker timetable indicating that partition key(s) are determined at runtime."""
|
|
59
59
|
|
|
60
60
|
can_be_scheduled = False
|
|
@@ -31,6 +31,7 @@ from typing import TYPE_CHECKING
|
|
|
31
31
|
from uuid import UUID
|
|
32
32
|
|
|
33
33
|
from airflow.sdk.api.datamodels._generated import (
|
|
34
|
+
AssetStateStoreResponse,
|
|
34
35
|
ConnectionResponse,
|
|
35
36
|
DagRunStateResponse,
|
|
36
37
|
TaskStatesResponse,
|
|
@@ -40,10 +41,17 @@ from airflow.sdk.api.datamodels._generated import (
|
|
|
40
41
|
XComSequenceSliceResponse,
|
|
41
42
|
)
|
|
42
43
|
from airflow.sdk.execution_time.comms import (
|
|
44
|
+
AssetStateStoreResult,
|
|
45
|
+
ClearAssetStateStoreByName,
|
|
46
|
+
ClearAssetStateStoreByUri,
|
|
43
47
|
ConnectionResult,
|
|
44
48
|
DagRunStateResult,
|
|
49
|
+
DeleteAssetStateStoreByName,
|
|
50
|
+
DeleteAssetStateStoreByUri,
|
|
45
51
|
DeleteVariable,
|
|
46
52
|
DeleteXCom,
|
|
53
|
+
GetAssetStateStoreByName,
|
|
54
|
+
GetAssetStateStoreByUri,
|
|
47
55
|
GetConnection,
|
|
48
56
|
GetDagRunState,
|
|
49
57
|
GetDRCount,
|
|
@@ -60,6 +68,8 @@ from airflow.sdk.execution_time.comms import (
|
|
|
60
68
|
MaskSecret,
|
|
61
69
|
PrevSuccessfulDagRunResult,
|
|
62
70
|
PutVariable,
|
|
71
|
+
SetAssetStateStoreByName,
|
|
72
|
+
SetAssetStateStoreByUri,
|
|
63
73
|
SetXCom,
|
|
64
74
|
TaskStatesResult,
|
|
65
75
|
VariableKeysResult,
|
|
@@ -272,3 +282,87 @@ def handle_get_xcom(client: Client, msg: GetXCom) -> tuple[BaseModel | None, dic
|
|
|
272
282
|
xcom_result = XComResult.from_xcom_response(xcom)
|
|
273
283
|
return xcom_result, {"exclude_unset": True}
|
|
274
284
|
return xcom, {}
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def handle_get_asset_state_store_by_name(
|
|
288
|
+
client: Client, msg: GetAssetStateStoreByName
|
|
289
|
+
) -> tuple[BaseModel | None, dict[str, bool]]:
|
|
290
|
+
asset_state = client.asset_state_store.get(
|
|
291
|
+
key=msg.key,
|
|
292
|
+
name=msg.name,
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
if isinstance(asset_state, AssetStateStoreResponse):
|
|
296
|
+
return AssetStateStoreResult.from_asset_state_store_response(asset_state), {}
|
|
297
|
+
|
|
298
|
+
return asset_state, {}
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
def handle_get_asset_state_store_by_uri(
|
|
302
|
+
client: Client, msg: GetAssetStateStoreByUri
|
|
303
|
+
) -> tuple[BaseModel | None, dict[str, bool]]:
|
|
304
|
+
asset_state = client.asset_state_store.get(
|
|
305
|
+
key=msg.key,
|
|
306
|
+
uri=msg.uri,
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
if isinstance(asset_state, AssetStateStoreResponse):
|
|
310
|
+
return AssetStateStoreResult.from_asset_state_store_response(asset_state), {}
|
|
311
|
+
|
|
312
|
+
return asset_state, {}
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
def handle_set_asset_state_store_by_name(
|
|
316
|
+
client: Client, msg: SetAssetStateStoreByName
|
|
317
|
+
) -> tuple[BaseModel | None, dict[str, bool]]:
|
|
318
|
+
client.asset_state_store.set(
|
|
319
|
+
key=msg.key,
|
|
320
|
+
value=msg.value,
|
|
321
|
+
name=msg.name,
|
|
322
|
+
)
|
|
323
|
+
return None, {}
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
def handle_set_asset_state_store_by_uri(
|
|
327
|
+
client: Client, msg: SetAssetStateStoreByUri
|
|
328
|
+
) -> tuple[BaseModel | None, dict[str, bool]]:
|
|
329
|
+
client.asset_state_store.set(
|
|
330
|
+
key=msg.key,
|
|
331
|
+
value=msg.value,
|
|
332
|
+
uri=msg.uri,
|
|
333
|
+
)
|
|
334
|
+
return None, {}
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def handle_delete_asset_state_store_by_name(
|
|
338
|
+
client: Client, msg: DeleteAssetStateStoreByName
|
|
339
|
+
) -> tuple[BaseModel | None, dict[str, bool]]:
|
|
340
|
+
client.asset_state_store.delete(
|
|
341
|
+
key=msg.key,
|
|
342
|
+
name=msg.name,
|
|
343
|
+
)
|
|
344
|
+
return None, {}
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def handle_delete_asset_state_store_by_uri(
|
|
348
|
+
client: Client, msg: DeleteAssetStateStoreByUri
|
|
349
|
+
) -> tuple[BaseModel | None, dict[str, bool]]:
|
|
350
|
+
client.asset_state_store.delete(
|
|
351
|
+
key=msg.key,
|
|
352
|
+
uri=msg.uri,
|
|
353
|
+
)
|
|
354
|
+
return None, {}
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def handle_clear_asset_state_store_by_name(
|
|
358
|
+
client: Client, msg: ClearAssetStateStoreByName
|
|
359
|
+
) -> tuple[BaseModel | None, dict[str, bool]]:
|
|
360
|
+
client.asset_state_store.clear(name=msg.name)
|
|
361
|
+
return None, {}
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
def handle_clear_asset_state_store_by_uri(
|
|
365
|
+
client: Client, msg: ClearAssetStateStoreByUri
|
|
366
|
+
) -> tuple[BaseModel | None, dict[str, bool]]:
|
|
367
|
+
client.asset_state_store.clear(uri=msg.uri)
|
|
368
|
+
return None, {}
|
|
@@ -52,7 +52,6 @@ from airflow.sdk.execution_time.schema.migrator import (
|
|
|
52
52
|
SchemaVersionMigrator,
|
|
53
53
|
get_schema_version_migrator,
|
|
54
54
|
)
|
|
55
|
-
from airflow.sdk.execution_time.schema.versions import bundle
|
|
56
55
|
|
|
57
56
|
if TYPE_CHECKING:
|
|
58
57
|
from collections.abc import Iterable
|
|
@@ -119,6 +118,18 @@ def resolve_body_class(body: Any) -> type[BaseModel] | None:
|
|
|
119
118
|
return registered_models_by_name().get(name)
|
|
120
119
|
|
|
121
120
|
|
|
121
|
+
def __getattr__(name: str) -> Any:
|
|
122
|
+
# Re-export ``bundle`` lazily so importing this package does not import ``cadwyn`` (-> FastAPI/
|
|
123
|
+
# Starlette) until something actually accesses ``schema.bundle``. The Task SDK supervisor imports
|
|
124
|
+
# this package on every worker, but only the foreign-language-SDK migration path touches the
|
|
125
|
+
# bundle, so a pure-Python worker never pays the cadwyn import.
|
|
126
|
+
if name == "bundle":
|
|
127
|
+
from airflow.sdk.execution_time.schema.versions import get_bundle
|
|
128
|
+
|
|
129
|
+
return get_bundle()
|
|
130
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
131
|
+
|
|
132
|
+
|
|
122
133
|
__all__ = [
|
|
123
134
|
"SchemaVersionMigrator",
|
|
124
135
|
"bundle",
|
|
@@ -33,7 +33,6 @@ import functools
|
|
|
33
33
|
from typing import TYPE_CHECKING, Any, cast
|
|
34
34
|
|
|
35
35
|
import attrs
|
|
36
|
-
from cadwyn import generate_versioned_models
|
|
37
36
|
|
|
38
37
|
if TYPE_CHECKING:
|
|
39
38
|
from cadwyn import VersionBundle
|
|
@@ -103,6 +102,11 @@ class SchemaVersionMigrator:
|
|
|
103
102
|
|
|
104
103
|
def _versioned_class(self, version: str, model: type[BaseModel]) -> type[BaseModel]:
|
|
105
104
|
"""Get the Cadwyn-generated class for *model* at *version*."""
|
|
105
|
+
# Imported here, not at module scope, so importing this module (and the parent ``schema``
|
|
106
|
+
# package the Task SDK supervisor pulls in) does not import ``cadwyn`` -> FastAPI/Starlette.
|
|
107
|
+
# Only the foreign-language-SDK migration path reaches this; a pure-Python worker never does.
|
|
108
|
+
from cadwyn import generate_versioned_models
|
|
109
|
+
|
|
106
110
|
if self._versioned_models is None:
|
|
107
111
|
self._versioned_models = generate_versioned_models(self._bundle)
|
|
108
112
|
return self._versioned_models[version][model]
|
|
@@ -207,8 +211,9 @@ def get_schema_version_migrator() -> SchemaVersionMigrator:
|
|
|
207
211
|
no per-call state, so concurrent callers can share a single
|
|
208
212
|
instance safely.
|
|
209
213
|
"""
|
|
210
|
-
from airflow.sdk.execution_time.schema.versions import
|
|
214
|
+
from airflow.sdk.execution_time.schema.versions import get_bundle
|
|
211
215
|
|
|
216
|
+
bundle = get_bundle()
|
|
212
217
|
return SchemaVersionMigrator(bundle=bundle, supervisor_version=bundle.versions[0].value)
|
|
213
218
|
|
|
214
219
|
|
|
@@ -4502,6 +4502,18 @@
|
|
|
4502
4502
|
"format": "date-time",
|
|
4503
4503
|
"title": "Timestamp",
|
|
4504
4504
|
"type": "string"
|
|
4505
|
+
},
|
|
4506
|
+
"partition_key": {
|
|
4507
|
+
"anyOf": [
|
|
4508
|
+
{
|
|
4509
|
+
"type": "string"
|
|
4510
|
+
},
|
|
4511
|
+
{
|
|
4512
|
+
"type": "null"
|
|
4513
|
+
}
|
|
4514
|
+
],
|
|
4515
|
+
"default": null,
|
|
4516
|
+
"title": "Partition Key"
|
|
4505
4517
|
}
|
|
4506
4518
|
},
|
|
4507
4519
|
"required": [
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
# or more contributor license agreements. See the NOTICE file
|
|
3
|
+
# distributed with this work for additional information
|
|
4
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
# to you under the Apache License, Version 2.0 (the
|
|
6
|
+
# "License"); you may not use this file except in compliance
|
|
7
|
+
# with the License. You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import functools
|
|
21
|
+
from typing import TYPE_CHECKING, Any
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from cadwyn import VersionBundle
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@functools.cache
|
|
28
|
+
def get_bundle() -> VersionBundle:
|
|
29
|
+
"""
|
|
30
|
+
Build the supervisor schema ``VersionBundle`` lazily.
|
|
31
|
+
|
|
32
|
+
The ``cadwyn`` import is deferred to here so importing this module -- and the parent ``schema``
|
|
33
|
+
package, which the Task SDK supervisor pulls in on every worker -- does not import ``cadwyn``,
|
|
34
|
+
which drags in FastAPI/Starlette/Jinja2. The bundle (and its cadwyn machinery) is only needed on
|
|
35
|
+
the foreign-language-SDK migration path; a pure-Python worker never builds it. Cached so the
|
|
36
|
+
bundle is constructed once per process.
|
|
37
|
+
"""
|
|
38
|
+
from cadwyn import HeadVersion, Version, VersionBundle
|
|
39
|
+
|
|
40
|
+
return VersionBundle(
|
|
41
|
+
HeadVersion(),
|
|
42
|
+
Version("2026-06-16"),
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def __getattr__(name: str) -> Any:
|
|
47
|
+
# Keep ``from ...versions import bundle`` working for existing callers without forcing the
|
|
48
|
+
# cadwyn import at module load (only resolves the bundle when ``bundle`` is actually accessed).
|
|
49
|
+
if name == "bundle":
|
|
50
|
+
return get_bundle()
|
|
51
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
@@ -372,6 +372,41 @@ class TestConnectionFromProcess:
|
|
|
372
372
|
client.close()
|
|
373
373
|
server.close()
|
|
374
374
|
|
|
375
|
+
def test_matches_dual_stack_ipv4_compatible_connection(self):
|
|
376
|
+
"""A dual-stack child whose loopback is rendered in IPv4-compatible form is accepted.
|
|
377
|
+
|
|
378
|
+
Companion to :meth:`test_matches_dual_stack_ipv4_mapped_connection` for macOS
|
|
379
|
+
(#68938): there the JVM's loopback connection is reported by ``psutil`` as the
|
|
380
|
+
deprecated IPv4-compatible ``::127.0.0.1`` rather than the IPv4-mapped
|
|
381
|
+
``::ffff:127.0.0.1`` seen on Linux. Both forms must canonicalize to plain
|
|
382
|
+
``127.0.0.1`` or the ownership check rejects the Java task. The OS will not
|
|
383
|
+
reliably establish a routable ``::`` connection on demand, so ``psutil``'s view of
|
|
384
|
+
the child's connections is mocked to the form macOS actually reports.
|
|
385
|
+
"""
|
|
386
|
+
server = _start_server()
|
|
387
|
+
_, server_port = server.getsockname()
|
|
388
|
+
client = socket.socket()
|
|
389
|
+
client.connect(("127.0.0.1", server_port))
|
|
390
|
+
conn, _ = server.accept()
|
|
391
|
+
child_port = conn.getpeername()[1]
|
|
392
|
+
mock_proc = MagicMock(spec=subprocess.Popen)
|
|
393
|
+
mock_proc.pid = os.getpid()
|
|
394
|
+
|
|
395
|
+
# On macOS psutil reports the child's dual-stack loopback in IPv4-compatible form.
|
|
396
|
+
compat_conn = MagicMock(
|
|
397
|
+
laddr=("::127.0.0.1", child_port),
|
|
398
|
+
raddr=("::127.0.0.1", server_port),
|
|
399
|
+
)
|
|
400
|
+
try:
|
|
401
|
+
with patch("airflow.sdk.coordinators._subprocess.psutil.Process") as mock_process:
|
|
402
|
+
mock_process.return_value.children.return_value = []
|
|
403
|
+
mock_process.return_value.net_connections.return_value = [compat_conn]
|
|
404
|
+
assert _is_connection_from_process(conn, mock_proc) is True
|
|
405
|
+
finally:
|
|
406
|
+
conn.close()
|
|
407
|
+
client.close()
|
|
408
|
+
server.close()
|
|
409
|
+
|
|
375
410
|
def test_rejects_tcp_connection_not_owned_by_child_process(self):
|
|
376
411
|
server = _start_server()
|
|
377
412
|
_, port = server.getsockname()
|
|
@@ -25,7 +25,16 @@ from unittest import mock
|
|
|
25
25
|
|
|
26
26
|
import pytest
|
|
27
27
|
|
|
28
|
-
from airflow.sdk import
|
|
28
|
+
from airflow.sdk import (
|
|
29
|
+
DAG,
|
|
30
|
+
Context,
|
|
31
|
+
Label,
|
|
32
|
+
Param,
|
|
33
|
+
PartitionedAtRuntime,
|
|
34
|
+
TaskGroup,
|
|
35
|
+
dag as dag_decorator,
|
|
36
|
+
task,
|
|
37
|
+
)
|
|
29
38
|
from airflow.sdk.bases.operator import BaseOperator
|
|
30
39
|
from airflow.sdk.bases.timetable import BaseTimetable
|
|
31
40
|
from airflow.sdk.definitions.param import DagParam, ParamsDict
|
|
@@ -438,8 +447,8 @@ class TestDag:
|
|
|
438
447
|
with pytest.raises(ValueError, match="ContinuousTimetable requires max_active_runs <= 1"):
|
|
439
448
|
dag = DAG("continuous", start_date=DEFAULT_DATE, schedule="@continuous", max_active_runs=25)
|
|
440
449
|
|
|
441
|
-
def
|
|
442
|
-
"""Regression guard: across every BaseTimetable subclass, only
|
|
450
|
+
def test_only_partitioned_at_runtime_has_partitioned_at_runtime_flag(self):
|
|
451
|
+
"""Regression guard: across every BaseTimetable subclass, only PartitionedAtRuntime sets partitioned_at_runtime=True."""
|
|
443
452
|
|
|
444
453
|
def all_subclasses(cls):
|
|
445
454
|
for sub in cls.__subclasses__():
|
|
@@ -447,7 +456,7 @@ class TestDag:
|
|
|
447
456
|
yield from all_subclasses(sub)
|
|
448
457
|
|
|
449
458
|
flagged = {c for c in all_subclasses(BaseTimetable) if c.partitioned_at_runtime}
|
|
450
|
-
assert flagged == {
|
|
459
|
+
assert flagged == {PartitionedAtRuntime}
|
|
451
460
|
|
|
452
461
|
def test_dag_add_task_checks_trigger_rule(self):
|
|
453
462
|
# A non fail stop dag should allow any trigger rule
|
|
@@ -28,6 +28,8 @@ schema diverges from head.
|
|
|
28
28
|
|
|
29
29
|
from __future__ import annotations
|
|
30
30
|
|
|
31
|
+
import subprocess
|
|
32
|
+
import sys
|
|
31
33
|
from typing import Literal
|
|
32
34
|
|
|
33
35
|
import pytest
|
|
@@ -334,3 +336,36 @@ class TestResolveBodyClass:
|
|
|
334
336
|
def test_extra_fields_in_body_do_not_affect_resolution(self, mock_registry):
|
|
335
337
|
body = {"type": "_LangSdkRequest", "ti_id": "t1", "field_a": 7}
|
|
336
338
|
assert resolve_body_class(body) is _LangSdkRequest
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
class TestLazyCadwynImport:
|
|
342
|
+
"""``cadwyn`` (which imports FastAPI/Starlette/Jinja2) must stay off the worker import path.
|
|
343
|
+
|
|
344
|
+
The Task SDK supervisor imports the schema package on every Celery pool worker, but ``cadwyn`` is
|
|
345
|
+
only needed on the foreign-language-SDK migration path, so its import is deferred. Each check runs
|
|
346
|
+
in a fresh interpreter because ``sys.modules`` is process-global and other tests import cadwyn.
|
|
347
|
+
"""
|
|
348
|
+
|
|
349
|
+
@pytest.mark.parametrize(
|
|
350
|
+
"module",
|
|
351
|
+
[
|
|
352
|
+
"airflow.sdk.execution_time.schema",
|
|
353
|
+
"airflow.sdk.execution_time.supervisor",
|
|
354
|
+
],
|
|
355
|
+
)
|
|
356
|
+
def test_importing_worker_path_does_not_load_cadwyn(self, module):
|
|
357
|
+
code = (
|
|
358
|
+
f"import sys; import {module}; "
|
|
359
|
+
"assert 'cadwyn' not in sys.modules, sorted(m for m in sys.modules if 'cadwyn' in m); "
|
|
360
|
+
"assert 'fastapi' not in sys.modules, 'fastapi was imported'"
|
|
361
|
+
)
|
|
362
|
+
subprocess.run([sys.executable, "-c", code], check=True, capture_output=True, text=True)
|
|
363
|
+
|
|
364
|
+
def test_accessing_bundle_loads_cadwyn(self):
|
|
365
|
+
# The foreign-SDK migration path does need cadwyn; accessing the bundle is where it loads.
|
|
366
|
+
code = (
|
|
367
|
+
"import sys; from airflow.sdk.execution_time.schema import bundle; "
|
|
368
|
+
"assert bundle.versions, 'bundle should be built'; "
|
|
369
|
+
"assert 'cadwyn' in sys.modules, 'cadwyn should load when the bundle is accessed'"
|
|
370
|
+
)
|
|
371
|
+
subprocess.run([sys.executable, "-c", code], check=True, capture_output=True, text=True)
|
|
@@ -660,6 +660,24 @@ class TestTriggeringAssetEventsAccessor:
|
|
|
660
660
|
assert mock_supervisor_comms.send.mock_calls == [mock.call(GetAssetByUri(uri=uri))]
|
|
661
661
|
assert _AssetRefResolutionMixin._asset_ref_cache
|
|
662
662
|
|
|
663
|
+
def test_partition_key_exposed(self):
|
|
664
|
+
"""A consumed asset event's partition key is reachable via triggering_asset_events."""
|
|
665
|
+
event = {
|
|
666
|
+
"asset": {"name": "1", "uri": "1", "extra": {}},
|
|
667
|
+
"extra": {},
|
|
668
|
+
"source_task_id": "t1",
|
|
669
|
+
"source_dag_id": "d1",
|
|
670
|
+
"source_run_id": "r1",
|
|
671
|
+
"source_map_index": -1,
|
|
672
|
+
"source_aliases": [],
|
|
673
|
+
"timestamp": "2025-01-01T00:00:12Z",
|
|
674
|
+
"partition_key": "2024-01-15",
|
|
675
|
+
}
|
|
676
|
+
accessor = TriggeringAssetEventsAccessor.build(
|
|
677
|
+
[AssetEventDagRunReferenceResult.model_validate(event)]
|
|
678
|
+
)
|
|
679
|
+
assert [e.partition_key for e in accessor[Asset("1")]] == ["2024-01-15"]
|
|
680
|
+
|
|
663
681
|
def test_source_task_instance_xcom_pull(self, mock_supervisor_comms, accessor):
|
|
664
682
|
events = accessor[Asset("2")]
|
|
665
683
|
assert len(events) == 1
|