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.
Files changed (322) hide show
  1. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/PKG-INFO +2 -2
  2. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/dev/generate_task_sdk_models.py +0 -2
  3. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/api.rst +1 -1
  4. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/pyproject.toml +1 -1
  5. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/__init__.py +4 -4
  6. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/__init__.pyi +2 -2
  7. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/datamodels/_generated.py +1 -0
  8. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/timetable.py +1 -1
  9. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/_subprocess.py +15 -5
  10. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/executable/coordinator.py +3 -4
  11. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/java/coordinator.py +4 -5
  12. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/dag.py +17 -2
  13. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/assets.py +1 -1
  14. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/request_handlers.py +94 -0
  15. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/schema/__init__.py +12 -1
  16. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/schema/migrator.py +7 -2
  17. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/schema/schema.json +12 -0
  18. apache_airflow_task_sdk-1.3.0rc1/src/airflow/sdk/execution_time/schema/versions/__init__.py +51 -0
  19. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/test_subprocess.py +35 -0
  20. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_dag.py +13 -4
  21. {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
  22. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_context.py +18 -0
  23. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_coordinator.py +31 -1
  24. apache_airflow_task_sdk-1.3.0rc1/tests/task_sdk/execution_time/test_request_handlers.py +167 -0
  25. apache_airflow_task_sdk-1.3.0b2/src/airflow/sdk/execution_time/schema/versions/__init__.py +0 -25
  26. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/.gitignore +0 -0
  27. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/.pre-commit-config.yaml +0 -0
  28. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/LICENSE +0 -0
  29. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/NOTICE +0 -0
  30. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/README.md +0 -0
  31. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/dev/datamodel_code_formatter.py +0 -0
  32. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/.gitignore +0 -0
  33. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/airflow-metadata.schema.json +0 -0
  34. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/concepts.rst +0 -0
  35. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/conf.py +0 -0
  36. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/deferred-vs-async-operators.rst +0 -0
  37. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/dynamic-task-mapping.rst +0 -0
  38. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/examples.rst +0 -0
  39. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/executable-bundle-spec.rst +0 -0
  40. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/img/airflow-2-approach.png +0 -0
  41. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/img/airflow-2-arch.png +0 -0
  42. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/img/airflow-3-arch.png +0 -0
  43. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/img/airflow-3-task-sdk.png +0 -0
  44. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/index.rst +0 -0
  45. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/docs/resumable-job-mixin.rst +0 -0
  46. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/configuration/__init__.py +0 -0
  47. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/configuration/exceptions.py +0 -0
  48. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/configuration/parser.py +0 -0
  49. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/dagnode/__init__.py +0 -0
  50. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/dagnode/node.py +0 -0
  51. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/__init__.py +0 -0
  52. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/listener.py +0 -0
  53. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/spec/__init__.py +0 -0
  54. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/spec/lifecycle.py +0 -0
  55. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/listeners/spec/taskinstance.py +0 -0
  56. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/__init__.py +0 -0
  57. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/_config.py +0 -0
  58. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/_noncaching.py +0 -0
  59. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/factory.py +0 -0
  60. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/percent_formatter.py +0 -0
  61. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/remote.py +0 -0
  62. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/structlog.py +0 -0
  63. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/logging/types.py +0 -0
  64. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/module_loading/__init__.py +0 -0
  65. {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
  66. {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
  67. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/__init__.py +0 -0
  68. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/common.py +0 -0
  69. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/exceptions.py +0 -0
  70. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/__init__.py +0 -0
  71. {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
  72. {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
  73. {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
  74. {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
  75. {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
  76. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/protocols.py +0 -0
  77. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/stats.py +0 -0
  78. {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
  79. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/metrics/validators.py +0 -0
  80. {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
  81. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/observability/traces/__init__.py +0 -0
  82. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/plugins_manager/__init__.py +0 -0
  83. {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
  84. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/providers_discovery/__init__.py +0 -0
  85. {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
  86. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/secrets_backend/__init__.py +0 -0
  87. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/secrets_backend/base.py +0 -0
  88. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/secrets_masker/__init__.py +0 -0
  89. {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
  90. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/serialization/__init__.py +0 -0
  91. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/state/__init__.py +0 -0
  92. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/template_rendering/__init__.py +0 -0
  93. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/timezones/__init__.py +0 -0
  94. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/_shared/timezones/timezone.py +0 -0
  95. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/__init__.py +0 -0
  96. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/client.py +0 -0
  97. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/datamodels/__init__.py +0 -0
  98. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/api/datamodels/activities.py +0 -0
  99. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/__init__.py +0 -0
  100. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/branch.py +0 -0
  101. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/decorator.py +0 -0
  102. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/hook.py +0 -0
  103. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/notifier.py +0 -0
  104. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/operator.py +0 -0
  105. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/operatorlink.py +0 -0
  106. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/resumablejobmixin.py +0 -0
  107. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/secrets_backend.py +0 -0
  108. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/sensor.py +0 -0
  109. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/skipmixin.py +0 -0
  110. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/bases/xcom.py +0 -0
  111. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/configuration.py +0 -0
  112. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/__init__.py +0 -0
  113. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/executable/__init__.py +0 -0
  114. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/coordinators/java/__init__.py +0 -0
  115. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/crypto.py +0 -0
  116. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/__init__.py +0 -0
  117. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/__init__.py +0 -0
  118. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/abstractoperator.py +0 -0
  119. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/contextmanager.py +0 -0
  120. {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
  121. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/decorators.py +0 -0
  122. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/expandinput.py +0 -0
  123. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/logging_mixin.py +0 -0
  124. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/mixins.py +0 -0
  125. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/node.py +0 -0
  126. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/setup_teardown.py +0 -0
  127. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/templater.py +0 -0
  128. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/_internal/types.py +0 -0
  129. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/asset/__init__.py +0 -0
  130. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/asset/access_control.py +0 -0
  131. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/asset/decorators.py +0 -0
  132. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/asset/metadata.py +0 -0
  133. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/callback.py +0 -0
  134. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/connection.py +0 -0
  135. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/context.py +0 -0
  136. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/deadline.py +0 -0
  137. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/__init__.py +0 -0
  138. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/__init__.pyi +0 -0
  139. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/condition.py +0 -0
  140. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/setup_teardown.py +0 -0
  141. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/decorators/task_group.py +0 -0
  142. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/edges.py +0 -0
  143. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/mappedoperator.py +0 -0
  144. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/operator_resources.py +0 -0
  145. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/param.py +0 -0
  146. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/__init__.py +0 -0
  147. {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
  148. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/base.py +0 -0
  149. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/chain.py +0 -0
  150. {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
  151. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/identity.py +0 -0
  152. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/product.py +0 -0
  153. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/temporal.py +0 -0
  154. {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
  155. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/partition_mappers/window.py +0 -0
  156. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/retry_policy.py +0 -0
  157. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/taskgroup.py +0 -0
  158. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/template.py +0 -0
  159. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/__init__.py +0 -0
  160. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/_cron.py +0 -0
  161. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/_delta.py +0 -0
  162. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/events.py +0 -0
  163. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/interval.py +0 -0
  164. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/simple.py +0 -0
  165. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/timetables/trigger.py +0 -0
  166. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/variable.py +0 -0
  167. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/definitions/xcom_arg.py +0 -0
  168. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/exceptions.py +0 -0
  169. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/__init__.py +0 -0
  170. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/cache.py +0 -0
  171. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/callback_runner.py +0 -0
  172. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/callback_supervisor.py +0 -0
  173. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/comms.py +0 -0
  174. {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
  175. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/context.py +0 -0
  176. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/coordinator.py +0 -0
  177. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/execute_workload.py +0 -0
  178. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/hitl.py +0 -0
  179. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/lazy_sequence.py +0 -0
  180. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/macros.py +0 -0
  181. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/schema/AGENTS.md +0 -0
  182. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/secrets/__init__.py +0 -0
  183. {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
  184. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/secrets_masker.py +0 -0
  185. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/sentry/__init__.py +0 -0
  186. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/sentry/configured.py +0 -0
  187. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/sentry/noop.py +0 -0
  188. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/supervisor.py +0 -0
  189. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/task_mapping.py +0 -0
  190. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/task_runner.py +0 -0
  191. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/timeout.py +0 -0
  192. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/execution_time/xcom.py +0 -0
  193. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/__init__.py +0 -0
  194. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/fs.py +0 -0
  195. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/path.py +0 -0
  196. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/stat.py +0 -0
  197. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/store.py +0 -0
  198. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/io/typedef.py +0 -0
  199. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/lineage.py +0 -0
  200. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/listener.py +0 -0
  201. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/log.py +0 -0
  202. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/module_loading.py +0 -0
  203. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/__init__.py +0 -0
  204. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/__init__.py +0 -0
  205. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/datadog_logger.py +0 -0
  206. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/otel_logger.py +0 -0
  207. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/stats_utils.py +0 -0
  208. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/metrics/statsd_logger.py +0 -0
  209. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/observability/stats.py +0 -0
  210. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/plugins_manager.py +0 -0
  211. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/providers_manager_runtime.py +0 -0
  212. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/py.typed +0 -0
  213. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/__init__.py +0 -0
  214. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/__init__.py +0 -0
  215. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/bignum.py +0 -0
  216. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/builtin.py +0 -0
  217. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/datetime.py +0 -0
  218. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/deltalake.py +0 -0
  219. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/iceberg.py +0 -0
  220. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/kubernetes.py +0 -0
  221. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/numpy.py +0 -0
  222. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/pandas.py +0 -0
  223. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/pydantic.py +0 -0
  224. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/timezone.py +0 -0
  225. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/serializers/uuid.py +0 -0
  226. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/serde/typing.py +0 -0
  227. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/state.py +0 -0
  228. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/timezone.py +0 -0
  229. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/types.py +0 -0
  230. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/src/airflow/sdk/yaml.py +0 -0
  231. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/__init__.py +0 -0
  232. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/conftest.py +0 -0
  233. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/__init__.py +0 -0
  234. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/api/__init__.py +0 -0
  235. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/api/test_client.py +0 -0
  236. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/__init__.py +0 -0
  237. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/notifier/test_notifier.txt +0 -0
  238. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_branch.py +0 -0
  239. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_decorator.py +0 -0
  240. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_hook.py +0 -0
  241. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_notifier.py +0 -0
  242. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_operator.py +0 -0
  243. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_resumablejobmixin.py +0 -0
  244. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_sensor.py +0 -0
  245. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_skipmixin.py +0 -0
  246. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/bases/test_xcom.py +0 -0
  247. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/__init__.py +0 -0
  248. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/executable/__init__.py +0 -0
  249. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/executable/test_coordinator.py +0 -0
  250. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/java/__init__.py +0 -0
  251. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/coordinators/java/test_coordinator.py +0 -0
  252. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/dags/dag_parsing_context.py +0 -0
  253. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/dags/signal_forward_test.py +0 -0
  254. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/dags/super_basic.py +0 -0
  255. {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
  256. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/dags/super_basic_run.py +0 -0
  257. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/__init__.py +0 -0
  258. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/_internal/__init__.py +0 -0
  259. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/_internal/test_decorators.py +0 -0
  260. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/_internal/test_templater.py +0 -0
  261. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/conftest.py +0 -0
  262. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/__init__.py +0 -0
  263. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/test_condition.py +0 -0
  264. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/test_mapped.py +0 -0
  265. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/decorators/test_result.py +0 -0
  266. {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
  267. {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
  268. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/sensors/__init__.py +0 -0
  269. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_asset.py +0 -0
  270. {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
  271. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_asset_decorators.py +0 -0
  272. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_callback.py +0 -0
  273. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_connection.py +0 -0
  274. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_context.py +0 -0
  275. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_deadline.py +0 -0
  276. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_macros.py +0 -0
  277. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_mappedoperator.py +0 -0
  278. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_mixins.py +0 -0
  279. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_module_loading.py +0 -0
  280. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_operator_resources.py +0 -0
  281. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_param.py +0 -0
  282. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_partition_mappers.py +0 -0
  283. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_retry_policy.py +0 -0
  284. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_taskgroup.py +0 -0
  285. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_template.py +0 -0
  286. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_variables.py +0 -0
  287. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_wait_policy.py +0 -0
  288. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/test_xcom_arg.py +0 -0
  289. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/timetables/__init__.py +0 -0
  290. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/definitions/timetables/test__cron.py +0 -0
  291. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/docs/__init__.py +0 -0
  292. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/docs/test_docs_inventory.py +0 -0
  293. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/docs/test_public_api.py +0 -0
  294. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/__init__.py +0 -0
  295. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/conftest.py +0 -0
  296. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/schema/__init__.py +0 -0
  297. {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
  298. {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
  299. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_cache.py +0 -0
  300. {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
  301. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_comms.py +0 -0
  302. {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
  303. {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
  304. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_hitl.py +0 -0
  305. {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
  306. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_secrets.py +0 -0
  307. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_sentry.py +0 -0
  308. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_supervisor.py +0 -0
  309. {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
  310. {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
  311. {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
  312. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/execution_time/test_timeout.py +0 -0
  313. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/io/__init__.py +0 -0
  314. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/io/test_path.py +0 -0
  315. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/serde/__init__.py +0 -0
  316. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/serde/test_serde.py +0 -0
  317. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/serde/test_serializers.py +0 -0
  318. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/test_configuration.py +0 -0
  319. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/test_crypto.py +0 -0
  320. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/test_exceptions.py +0 -0
  321. {apache_airflow_task_sdk-1.3.0b2 → apache_airflow_task_sdk-1.3.0rc1}/tests/task_sdk/test_lineage.py +0 -0
  322. {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.0b2
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.0b1
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
@@ -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.PartitionAtRuntime
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.0b1",
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",
@@ -67,7 +67,7 @@ __all__ = [
67
67
  "ObjectStoragePath",
68
68
  "Param",
69
69
  "ParamsDict",
70
- "PartitionAtRuntime",
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.0b2"
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
- "PartitionAtRuntime": ".definitions.timetables.assets",
272
+ "PartitionedAtRuntime": ".definitions.timetables.assets",
273
273
  "PartitionedAssetTimetable": ".definitions.timetables.assets",
274
274
  "PartitionMapper": ".definitions.partition_mappers.base",
275
275
  "PokeReturnValue": ".bases.sensor",
@@ -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
- "PartitionAtRuntime",
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.PartitionAtRuntime`; downstream code can
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-mapped IPv6 ("::ffff:127.0.0.1" -> "127.0.0.1") so a dual-stack
76
- # client (e.g. the JVM, shown v4-mapped in /proc/net/tcp6) matches the AF_INET
77
- # supervisor socket's plain-IPv4 address in the ownership check below.
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) and parsed.ipv4_mapped is not None:
84
- host = str(parsed.ipv4_mapped)
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
- ids_unrunnable = {x for x in all_tis if x.state not in FINISHED_STATES} - scheduled_tis
1408
- if not scheduled_tis and ids_unrunnable:
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 PartitionAtRuntime(BaseTimetable):
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 bundle
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 DAG, Context, Label, Param, PartitionAtRuntime, TaskGroup, dag as dag_decorator, task
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 test_only_partition_at_runtime_has_partitioned_at_runtime_flag(self):
442
- """Regression guard: across every BaseTimetable subclass, only PartitionAtRuntime sets partitioned_at_runtime=True."""
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 == {PartitionAtRuntime}
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