apache-airflow-task-sdk 1.2.2rc2__tar.gz → 1.3.0b1__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 (325) hide show
  1. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/.pre-commit-config.yaml +3 -0
  2. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/PKG-INFO +4 -2
  3. apache_airflow_task_sdk-1.3.0b1/docs/airflow-metadata.schema.json +70 -0
  4. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/api.rst +77 -1
  5. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/conf.py +3 -0
  6. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/deferred-vs-async-operators.rst +9 -0
  7. apache_airflow_task_sdk-1.3.0b1/docs/executable-bundle-spec.rst +359 -0
  8. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/index.rst +7 -0
  9. apache_airflow_task_sdk-1.3.0b1/docs/resumable-job-mixin.rst +167 -0
  10. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/pyproject.toml +10 -3
  11. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/__init__.py +85 -3
  12. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/__init__.pyi +50 -1
  13. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/configuration/parser.py +1 -0
  14. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/listener.py +47 -1
  15. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/_shared/logging/factory.py +182 -0
  16. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/remote.py +1 -1
  17. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/module_loading/__init__.py +32 -0
  18. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/_shared/module_loading/dag_file.py +23 -0
  19. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/common.py +16 -1
  20. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/base_stats_logger.py +1 -3
  21. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/datadog_logger.py +5 -6
  22. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/metrics_template.yaml +152 -10
  23. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/otel_logger.py +80 -16
  24. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/protocols.py +6 -4
  25. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/_shared/observability/metrics/stats.py +329 -0
  26. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/statsd_logger.py +4 -4
  27. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/traces/__init__.py +33 -2
  28. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/providers_discovery/providers_discovery.py +2 -2
  29. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/secrets_backend/base.py +39 -1
  30. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/secrets_masker/secrets_masker.py +10 -1
  31. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/serialization/__init__.py +1 -0
  32. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/_shared/state/__init__.py +308 -0
  33. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/client.py +242 -15
  34. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/datamodels/_generated.py +132 -1
  35. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/operator.py +42 -0
  36. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/bases/resumablejobmixin.py +235 -0
  37. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/sensor.py +3 -1
  38. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/timetable.py +8 -0
  39. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/xcom.py +2 -0
  40. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/configuration.py +42 -2
  41. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/__init__.py +19 -0
  42. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/_subprocess.py +410 -0
  43. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/executable/__init__.py +25 -0
  44. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/executable/coordinator.py +395 -0
  45. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/java/__init__.py +27 -0
  46. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/coordinators/java/coordinator.py +231 -0
  47. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/abstractoperator.py +2 -77
  48. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/templater.py +84 -10
  49. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/asset/__init__.py +11 -0
  50. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/asset/access_control.py +43 -0
  51. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/asset/decorators.py +7 -1
  52. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/connection.py +31 -1
  53. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/context.py +8 -1
  54. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/dag.py +76 -28
  55. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/deadline.py +63 -2
  56. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/__init__.py +4 -1
  57. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/task_group.py +7 -2
  58. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/mappedoperator.py +26 -7
  59. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/operator_resources.py +8 -8
  60. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/param.py +7 -3
  61. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/allowed_key.py +4 -2
  62. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/base.py +93 -0
  63. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/chain.py +7 -1
  64. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/fixed_key.py +52 -0
  65. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/product.py +12 -2
  66. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/temporal.py +210 -0
  67. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/wait_policy.py +74 -0
  68. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/partition_mappers/window.py +170 -0
  69. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/definitions/retry_policy.py +344 -0
  70. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/taskgroup.py +163 -46
  71. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/_cron.py +18 -0
  72. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/assets.py +7 -0
  73. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/variable.py +25 -0
  74. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/exceptions.py +54 -1
  75. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/callback_runner.py +1 -1
  76. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/callback_supervisor.py +460 -0
  77. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/comms.py +191 -20
  78. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/connection_test_supervisor.py +130 -0
  79. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/context.py +494 -4
  80. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/coordinator.py +246 -0
  81. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/execute_workload.py +3 -23
  82. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/request_handlers.py +274 -0
  83. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/AGENTS.md +122 -0
  84. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/__init__.py +128 -0
  85. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/migrator.py +215 -0
  86. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/schema.json +4879 -0
  87. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/execution_time/schema/versions/__init__.py +25 -0
  88. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/sentry/configured.py +14 -10
  89. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/supervisor.py +451 -213
  90. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/task_runner.py +352 -73
  91. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/timeout.py +9 -6
  92. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/xcom.py +2 -2
  93. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/fs.py +2 -2
  94. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/log.py +9 -32
  95. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/datadog_logger.py +1 -2
  96. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/stats_utils.py +2 -3
  97. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/stats.py +20 -3
  98. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/plugins_manager.py +3 -3
  99. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/providers_manager_runtime.py +55 -1
  100. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/__init__.py +95 -5
  101. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/datetime.py +6 -0
  102. apache_airflow_task_sdk-1.3.0b1/src/airflow/sdk/state.py +25 -0
  103. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/types.py +41 -6
  104. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/api/test_client.py +315 -1
  105. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_operator.py +20 -0
  106. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/bases/test_resumablejobmixin.py +341 -0
  107. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_sensor.py +14 -0
  108. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/executable/test_coordinator.py +505 -0
  109. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/java/test_coordinator.py +388 -0
  110. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/test_subprocess.py +789 -0
  111. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/dags/signal_forward_test.py +44 -0
  112. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/_internal/test_templater.py +333 -0
  113. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/decorators/test_task_group.py +56 -0
  114. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_asset.py +22 -2
  115. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/test_asset_access_control.py +101 -0
  116. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_asset_decorators.py +54 -14
  117. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_connection.py +9 -0
  118. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_dag.py +55 -1
  119. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_deadline.py +51 -1
  120. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_mappedoperator.py +2 -2
  121. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_operator_resources.py +38 -0
  122. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_param.py +33 -0
  123. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/test_partition_mappers.py +205 -0
  124. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/test_retry_policy.py +405 -0
  125. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_taskgroup.py +266 -2
  126. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_variables.py +104 -1
  127. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/test_wait_policy.py +56 -0
  128. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_xcom_arg.py +1 -1
  129. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/timetables/test__cron.py +64 -0
  130. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/docs/__init__.py +16 -0
  131. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/docs/test_docs_inventory.py +0 -1
  132. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/docs/test_public_api.py +12 -10
  133. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/__init__.py +16 -0
  134. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/schema/__init__.py +16 -0
  135. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/schema/_mock_version_bundle.py +189 -0
  136. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/schema/test_integration.py +338 -0
  137. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/schema/test_migrator.py +336 -0
  138. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_callback_supervisor.py +530 -0
  139. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_comms.py +23 -8
  140. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_connection_test_supervisor.py +264 -0
  141. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_context.py +844 -2
  142. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_coordinator.py +122 -0
  143. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_sentry.py +65 -12
  144. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_supervisor.py +710 -26
  145. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_supervisor_schemas_name_type_sync.py +78 -0
  146. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_task_runner.py +1038 -32
  147. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/execution_time/test_timeout.py +77 -0
  148. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/io/__init__.py +16 -0
  149. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/serde/__init__.py +16 -0
  150. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/serde/test_serde.py +95 -1
  151. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/serde/test_serializers.py +18 -0
  152. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/test_configuration.py +27 -0
  153. apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/test_exceptions.py +43 -0
  154. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/test_providers_manager_runtime.py +69 -1
  155. apache_airflow_task_sdk-1.2.2rc2/src/airflow/sdk/_shared/observability/metrics/dual_stats_manager.py +0 -282
  156. apache_airflow_task_sdk-1.2.2rc2/src/airflow/sdk/_shared/observability/metrics/stats.py +0 -133
  157. apache_airflow_task_sdk-1.2.2rc2/src/airflow/sdk/definitions/partition_mappers/base.py +0 -25
  158. apache_airflow_task_sdk-1.2.2rc2/src/airflow/sdk/definitions/partition_mappers/temporal.py +0 -67
  159. apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions/_internal/test_templater.py +0 -145
  160. apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/test_log.py +0 -120
  161. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/.gitignore +0 -0
  162. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/LICENSE +0 -0
  163. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/NOTICE +0 -0
  164. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/README.md +0 -0
  165. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/dev/datamodel_code_formatter.py +0 -0
  166. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/dev/generate_task_sdk_models.py +0 -0
  167. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/.gitignore +0 -0
  168. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/concepts.rst +0 -0
  169. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/dynamic-task-mapping.rst +0 -0
  170. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/examples.rst +0 -0
  171. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/img/airflow-2-approach.png +0 -0
  172. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/img/airflow-2-arch.png +0 -0
  173. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/img/airflow-3-arch.png +0 -0
  174. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/docs/img/airflow-3-task-sdk.png +0 -0
  175. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/configuration/__init__.py +0 -0
  176. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/configuration/exceptions.py +0 -0
  177. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/dagnode/__init__.py +0 -0
  178. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/dagnode/node.py +0 -0
  179. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/__init__.py +0 -0
  180. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/spec/__init__.py +0 -0
  181. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/spec/lifecycle.py +0 -0
  182. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/listeners/spec/taskinstance.py +0 -0
  183. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/__init__.py +0 -0
  184. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/_config.py +0 -0
  185. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/_noncaching.py +0 -0
  186. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/percent_formatter.py +0 -0
  187. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/structlog.py +0 -0
  188. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/logging/types.py +0 -0
  189. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/module_loading/file_discovery.py +0 -0
  190. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/__init__.py +0 -0
  191. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/exceptions.py +0 -0
  192. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/__init__.py +0 -0
  193. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/metrics_registry.py +0 -0
  194. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/metrics/validators.py +0 -0
  195. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/observability/otel_env_config.py +0 -0
  196. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/plugins_manager/__init__.py +0 -0
  197. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/plugins_manager/plugins_manager.py +0 -0
  198. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/providers_discovery/__init__.py +0 -0
  199. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/secrets_backend/__init__.py +0 -0
  200. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/secrets_masker/__init__.py +0 -0
  201. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/template_rendering/__init__.py +0 -0
  202. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/timezones/__init__.py +0 -0
  203. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/_shared/timezones/timezone.py +0 -0
  204. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/__init__.py +0 -0
  205. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/datamodels/__init__.py +0 -0
  206. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/api/datamodels/activities.py +0 -0
  207. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/__init__.py +0 -0
  208. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/branch.py +0 -0
  209. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/decorator.py +0 -0
  210. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/hook.py +0 -0
  211. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/notifier.py +0 -0
  212. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/operatorlink.py +0 -0
  213. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/secrets_backend.py +0 -0
  214. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/bases/skipmixin.py +0 -0
  215. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/crypto.py +0 -0
  216. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/__init__.py +0 -0
  217. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/__init__.py +0 -0
  218. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/contextmanager.py +0 -0
  219. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/dag_parsing_context.py +0 -0
  220. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/decorators.py +0 -0
  221. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/expandinput.py +0 -0
  222. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/logging_mixin.py +0 -0
  223. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/mixins.py +0 -0
  224. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/node.py +0 -0
  225. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/setup_teardown.py +0 -0
  226. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/_internal/types.py +0 -0
  227. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/asset/metadata.py +0 -0
  228. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/callback.py +0 -0
  229. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/__init__.pyi +0 -0
  230. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/condition.py +0 -0
  231. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/decorators/setup_teardown.py +0 -0
  232. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/edges.py +0 -0
  233. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/__init__.py +0 -0
  234. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/partition_mappers/identity.py +0 -0
  235. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/template.py +0 -0
  236. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/__init__.py +0 -0
  237. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/_delta.py +0 -0
  238. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/events.py +0 -0
  239. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/interval.py +0 -0
  240. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/simple.py +0 -0
  241. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/timetables/trigger.py +0 -0
  242. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/definitions/xcom_arg.py +0 -0
  243. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/__init__.py +0 -0
  244. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/cache.py +0 -0
  245. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/hitl.py +0 -0
  246. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/lazy_sequence.py +0 -0
  247. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/macros.py +0 -0
  248. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/secrets/__init__.py +0 -0
  249. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/secrets/execution_api.py +0 -0
  250. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/secrets_masker.py +0 -0
  251. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/sentry/__init__.py +0 -0
  252. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/sentry/noop.py +0 -0
  253. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/execution_time/task_mapping.py +0 -0
  254. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/__init__.py +0 -0
  255. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/path.py +0 -0
  256. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/stat.py +0 -0
  257. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/store.py +0 -0
  258. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/io/typedef.py +0 -0
  259. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/lineage.py +0 -0
  260. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/listener.py +0 -0
  261. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/module_loading.py +0 -0
  262. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/__init__.py +0 -0
  263. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/__init__.py +0 -0
  264. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/otel_logger.py +0 -0
  265. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/observability/metrics/statsd_logger.py +0 -0
  266. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/py.typed +0 -0
  267. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/__init__.py +0 -0
  268. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/bignum.py +0 -0
  269. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/builtin.py +0 -0
  270. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/deltalake.py +0 -0
  271. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/iceberg.py +0 -0
  272. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/kubernetes.py +0 -0
  273. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/numpy.py +0 -0
  274. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/pandas.py +0 -0
  275. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/pydantic.py +0 -0
  276. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/timezone.py +0 -0
  277. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/serializers/uuid.py +0 -0
  278. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/serde/typing.py +0 -0
  279. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/timezone.py +0 -0
  280. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/src/airflow/sdk/yaml.py +0 -0
  281. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/__init__.py +0 -0
  282. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/conftest.py +0 -0
  283. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/__init__.py +0 -0
  284. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/api/__init__.py +0 -0
  285. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/__init__.py +0 -0
  286. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/notifier/test_notifier.txt +0 -0
  287. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_branch.py +0 -0
  288. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_decorator.py +0 -0
  289. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_hook.py +0 -0
  290. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_notifier.py +0 -0
  291. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_skipmixin.py +0 -0
  292. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/bases/test_xcom.py +0 -0
  293. {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators}/__init__.py +0 -0
  294. {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions/_internal → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/executable}/__init__.py +0 -0
  295. {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions/decorators → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/coordinators/java}/__init__.py +0 -0
  296. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/dags/dag_parsing_context.py +0 -0
  297. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/dags/super_basic.py +0 -0
  298. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/dags/super_basic_deferred_run.py +0 -0
  299. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/dags/super_basic_run.py +0 -0
  300. {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/definitions/sensors → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions}/__init__.py +0 -0
  301. {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/docs → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/_internal}/__init__.py +0 -0
  302. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/_internal/test_decorators.py +0 -0
  303. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/conftest.py +0 -0
  304. {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/execution_time → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/decorators}/__init__.py +0 -0
  305. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/decorators/test_condition.py +0 -0
  306. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/decorators/test_mapped.py +0 -0
  307. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/decorators/test_setup_teardown.py +0 -0
  308. {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/io → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/sensors}/__init__.py +0 -0
  309. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_callback.py +0 -0
  310. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_context.py +0 -0
  311. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_macros.py +0 -0
  312. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_mixins.py +0 -0
  313. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_module_loading.py +0 -0
  314. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/definitions/test_template.py +0 -0
  315. {apache_airflow_task_sdk-1.2.2rc2/tests/task_sdk/serde → apache_airflow_task_sdk-1.3.0b1/tests/task_sdk/definitions/timetables}/__init__.py +0 -0
  316. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/conftest.py +0 -0
  317. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_cache.py +0 -0
  318. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_context_cache.py +0 -0
  319. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_hitl.py +0 -0
  320. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_lazy_sequence.py +0 -0
  321. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_secrets.py +0 -0
  322. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/execution_time/test_task_mapping.py +0 -0
  323. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/io/test_path.py +0 -0
  324. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/test_crypto.py +0 -0
  325. {apache_airflow_task_sdk-1.2.2rc2 → apache_airflow_task_sdk-1.3.0b1}/tests/task_sdk/test_lineage.py +0 -0
@@ -43,8 +43,11 @@ repos:
43
43
  ^src/airflow/sdk/definitions/deadline\.py$|
44
44
  ^src/airflow/sdk/definitions/dag\.py$|
45
45
  ^src/airflow/sdk/definitions/_internal/types\.py$|
46
+ ^src/airflow/sdk/execution_time/callback_supervisor\.py$|
46
47
  ^src/airflow/sdk/execution_time/execute_workload\.py$|
47
48
  ^src/airflow/sdk/execution_time/secrets_masker\.py$|
49
+ ^src/airflow/sdk/execution_time/connection_test_supervisor\.py$|
50
+ ^src/airflow/sdk/execution_time/schema/__init__\.py$|
48
51
  ^src/airflow/sdk/execution_time/supervisor\.py$|
49
52
  ^src/airflow/sdk/execution_time/task_runner\.py$|
50
53
  ^src/airflow/sdk/serde/serializers/kubernetes\.py$|
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-task-sdk
3
- Version: 1.2.2rc2
3
+ Version: 1.3.0b1
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.3.0,>=3.2.0rc1
32
+ Requires-Dist: apache-airflow-core<3.4.0,>=3.3.0b1
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
@@ -39,10 +39,12 @@ Requires-Dist: fsspec>=2023.10.0
39
39
  Requires-Dist: greenback>=1.2.1
40
40
  Requires-Dist: httpx>=0.27.0
41
41
  Requires-Dist: importlib-metadata>=6.5; python_version < '3.12'
42
+ Requires-Dist: isoduration>=20.11.0
42
43
  Requires-Dist: jinja2>=3.1.5
43
44
  Requires-Dist: jsonschema>=4.19.1
44
45
  Requires-Dist: methodtools>=0.4.7
45
46
  Requires-Dist: msgspec>=0.19.0
47
+ Requires-Dist: opentelemetry-api>=1.27.0
46
48
  Requires-Dist: packaging>=25.0
47
49
  Requires-Dist: pathspec>=0.9.0
48
50
  Requires-Dist: pendulum>=3.1.0
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://airflow.apache.org/schemas/sdk-executable/airflow-metadata-1.0.schema.json",
4
+ "title": "Airflow Executable SDK Bundle Metadata",
5
+ "description": "Build-time manifest declaring DAG and task identifiers exposed by an Airflow native-executable SDK bundle. See the Executable Bundle Spec documentation in the Airflow Task SDK.",
6
+ "type": "object",
7
+ "required": ["airflow_bundle_metadata_version", "sdk", "source", "dags"],
8
+ "additionalProperties": true,
9
+ "properties": {
10
+ "airflow_bundle_metadata_version": {
11
+ "type": "string",
12
+ "description": "Bundle-spec version this manifest conforms to (currently '1.0').",
13
+ "pattern": "^[0-9]+\\.[0-9]+(\\.[0-9]+)?$"
14
+ },
15
+ "sdk": {
16
+ "type": "object",
17
+ "description": "Identifies the SDK that produced the bundle.",
18
+ "required": ["language", "version", "supervisor_schema_version"],
19
+ "additionalProperties": true,
20
+ "properties": {
21
+ "language": {
22
+ "type": "string",
23
+ "description": "Lower-case source-language identifier (e.g. 'go', 'rust', 'cpp', 'zig').",
24
+ "pattern": "^[a-z][a-z0-9_+.\\-]*$"
25
+ },
26
+ "version": {
27
+ "type": "string",
28
+ "description": "SDK version used at build time.",
29
+ "minLength": 1
30
+ },
31
+ "supervisor_schema_version": {
32
+ "type": "string",
33
+ "description": "Dated supervisor wire-schema version the bundle was compiled against (e.g. '2026-06-16'). The coordinator passes this value to the supervisor so it can downgrade outbound messages / upgrade inbound messages to a shape the bundle understands.",
34
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
35
+ }
36
+ }
37
+ },
38
+ "source": {
39
+ "type": "string",
40
+ "description": "Original filename of the primary DAG source file (e.g. 'example.go'). The file's bytes are embedded in the bundle's source region; this field is a display name used by the Airflow UI.",
41
+ "minLength": 1
42
+ },
43
+ "dags": {
44
+ "type": "object",
45
+ "description": "Mapping of dag_id to DAG entry. Every dag_id the bundle exposes must appear here.",
46
+ "minProperties": 1,
47
+ "additionalProperties": {
48
+ "$ref": "#/$defs/dagEntry"
49
+ }
50
+ }
51
+ },
52
+ "$defs": {
53
+ "dagEntry": {
54
+ "type": "object",
55
+ "description": "Static description of a single DAG declared in the bundle.",
56
+ "required": ["tasks"],
57
+ "additionalProperties": true,
58
+ "properties": {
59
+ "tasks": {
60
+ "type": "array",
61
+ "description": "Static list of task_ids declared in the DAG.",
62
+ "items": {
63
+ "type": "string",
64
+ "minLength": 1
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
@@ -99,6 +99,8 @@ Bases
99
99
 
100
100
  .. autoapiclass:: airflow.sdk.SkipMixin
101
101
 
102
+ .. autoclass:: airflow.sdk.ResumableJobMixin
103
+
102
104
  .. autoapiclass:: airflow.sdk.BaseHook
103
105
 
104
106
  Callbacks
@@ -139,6 +141,22 @@ Tasks & Operators
139
141
 
140
142
  .. autoapifunction:: airflow.sdk.get_parsing_context
141
143
 
144
+ Retry Policies
145
+ --------------
146
+ Retry policies let you configure per-exception retry behaviour as a parameter on any
147
+ task or operator without modifying task code. See the Retry Policies section of the
148
+ Tasks page in the core docs for usage and design rationale.
149
+
150
+ .. autoapiclass:: airflow.sdk.RetryPolicy
151
+
152
+ .. autoapiclass:: airflow.sdk.ExceptionRetryPolicy
153
+
154
+ .. autoapiclass:: airflow.sdk.RetryRule
155
+
156
+ .. autoapiclass:: airflow.sdk.RetryDecision
157
+
158
+ .. autoclass:: airflow.sdk.RetryAction
159
+
142
160
  State Enums
143
161
  -----------
144
162
  .. autoclass:: airflow.sdk.TaskInstanceState
@@ -165,6 +183,8 @@ Assets
165
183
  ------
166
184
  .. autoapiclass:: airflow.sdk.Asset
167
185
 
186
+ .. autoapiclass:: airflow.sdk.AssetAccessControl
187
+
168
188
  .. autoapiclass:: airflow.sdk.AssetAlias
169
189
 
170
190
  .. autoapiclass:: airflow.sdk.AssetAll
@@ -193,6 +213,8 @@ Timetables
193
213
 
194
214
  .. autoapiclass:: airflow.sdk.MultipleCronTriggerTimetable
195
215
 
216
+ .. autoapiclass:: airflow.sdk.PartitionAtRuntime
217
+
196
218
  .. autoapiclass:: airflow.sdk.PartitionedAssetTimetable
197
219
 
198
220
 
@@ -217,14 +239,64 @@ Partition Mapper
217
239
 
218
240
  .. autoapiclass:: airflow.sdk.StartOfYearMapper
219
241
 
242
+ .. autoapiclass:: airflow.sdk.RollupMapper
243
+
244
+ .. autoapiclass:: airflow.sdk.WaitForAll
245
+
246
+ .. autoapiclass:: airflow.sdk.MinimumCount
247
+
220
248
  .. autoapiclass:: airflow.sdk.ProductMapper
221
249
 
222
250
  .. autoapiclass:: airflow.sdk.AllowedKeyMapper
223
251
 
252
+ .. autoapiclass:: airflow.sdk.FanOutMapper
253
+
254
+ .. autoapiclass:: airflow.sdk.FixedKeyMapper
255
+
256
+ Rollup Windows
257
+ ~~~~~~~~~~~~~~
258
+
259
+ .. autoapiclass:: airflow.sdk.Window
260
+
261
+ .. autoapiclass:: airflow.sdk.HourWindow
262
+
263
+ .. autoapiclass:: airflow.sdk.DayWindow
264
+
265
+ .. autoapiclass:: airflow.sdk.WeekWindow
266
+
267
+ .. autoapiclass:: airflow.sdk.MonthWindow
268
+
269
+ .. autoapiclass:: airflow.sdk.QuarterWindow
270
+
271
+ .. autoapiclass:: airflow.sdk.YearWindow
272
+
273
+ .. autoapiclass:: airflow.sdk.SegmentWindow
274
+
224
275
  I/O Helpers
225
276
  -----------
226
277
  .. autoapiclass:: airflow.sdk.ObjectStoragePath
227
278
 
279
+ Lineage
280
+ -------
281
+ The ``lineage`` module is available as part of the Task SDK. It provides the public hook lineage
282
+ collector interfaces used to capture and retrieve asset lineage metadata during task execution.
283
+
284
+ .. autoapimodule:: airflow.sdk.lineage
285
+
286
+ Coordinators
287
+ ------------
288
+
289
+ Coordinators bridge the Airflow worker and a non-Python language runtime.
290
+ See :doc:`apache-airflow:authoring-and-scheduling/language-sdks/index` for a conceptual overview.
291
+
292
+ .. rubric:: JVM
293
+
294
+ .. autoapiclass:: airflow.sdk.coordinators.java.JavaCoordinator
295
+
296
+ .. rubric:: Native executable (e.g. Go)
297
+
298
+ .. autoapiclass:: airflow.sdk.coordinators.executable.ExecutableCoordinator
299
+
228
300
  Execution Time Components
229
301
  -------------------------
230
302
  .. rubric:: Context
@@ -238,6 +310,10 @@ For a complete list of available context variables (such as ``dag_run``,
238
310
  ``task_instance``, ``logical_date``, etc.), see the
239
311
  :ref:`Templates reference <templates-ref>`.
240
312
 
313
+ .. rubric:: Task State
314
+
315
+ .. autodata:: airflow.sdk.NEVER_EXPIRE
316
+
241
317
  .. rubric:: Logging
242
318
 
243
319
  .. autofunction:: airflow.sdk.log.mask_secret
@@ -252,7 +328,7 @@ Everything else
252
328
  .. autoapimodule:: airflow.sdk
253
329
  :members:
254
330
  :special-members: __version__
255
- :exclude-members: BaseAsyncOperator, BaseOperator, DAG, dag, asset, Asset, AssetAlias, AssetAll, AssetAny, AssetWatcher, TaskGroup, TaskInstance, XComArg, get_current_context, get_parsing_context
331
+ :exclude-members: BaseAsyncOperator, BaseOperator, DAG, dag, asset, Asset, AssetAccessControl, AssetAlias, AssetAll, AssetAny, AssetWatcher, TaskGroup, TaskInstance, XComArg, get_current_context, get_parsing_context
256
332
  :undoc-members:
257
333
  :imported-members:
258
334
  :no-index:
@@ -55,6 +55,7 @@ extensions = [
55
55
  "sphinx.ext.autodoc",
56
56
  "autoapi.extension",
57
57
  "sphinx.ext.intersphinx",
58
+ "airflow_intersphinx",
58
59
  "exampleinclude",
59
60
  "sphinxcontrib.spelling",
60
61
  ]
@@ -100,6 +101,8 @@ rst_epilog = "\n".join(f".. |{key}| replace:: {replace}" for key, replace in glo
100
101
 
101
102
 
102
103
  intersphinx_resolve_self = "airflow"
104
+ # ``airflow:`` resolves against the published site; ``apache-airflow:`` (added by
105
+ # airflow_intersphinx) against the local inventory — use it for not-yet-published pages.
103
106
  intersphinx_mapping = {
104
107
  "airflow": ("https://airflow.apache.org/docs/apache-airflow/stable/", None),
105
108
  }
@@ -25,6 +25,15 @@ Deferred vs Async Operators
25
25
  Airflow 3.2 introduces Python-native async support for tasks, allowing concurrent I/O within a single worker slot.
26
26
  This page explains how async operators differ from deferred operators and when to use each.
27
27
 
28
+ .. versionchanged:: 3.3.0
29
+
30
+ Airflow 3.3 adds a third pattern for long-running tasks: resumable tasks, which use the
31
+ task state store to checkpoint progress across retries. For guidance on when to use
32
+ resumable tasks versus deferrable operators, see
33
+ :ref:`apache-airflow:concepts-resumable-tasks`. For details on the
34
+ :class:`~airflow.sdk.ResumableJobMixin` for external job crash recovery, see
35
+ :doc:`resumable-job-mixin`.
36
+
28
37
  Deferred Operators
29
38
  ------------------
30
39
 
@@ -0,0 +1,359 @@
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
+ Executable Bundle Spec
19
+ ======================
20
+
21
+ This document specifies the on-disk format of a build artifact produced by an
22
+ Airflow native-executable SDK (Go, Rust, C++, Zig, ...) and consumed by
23
+ :class:`~airflow.sdk.coordinators.executable.ExecutableCoordinator`
24
+ at deployment time.
25
+
26
+ The goal is a single, language-agnostic *bundle* shape so that scheduler,
27
+ worker, and UI behave identically regardless of which compiled SDK produced
28
+ the DAG.
29
+
30
+ Bundle-spec version: ``1.0``.
31
+
32
+ Container
33
+ ---------
34
+
35
+ A bundle is **the compiled executable itself, with a fixed-format footer
36
+ appended after the binary's normal end-of-file**. The executable remains
37
+ directly runnable; the footer is data that follows the last byte the OS
38
+ loader cares about and is invisible to ``exec()``. There is no enclosing
39
+ archive.
40
+
41
+ A bundle file therefore has three regions, in order from offset 0:
42
+
43
+ 1. The native executable (ELF / Mach-O / PE), including any code-signing
44
+ structures the platform appends.
45
+ 2. The primary DAG source file, embedded verbatim (UTF-8). MAY have length 0.
46
+ 3. The build-time manifest (``airflow-metadata.yaml`` content, UTF-8).
47
+
48
+ The file ends with a fixed 64-byte trailer that locates regions (2) and (3),
49
+ carries an integrity hash of the binary region, and identifies the file as a
50
+ bundle. See :ref:`bundle-trailer-layout`.
51
+
52
+ Filenames follow OS conventions for executables: no extension on Linux/macOS,
53
+ ``.exe`` on Windows. The scanner identifies bundles by the trailer's magic,
54
+ not by the filename.
55
+
56
+ The complete bundle file regions are:
57
+
58
+ .. code-block:: text
59
+
60
+ [0, source_start) native binary (must be non-empty)
61
+ [source_start, metadata_start) embedded source (may be zero length)
62
+ [metadata_start, file_size-64) build-time manifest
63
+ [file_size-64, file_size) 64-byte trailer
64
+
65
+ where ``metadata_start = file_size - 64 - metadata_len`` and
66
+ ``source_start = metadata_start - source_len``.
67
+
68
+ Reference Implementation
69
+ ------------------------
70
+
71
+ Below is a simple implementation to append the trailer with Python as a
72
+ reference when building your own packer. A language SDK is encouraged to
73
+ integrate trailer-packing into the build process to streamline the experience
74
+ for SDK users. Go SDK's ``airflow-go-pack`` is a good example.
75
+
76
+ .. code-block:: python
77
+
78
+ #!/usr/bin/env python3
79
+
80
+ import hashlib
81
+ import shutil
82
+ import struct
83
+
84
+ BINARY = pathlib.Path(...) # Path to the compiled executable.
85
+ OUTPUT = pathlib.Path(...) # Where to put the processed executable.
86
+ SOURCE = b"..." # Source code to embed.
87
+ METADATA = b"..." # UTF-8-encoded YAML metadata.
88
+
89
+ # SHA-256 covers the binary region only: bytes [0, source_start).
90
+ binary_sha256 = hashlib.sha256(BINARY.read_bytes()).digest()
91
+
92
+ trailer = struct.pack(
93
+ "<III 32s 12s 8s",
94
+ len(SOURCE), # source_len
95
+ len(METADATA), # metadata_len
96
+ 1, # footer_ver
97
+ binary_sha256,
98
+ bytes(12), # reserved
99
+ b"AFBNDL01", # magic
100
+ )
101
+ assert len(trailer) == 64
102
+
103
+ shutil.copy(BINARY, OUTPUT)
104
+ with OUTPUT.open("ab") as fh:
105
+ fh.write(SOURCE) # Embedded source region.
106
+ fh.write(METADATA) # Metadata region.
107
+ fh.write(trailer)
108
+ OUTPUT.chmod(0o755)
109
+
110
+
111
+ .. _bundle-trailer-layout:
112
+
113
+ Trailer Layout
114
+ --------------
115
+
116
+ The last 64 bytes of a conforming bundle are the trailer. All multi-byte
117
+ integers are little-endian.
118
+
119
+ .. code-block:: text
120
+
121
+ bytes 0..3 source_len uint32 length of the source region in bytes
122
+ bytes 4..7 metadata_len uint32 length of the metadata region in bytes
123
+ bytes 8..11 footer_ver uint32 currently 1
124
+ bytes 12..43 binary_sha256 32 bytes SHA-256 of the binary region [0, source_start)
125
+ bytes 44..55 reserved 12 bytes MUST be zero
126
+ bytes 56..63 magic 8 bytes ASCII "AFBNDL01"
127
+
128
+ The magic is the byte sequence ``0x41 0x46 0x42 0x4E 0x44 0x4C 0x30 0x31``
129
+ (``"AFBNDL01"``). The trailing ``01`` is the footer-format version repeated
130
+ in ASCII so a human can identify a bundle at a glance
131
+ (``tail -c 8 ./mybundle | xxd``); the binary ``footer_ver`` field is the
132
+ authoritative source of truth for parsing.
133
+
134
+ ``binary_sha256`` is the SHA-256 digest computed over the **binary region
135
+ only** — bytes ``[0, source_start)``. The hash field sits inside the trailer
136
+ and therefore cannot cover the bytes it occupies; it provides *integrity*
137
+ (the binary region has not been truncated, corrupted, or naively edited
138
+ between packing and exec) rather than *authenticity*
139
+ (see :ref:`bundle-code-signing` for how authenticity layers on top).
140
+
141
+ Reader algorithm:
142
+
143
+ 1. Open the file. Seek to ``EOF - 64``. Read 64 bytes.
144
+ 2. Compare bytes ``56..63`` against ``"AFBNDL01"``. If different, the file
145
+ is not a bundle; the scanner MUST ignore it.
146
+ 3. Parse ``footer_ver``. If unknown, fail with a versioning error.
147
+ 4. Compute ``metadata_start = filesize - 64 - metadata_len`` and
148
+ ``source_start = metadata_start - source_len``.
149
+ 5. Validate ``source_start >= 0`` and that the implied binary region
150
+ (``[0, source_start)``) is non-empty.
151
+ 6. Compute SHA-256 over the binary region ``[0, source_start)`` and compare
152
+ to ``binary_sha256``. Mismatch is a hard failure handled identically to
153
+ a magic-check failure: the scanner logs and skips the file. The result
154
+ MAY be cached by ``(path, inode, mtime, size)`` so the runtime does not
155
+ re-hash on every exec; a cache miss (file replaced, mtime bumped)
156
+ triggers re-verification.
157
+ 7. Read ``metadata_len`` bytes from ``metadata_start`` for the manifest.
158
+ 8. Read ``source_len`` bytes from ``source_start`` for the source view.
159
+ If ``source_len == 0``, no source is embedded; the UI displays
160
+ "(source not available)".
161
+
162
+ Source comes *before* metadata so a future ``footer_ver`` MAY introduce
163
+ additional trailing blobs (e.g. signed checksums, compressed deps) by
164
+ extending the trailer rather than inserting between existing blobs.
165
+
166
+ .. _bundle-metadata-schema:
167
+
168
+ ``airflow-metadata.yaml`` schema
169
+ --------------------------------
170
+
171
+ The metadata region carries the same YAML manifest documented previously,
172
+ produced at build time from a static scan of the DAG source. A
173
+ machine-readable JSON Schema is published at
174
+ :download:`airflow-metadata.schema.json` for use by build tooling, validators,
175
+ and editors.
176
+
177
+ .. code-block:: yaml
178
+
179
+ airflow_bundle_metadata_version: "1.0"
180
+ sdk:
181
+ language: go
182
+ version: "0.1.0"
183
+ supervisor_schema_version: "2026-06-16"
184
+ source: example.go
185
+ dags:
186
+ example_dag:
187
+ tasks:
188
+ - extract
189
+ - transform
190
+ - load
191
+ another_dag:
192
+ tasks:
193
+ - run
194
+
195
+ Top-level keys:
196
+
197
+ ``airflow_bundle_metadata_version`` (string, required)
198
+ The bundle-spec version this manifest conforms to. Currently ``"1.0"``.
199
+
200
+ ``sdk`` (mapping, required)
201
+ Identifies the SDK that produced the bundle.
202
+
203
+ - ``language`` (string, required): lower-case source-language identifier
204
+ (e.g. ``go``, ``rust``, ``cpp``, ``zig``).
205
+ - ``version`` (string, required): SDK version used at build time.
206
+ - ``supervisor_schema_version`` (string, required): dated AIP-72
207
+ supervisor wire-schema version the bundle was compiled against, in
208
+ ``YYYY-MM-DD`` format (e.g. ``"2026-06-16"``). The coordinator passes
209
+ this value to the supervisor so it can downgrade outbound messages /
210
+ upgrade inbound messages to a shape the bundle understands. The value
211
+ MUST resolve against the supervisor's schema bundle; the coordinator
212
+ validates it lazily when matching a bundle to a task at
213
+ task-execution time, and an unknown version causes that bundle to be
214
+ skipped.
215
+
216
+ ``source`` (string, required)
217
+ Original filename of the primary DAG source file (e.g. ``example.go``).
218
+ The file's bytes live in the source region of the bundle, not at this
219
+ path; this field is a display name the Airflow UI uses to label the
220
+ source-view panel and pick a syntax-highlighting mode from the
221
+ extension.
222
+
223
+ ``dags`` (mapping, required)
224
+ Mapping of ``dag_id`` to a *DAG entry*. Every ``dag_id`` the bundle
225
+ exposes MUST appear here. The scanner uses these keys to match a DAG
226
+ parsing or task-execution request to the bundle that owns it.
227
+
228
+ DAG entry fields:
229
+
230
+ ``tasks`` (list of strings, required)
231
+ Static list of ``task_id``\ s declared in the DAG. Empty lists are
232
+ permitted but discouraged.
233
+
234
+ Unrecognized top-level or DAG-entry keys MUST be ignored by the consumer so
235
+ that future SDK versions can extend the manifest without breaking older
236
+ runtimes.
237
+
238
+ Examples
239
+ --------
240
+
241
+ Go bundle::
242
+
243
+ example
244
+ ├── ELF/Mach-O/PE executable
245
+ ├── source region: contents of example.go
246
+ ├── metadata region: airflow-metadata.yaml (source: example.go)
247
+ └── trailer (64 B): lengths + binary_sha256 + AFBNDL01 magic
248
+
249
+ Rust bundle::
250
+
251
+ pipeline
252
+ ├── ELF/Mach-O/PE executable
253
+ ├── source region: contents of main.rs
254
+ ├── metadata region: airflow-metadata.yaml (source: main.rs)
255
+ └── trailer (64 B): lengths + binary_sha256 + AFBNDL01 magic
256
+
257
+ The bundle is one file. ``./example`` runs the binary; the appended data
258
+ is invisible to ``exec()``.
259
+
260
+ Build Pipeline Ordering
261
+ -----------------------
262
+
263
+ The footer is appended after the executable is otherwise complete. Producers
264
+ that perform additional post-build steps MUST observe the following order:
265
+
266
+ - **Strip** debug symbols *before* appending the footer. Strip
267
+ implementations operate on the binary's defined end and either leave
268
+ trailing data intact or truncate it; do not rely on either behaviour.
269
+ - **Compute binary_sha256** over the on-disk bytes *as they stand
270
+ immediately before the append*. At that moment the whole file is the
271
+ binary region; nothing has been written past its OS-defined end yet, so
272
+ the digest matches what the reader will recompute over
273
+ ``[0, source_start)`` after the append.
274
+ - **Append** ``<source><metadata><trailer>`` in a single write so a
275
+ partially written file fails the magic or hash check rather than
276
+ appearing as a half-valid bundle.
277
+
278
+ .. _bundle-code-signing:
279
+
280
+ Code Signing
281
+ ~~~~~~~~~~~~
282
+
283
+ The bundle format itself does not require OS-level code signing.
284
+ ``binary_sha256`` provides integrity against truncation, in-flight
285
+ corruption, and naive tampering, and Airflow's threat model treats
286
+ ``executables_root`` as Deployment-Manager-controlled — *authenticity*
287
+ (signed by a trusted identity) is a deployment-time concern rather than a
288
+ bundle-format one.
289
+
290
+ **Compressors** such as UPX are NOT supported. They rewrite the file
291
+ end-to-end, destroying both the trailer and the hash invariant.
292
+
293
+ Determinism: the trailer is byte-identical for byte-identical inputs, so a
294
+ deterministic build plus a canonical (sorted-key) manifest serialization
295
+ yields a byte-identical bundle file (and therefore a stable
296
+ ``binary_sha256``).
297
+
298
+ Deployment Layout
299
+ -----------------
300
+
301
+ Bundle files are placed **as-is** in any of the directories configured as the
302
+ ``executables_root`` kwarg on the
303
+ :class:`~airflow.sdk.coordinators.executable.ExecutableCoordinator` entry
304
+ under ``[sdk] coordinators``. The scanner walks each directory **recursively**
305
+ and considers only regular files whose **executable bit is set** for the
306
+ invoking user; files without the executable bit are skipped without reading
307
+ their trailer. For each candidate it reads the last 64 bytes and treats files
308
+ whose magic matches ``"AFBNDL01"`` as bundles. Matched files are then
309
+ SHA-256-verified per the reader algorithm; a mismatch demotes the file back
310
+ to "ignored, with an error log." Files without the magic are silently
311
+ ignored, so non-bundle files (READMEs, dotfiles) MAY share the directory
312
+ without interfering with the scan.
313
+
314
+ ::
315
+
316
+ /opt/airflow/executable-bundles/
317
+ ├── example
318
+ ├── team-a/
319
+ │ └── pipeline
320
+ └── analytics
321
+
322
+ At task-execution time the runtime execs the bundle file directly with the
323
+ coordinator arguments (``--comm=<addr>`` / ``--logs=<addr>``). No extraction,
324
+ no transient cache directory, no chmod-after-extract step is required: the
325
+ file is already a runnable executable with the appropriate permission bits
326
+ preserved by the build pipeline. The integrity check runs at scan/discovery
327
+ time and is cached by ``(path, inode, mtime, size)``, so the exec hot path
328
+ does not re-hash.
329
+
330
+ The compiled executable MUST honor the SDK coordinator protocol —
331
+ ``--comm=<host:port>`` / ``--logs=<host:port>`` socket-based IPC.
332
+
333
+ See :class:`~airflow.sdk.coordinators.executable.ExecutableCoordinator`
334
+ for the consumer-side coordinator.
335
+
336
+ Inspection
337
+ ----------
338
+
339
+ Because the bundle is a single executable rather than an archive,
340
+ inspecting the embedded source and manifest requires a small CLI rather
341
+ than an off-the-shelf ``unzip``. The Go SDK's ``airflow-go-pack`` tool
342
+ provides an ``inspect`` subcommand that dumps both regions; equivalent
343
+ helpers are expected from each language's packer.
344
+
345
+ Compatibility and Versioning
346
+ ----------------------------
347
+
348
+ - The current bundle-spec format version is ``1.0``
349
+ (``airflow_bundle_metadata_version``); the current trailer format version is
350
+ ``1`` (``footer_ver = 1``).
351
+ - Backward-incompatible bundle-spec changes increment the major component
352
+ of ``airflow_bundle_metadata_version`` and are gated behind an explicit opt-in
353
+ on the consumer side.
354
+ - New optional manifest fields MAY be added in minor versions and MUST be
355
+ ignored by older consumers.
356
+ - New trailer-format versions append fields after ``binary_sha256``
357
+ (consuming the reserved region) or extend the trailer with additional
358
+ trailing blobs ahead of the magic. Older readers MUST reject unknown
359
+ ``footer_ver`` rather than guessing.
@@ -88,9 +88,14 @@ Why use ``airflow.sdk``?
88
88
  - :class:`airflow.sdk.Context`
89
89
  - :class:`airflow.sdk.DAG`
90
90
  - :class:`airflow.sdk.EdgeModifier`
91
+ - :class:`airflow.sdk.ExceptionRetryPolicy`
91
92
  - :class:`airflow.sdk.Label`
92
93
  - :class:`airflow.sdk.ObjectStoragePath`
93
94
  - :class:`airflow.sdk.Param`
95
+ - :class:`airflow.sdk.RetryAction`
96
+ - :class:`airflow.sdk.RetryDecision`
97
+ - :class:`airflow.sdk.RetryPolicy`
98
+ - :class:`airflow.sdk.RetryRule`
94
99
  - :class:`airflow.sdk.TaskGroup`
95
100
  - :class:`airflow.sdk.TaskInstanceState`
96
101
  - :class:`airflow.sdk.DagRunState`
@@ -168,5 +173,7 @@ For the full public API reference, see the :doc:`api` page.
168
173
  examples
169
174
  dynamic-task-mapping
170
175
  deferred-vs-async-operators
176
+ resumable-job-mixin
171
177
  api
172
178
  concepts
179
+ executable-bundle-spec