apache-airflow-task-sdk 1.4.0b1__tar.gz → 1.4.0b2__tar.gz

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