apache-airflow-task-sdk 1.2.0rc2__tar.gz → 1.2.1__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 (268) hide show
  1. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/.pre-commit-config.yaml +1 -9
  2. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/PKG-INFO +4 -4
  3. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/pyproject.toml +4 -4
  4. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/__init__.py +1 -1
  5. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/configuration/parser.py +1 -0
  6. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/logging/structlog.py +34 -5
  7. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/otel_logger.py +16 -0
  8. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/decorator.py +8 -0
  9. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/configuration.py +7 -3
  10. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/comms.py +1 -1
  11. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/supervisor.py +1 -1
  12. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/plugins_manager.py +1 -1
  13. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/test_decorator.py +33 -0
  14. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_comms.py +47 -2
  15. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/test_configuration.py +29 -1
  16. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/.gitignore +0 -0
  17. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/LICENSE +0 -0
  18. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/NOTICE +0 -0
  19. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/README.md +0 -0
  20. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/dev/datamodel_code_formatter.py +0 -0
  21. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/dev/generate_task_sdk_models.py +0 -0
  22. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/.gitignore +0 -0
  23. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/api.rst +0 -0
  24. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/concepts.rst +0 -0
  25. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/conf.py +0 -0
  26. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/deferred-vs-async-operators.rst +0 -0
  27. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/dynamic-task-mapping.rst +0 -0
  28. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/examples.rst +0 -0
  29. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/img/airflow-2-approach.png +0 -0
  30. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/img/airflow-2-arch.png +0 -0
  31. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/img/airflow-3-arch.png +0 -0
  32. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/img/airflow-3-task-sdk.png +0 -0
  33. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/docs/index.rst +0 -0
  34. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/__init__.pyi +0 -0
  35. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/configuration/__init__.py +0 -0
  36. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/configuration/exceptions.py +0 -0
  37. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/dagnode/__init__.py +0 -0
  38. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/dagnode/node.py +0 -0
  39. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/listeners/__init__.py +0 -0
  40. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/listeners/listener.py +0 -0
  41. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/listeners/spec/__init__.py +0 -0
  42. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/listeners/spec/lifecycle.py +0 -0
  43. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/listeners/spec/taskinstance.py +0 -0
  44. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/logging/__init__.py +0 -0
  45. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/logging/_config.py +0 -0
  46. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/logging/_noncaching.py +0 -0
  47. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/logging/percent_formatter.py +0 -0
  48. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/logging/remote.py +0 -0
  49. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/logging/types.py +0 -0
  50. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/module_loading/__init__.py +0 -0
  51. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/module_loading/file_discovery.py +0 -0
  52. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/__init__.py +0 -0
  53. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/common.py +0 -0
  54. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/exceptions.py +0 -0
  55. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/__init__.py +0 -0
  56. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/base_stats_logger.py +0 -0
  57. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/datadog_logger.py +0 -0
  58. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/dual_stats_manager.py +0 -0
  59. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/metrics_registry.py +0 -0
  60. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/metrics_template.yaml +0 -0
  61. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/protocols.py +0 -0
  62. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/stats.py +0 -0
  63. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/statsd_logger.py +0 -0
  64. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/metrics/validators.py +0 -0
  65. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/otel_env_config.py +0 -0
  66. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/observability/traces/__init__.py +0 -0
  67. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/plugins_manager/__init__.py +0 -0
  68. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/plugins_manager/plugins_manager.py +0 -0
  69. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/providers_discovery/__init__.py +0 -0
  70. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/providers_discovery/providers_discovery.py +0 -0
  71. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/secrets_backend/__init__.py +0 -0
  72. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/secrets_backend/base.py +0 -0
  73. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/secrets_masker/__init__.py +0 -0
  74. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/secrets_masker/secrets_masker.py +0 -0
  75. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/serialization/__init__.py +0 -0
  76. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/template_rendering/__init__.py +0 -0
  77. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/timezones/__init__.py +0 -0
  78. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/_shared/timezones/timezone.py +0 -0
  79. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/api/__init__.py +0 -0
  80. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/api/client.py +0 -0
  81. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/api/datamodels/__init__.py +0 -0
  82. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/api/datamodels/_generated.py +0 -0
  83. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/api/datamodels/activities.py +0 -0
  84. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/__init__.py +0 -0
  85. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/branch.py +0 -0
  86. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/hook.py +0 -0
  87. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/notifier.py +0 -0
  88. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/operator.py +0 -0
  89. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/operatorlink.py +0 -0
  90. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/secrets_backend.py +0 -0
  91. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/sensor.py +0 -0
  92. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/skipmixin.py +0 -0
  93. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/timetable.py +0 -0
  94. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/bases/xcom.py +0 -0
  95. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/crypto.py +0 -0
  96. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/__init__.py +0 -0
  97. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/__init__.py +0 -0
  98. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/abstractoperator.py +0 -0
  99. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/contextmanager.py +0 -0
  100. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/dag_parsing_context.py +0 -0
  101. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/decorators.py +0 -0
  102. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/expandinput.py +0 -0
  103. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/logging_mixin.py +0 -0
  104. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/mixins.py +0 -0
  105. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/node.py +0 -0
  106. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/setup_teardown.py +0 -0
  107. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/templater.py +0 -0
  108. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/_internal/types.py +0 -0
  109. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/asset/__init__.py +0 -0
  110. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/asset/decorators.py +0 -0
  111. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/asset/metadata.py +0 -0
  112. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/callback.py +0 -0
  113. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/connection.py +0 -0
  114. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/context.py +0 -0
  115. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/dag.py +0 -0
  116. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/deadline.py +0 -0
  117. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/decorators/__init__.py +0 -0
  118. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/decorators/__init__.pyi +0 -0
  119. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/decorators/condition.py +0 -0
  120. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/decorators/setup_teardown.py +0 -0
  121. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/decorators/task_group.py +0 -0
  122. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/edges.py +0 -0
  123. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/mappedoperator.py +0 -0
  124. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/operator_resources.py +0 -0
  125. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/param.py +0 -0
  126. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/partition_mappers/__init__.py +0 -0
  127. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/partition_mappers/allowed_key.py +0 -0
  128. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/partition_mappers/base.py +0 -0
  129. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/partition_mappers/chain.py +0 -0
  130. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/partition_mappers/identity.py +0 -0
  131. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/partition_mappers/product.py +0 -0
  132. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/partition_mappers/temporal.py +0 -0
  133. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/taskgroup.py +0 -0
  134. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/template.py +0 -0
  135. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/timetables/__init__.py +0 -0
  136. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/timetables/_cron.py +0 -0
  137. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/timetables/_delta.py +0 -0
  138. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/timetables/assets.py +0 -0
  139. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/timetables/events.py +0 -0
  140. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/timetables/interval.py +0 -0
  141. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/timetables/simple.py +0 -0
  142. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/timetables/trigger.py +0 -0
  143. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/variable.py +0 -0
  144. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/definitions/xcom_arg.py +0 -0
  145. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/exceptions.py +0 -0
  146. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/__init__.py +0 -0
  147. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/cache.py +0 -0
  148. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/callback_runner.py +0 -0
  149. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/context.py +0 -0
  150. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/execute_workload.py +0 -0
  151. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/hitl.py +0 -0
  152. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/lazy_sequence.py +0 -0
  153. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/macros.py +0 -0
  154. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/secrets/__init__.py +0 -0
  155. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/secrets/execution_api.py +0 -0
  156. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/secrets_masker.py +0 -0
  157. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/sentry/__init__.py +0 -0
  158. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/sentry/configured.py +0 -0
  159. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/sentry/noop.py +0 -0
  160. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/task_mapping.py +0 -0
  161. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/task_runner.py +0 -0
  162. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/timeout.py +0 -0
  163. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/execution_time/xcom.py +0 -0
  164. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/io/__init__.py +0 -0
  165. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/io/fs.py +0 -0
  166. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/io/path.py +0 -0
  167. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/io/stat.py +0 -0
  168. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/io/store.py +0 -0
  169. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/io/typedef.py +0 -0
  170. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/lineage.py +0 -0
  171. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/listener.py +0 -0
  172. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/log.py +0 -0
  173. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/module_loading.py +0 -0
  174. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/observability/__init__.py +0 -0
  175. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/observability/metrics/__init__.py +0 -0
  176. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/observability/metrics/datadog_logger.py +0 -0
  177. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/observability/metrics/otel_logger.py +0 -0
  178. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/observability/metrics/stats_utils.py +0 -0
  179. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/observability/metrics/statsd_logger.py +0 -0
  180. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/observability/stats.py +0 -0
  181. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/providers_manager_runtime.py +0 -0
  182. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/py.typed +0 -0
  183. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/__init__.py +0 -0
  184. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/__init__.py +0 -0
  185. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/bignum.py +0 -0
  186. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/builtin.py +0 -0
  187. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/datetime.py +0 -0
  188. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/deltalake.py +0 -0
  189. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/iceberg.py +0 -0
  190. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/kubernetes.py +0 -0
  191. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/numpy.py +0 -0
  192. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/pandas.py +0 -0
  193. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/pydantic.py +0 -0
  194. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/timezone.py +0 -0
  195. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/serializers/uuid.py +0 -0
  196. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/serde/typing.py +0 -0
  197. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/timezone.py +0 -0
  198. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/types.py +0 -0
  199. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/src/airflow/sdk/yaml.py +0 -0
  200. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/__init__.py +0 -0
  201. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/conftest.py +0 -0
  202. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/__init__.py +0 -0
  203. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/api/__init__.py +0 -0
  204. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/api/test_client.py +0 -0
  205. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/__init__.py +0 -0
  206. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/notifier/test_notifier.txt +0 -0
  207. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/test_branch.py +0 -0
  208. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/test_hook.py +0 -0
  209. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/test_notifier.py +0 -0
  210. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/test_operator.py +0 -0
  211. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/test_sensor.py +0 -0
  212. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/test_skipmixin.py +0 -0
  213. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/bases/test_xcom.py +0 -0
  214. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/dags/dag_parsing_context.py +0 -0
  215. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/dags/super_basic.py +0 -0
  216. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/dags/super_basic_deferred_run.py +0 -0
  217. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/dags/super_basic_run.py +0 -0
  218. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/__init__.py +0 -0
  219. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/_internal/__init__.py +0 -0
  220. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/_internal/test_decorators.py +0 -0
  221. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/_internal/test_templater.py +0 -0
  222. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/conftest.py +0 -0
  223. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/decorators/__init__.py +0 -0
  224. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/decorators/test_condition.py +0 -0
  225. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/decorators/test_mapped.py +0 -0
  226. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/decorators/test_setup_teardown.py +0 -0
  227. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/decorators/test_task_group.py +0 -0
  228. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/sensors/__init__.py +0 -0
  229. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_asset.py +0 -0
  230. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_asset_decorators.py +0 -0
  231. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_callback.py +0 -0
  232. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_connection.py +0 -0
  233. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_context.py +0 -0
  234. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_dag.py +0 -0
  235. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_deadline.py +0 -0
  236. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_macros.py +0 -0
  237. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_mappedoperator.py +0 -0
  238. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_mixins.py +0 -0
  239. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_module_loading.py +0 -0
  240. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_operator_resources.py +0 -0
  241. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_param.py +0 -0
  242. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_taskgroup.py +0 -0
  243. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_template.py +0 -0
  244. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_variables.py +0 -0
  245. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/definitions/test_xcom_arg.py +0 -0
  246. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/docs/__init__.py +0 -0
  247. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/docs/test_docs_inventory.py +0 -0
  248. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/docs/test_public_api.py +0 -0
  249. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/__init__.py +0 -0
  250. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/conftest.py +0 -0
  251. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_cache.py +0 -0
  252. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_context.py +0 -0
  253. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_context_cache.py +0 -0
  254. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_hitl.py +0 -0
  255. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_lazy_sequence.py +0 -0
  256. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_secrets.py +0 -0
  257. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_sentry.py +0 -0
  258. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_supervisor.py +0 -0
  259. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_task_mapping.py +0 -0
  260. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/execution_time/test_task_runner.py +0 -0
  261. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/io/__init__.py +0 -0
  262. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/io/test_path.py +0 -0
  263. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/serde/__init__.py +0 -0
  264. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/serde/test_serde.py +0 -0
  265. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/serde/test_serializers.py +0 -0
  266. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/test_crypto.py +0 -0
  267. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/test_lineage.py +0 -0
  268. {apache_airflow_task_sdk-1.2.0rc2 → apache_airflow_task_sdk-1.2.1}/tests/task_sdk/test_providers_manager_runtime.py +0 -0
@@ -56,17 +56,9 @@ repos:
56
56
  pass_filenames: false
57
57
  files: ^src/airflow/sdk/definitions/dag\.py$|^src/airflow/sdk/definitions/decorators/task_group\.py$
58
58
  - id: mypy-task-sdk
59
- stages: ['pre-push']
60
59
  name: Run mypy for task-sdk
61
60
  language: python
62
- entry: ../scripts/ci/prek/mypy.py
63
- files: ^.*\.py$
64
- require_serial: true
65
- - id: mypy-task-sdk
66
- stages: ['manual']
67
- name: Run mypy for task-sdk (manual)
68
- language: python
69
- entry: ../scripts/ci/prek/mypy_folder.py task-sdk
61
+ entry: ../scripts/ci/prek/mypy_local_folder.py task-sdk
70
62
  pass_filenames: false
71
63
  files: ^.*\.py$
72
64
  require_serial: true
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-task-sdk
3
- Version: 1.2.0rc2
3
+ Version: 1.2.1
4
4
  Summary: Python Task SDK for Apache Airflow DAG Authors
5
5
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
6
- Project-URL: Documentation, https://airflow.staged.apache.org/docs/
7
- Project-URL: Homepage, https://airflow.staged.apache.org/
6
+ Project-URL: Documentation, https://airflow.apache.org/docs/
7
+ Project-URL: Homepage, https://airflow.apache.org/
8
8
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
9
9
  Project-URL: Source Code, https://github.com/apache/airflow
10
10
  Project-URL: Mastodon, https://fosstodon.org/@airflow
@@ -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.3.0,>=3.2.0
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
@@ -48,7 +48,7 @@ classifiers = [
48
48
  "Topic :: System :: Monitoring",
49
49
  ]
50
50
  dependencies = [
51
- "apache-airflow-core<3.3.0,>=3.2.0rc1",
51
+ "apache-airflow-core<3.3.0,>=3.2.0",
52
52
  "asgiref>=2.3.0; python_version < '3.14'",
53
53
  "asgiref>=3.11.1; python_version >= '3.14'",
54
54
  "attrs>=24.2.0, !=25.2.0",
@@ -108,8 +108,8 @@ dependencies = [
108
108
 
109
109
  [project.urls]
110
110
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
111
- Documentation = "https://airflow.staged.apache.org/docs/"
112
- Homepage = "https://airflow.staged.apache.org/"
111
+ Documentation = "https://airflow.apache.org/docs/"
112
+ Homepage = "https://airflow.apache.org/"
113
113
  "Slack Chat" = "https://s.apache.org/airflow-slack"
114
114
  "Source Code" = "https://github.com/apache/airflow"
115
115
  Mastodon = "https://fosstodon.org/@airflow"
@@ -120,7 +120,7 @@ YouTube = "https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/"
120
120
  [build-system]
121
121
  requires = [
122
122
  "hatchling==1.29.0",
123
- "packaging==26.0",
123
+ "packaging==26.1",
124
124
  "pathspec==1.0.4",
125
125
  "pluggy==1.6.0",
126
126
  "tomli==2.4.1; python_version < '3.11'",
@@ -93,7 +93,7 @@ __all__ = [
93
93
  "teardown",
94
94
  ]
95
95
 
96
- __version__ = "1.2.0rc2"
96
+ __version__ = "1.2.1"
97
97
 
98
98
  if TYPE_CHECKING:
99
99
  from airflow.sdk.api.datamodels._generated import DagRunState, TaskInstanceState, TriggerRule, WeightRule
@@ -257,6 +257,7 @@ class AirflowConfigParser(ConfigParser):
257
257
  ("scheduler", "ti_metrics_interval"): ("scheduler", "running_metrics_interval", "3.2.0"),
258
258
  ("api", "fallback_page_limit"): ("api", "page_size", "3.2.0"),
259
259
  ("workers", "missing_dag_retries"): ("workers", "missing_dag_retires", "3.1.8"),
260
+ ("database", "sql_alchemy_conn"): ("core", "sql_alchemy_conn", "3.0"),
260
261
  }
261
262
 
262
263
  # A mapping of new section -> (old section, since_version).
@@ -95,10 +95,15 @@ def _make_airflow_structlogger(min_level):
95
95
  if not args:
96
96
  return self._proxy_to_logger(name, event, **kw)
97
97
 
98
- # See https://github.com/python/cpython/blob/3.13/Lib/logging/__init__.py#L307-L326 for reason
99
- if args and len(args) == 1 and isinstance(args[0], Mapping) and args[0]:
100
- return self._proxy_to_logger(name, event % args[0], **kw)
101
- return self._proxy_to_logger(name, event % args, **kw)
98
+ # Match CPython's stdlib logging behavior: try positional formatting first,
99
+ # fall back to named substitution only if that fails.
100
+ # See https://github.com/python/cpython/blob/3.13/Lib/logging/__init__.py#L307-L326
101
+ try:
102
+ return self._proxy_to_logger(name, event % args, **kw)
103
+ except (TypeError, KeyError):
104
+ if len(args) == 1 and isinstance(args[0], Mapping) and args[0]:
105
+ return self._proxy_to_logger(name, event % args[0], **kw)
106
+ raise
102
107
 
103
108
  meth.__name__ = name
104
109
  return meth
@@ -216,6 +221,30 @@ def drop_positional_args(logger: Any, method_name: Any, event_dict: EventDict) -
216
221
  return event_dict
217
222
 
218
223
 
224
+ def positional_arguments_formatter(logger: Any, method_name: Any, event_dict: EventDict) -> EventDict:
225
+ """
226
+ Format positional arguments matching CPython's stdlib logging behavior.
227
+
228
+ Replaces structlog's built-in PositionalArgumentsFormatter to correctly handle the case
229
+ where a single dict is passed as a positional argument (e.g. ``log.warning('%s', {'a': 1})``).
230
+
231
+ CPython tries positional formatting first (``msg % args``), and only falls back to named
232
+ substitution (``msg % args[0]``) if that raises TypeError or KeyError. structlog's built-in
233
+ formatter does it the other way around, causing TypeError for ``%s`` format specifiers.
234
+ """
235
+ args = event_dict.get("positional_args")
236
+ if args:
237
+ try:
238
+ event_dict["event"] = event_dict["event"] % args
239
+ except (TypeError, KeyError):
240
+ if len(args) == 1 and isinstance(args[0], Mapping) and args[0]:
241
+ event_dict["event"] = event_dict["event"] % args[0]
242
+ else:
243
+ raise
244
+ del event_dict["positional_args"]
245
+ return event_dict
246
+
247
+
219
248
  # This is a placeholder fn, that is "edited" in place via the `suppress_logs_and_warning` decorator
220
249
  # The reason we need to do it this way is that structlog caches loggers on first use, and those include the
221
250
  # configured processors, so we can't get away with changing the config as it won't have any effect once the
@@ -268,7 +297,7 @@ def structlog_processors(
268
297
  timestamper,
269
298
  structlog.contextvars.merge_contextvars,
270
299
  structlog.processors.add_log_level,
271
- structlog.stdlib.PositionalArgumentsFormatter(),
300
+ positional_arguments_formatter,
272
301
  logger_name,
273
302
  redact_jwt,
274
303
  structlog.processors.StackInfoRenderer(),
@@ -433,6 +433,22 @@ def get_otel_logger(
433
433
  )
434
434
  readers.append(export_to_console)
435
435
 
436
+ # Reset the OTel SDK's Once() guard so set_meter_provider() can succeed.
437
+ # This is necessary when get_otel_logger() is called after a process fork:
438
+ # the parent's _METER_PROVIDER_SET_ONCE._done = True is inherited by the child,
439
+ # causing set_meter_provider() to silently fail with "Overriding of current
440
+ # MeterProvider is not allowed". The child then uses the parent's stale provider
441
+ # whose PeriodicExportingMetricReader thread is dead after fork.
442
+ # On first call (no fork), _done is already False so this is a no-op.
443
+ # See: https://github.com/apache/airflow/issues/64690
444
+ try:
445
+ import opentelemetry.metrics._internal as _metrics_internal
446
+
447
+ _metrics_internal._METER_PROVIDER_SET_ONCE._done = False
448
+ _metrics_internal._METER_PROVIDER = None
449
+ except (ImportError, AttributeError):
450
+ pass
451
+
436
452
  metrics.set_meter_provider(
437
453
  MeterProvider(
438
454
  resource=resource,
@@ -30,6 +30,7 @@ import typing_extensions
30
30
 
31
31
  from airflow.sdk import TriggerRule, timezone
32
32
  from airflow.sdk.bases.operator import (
33
+ BASEOPERATOR_ARGS_EXPECTED_TYPES,
33
34
  BaseOperator,
34
35
  coerce_resources,
35
36
  coerce_timedelta,
@@ -498,6 +499,13 @@ class _TaskDecorator(ExpandableFactory, Generic[FParams, FReturn, OperatorSubcla
498
499
  if "self" in self.function_signature.parameters:
499
500
  raise TypeError(f"@{self.decorator_name} does not support methods")
500
501
  self.kwargs.setdefault("task_id", self.function.__name__)
502
+ for arg_name, expected_type in BASEOPERATOR_ARGS_EXPECTED_TYPES.items():
503
+ if arg_name in self.kwargs:
504
+ value = self.kwargs[arg_name]
505
+ if value is not None and not isinstance(value, expected_type):
506
+ raise TypeError(
507
+ f"Expected {arg_name!r} to be {expected_type}, got {type(value).__name__}: {value!r}"
508
+ )
501
509
  update_wrapper(self, self.function)
502
510
 
503
511
  def __call__(self, *args: FParams.args, **kwargs: FParams.kwargs) -> XComArg:
@@ -30,6 +30,7 @@ from airflow.sdk import yaml
30
30
  from airflow.sdk._shared.configuration.parser import (
31
31
  AirflowConfigParser as _SharedAirflowConfigParser,
32
32
  configure_parser_from_configuration_description,
33
+ expand_env_var,
33
34
  )
34
35
  from airflow.sdk.execution_time.secrets import _SERVER_DEFAULT_SECRETS_SEARCH_PATH
35
36
 
@@ -99,7 +100,7 @@ def get_sdk_expansion_variables() -> dict[str, Any]:
99
100
  SDK only needs AIRFLOW_HOME for expansion. Core specific variables
100
101
  (FERNET_KEY, JWT_SECRET_KEY, etc.) are not needed in the SDK.
101
102
  """
102
- airflow_home = os.environ.get("AIRFLOW_HOME", os.path.expanduser("~/airflow"))
103
+ airflow_home = expand_env_var(os.environ.get("AIRFLOW_HOME", os.path.expanduser("~/airflow")))
103
104
  return {
104
105
  "AIRFLOW_HOME": airflow_home,
105
106
  }
@@ -107,8 +108,11 @@ def get_sdk_expansion_variables() -> dict[str, Any]:
107
108
 
108
109
  def get_airflow_config() -> str:
109
110
  """Get path to airflow.cfg file."""
110
- airflow_home = os.environ.get("AIRFLOW_HOME", os.path.expanduser("~/airflow"))
111
- return os.path.join(airflow_home, "airflow.cfg")
111
+ airflow_config_var = os.environ.get("AIRFLOW_CONFIG")
112
+ if airflow_config_var is None:
113
+ airflow_home: str = os.environ.get("AIRFLOW_HOME", os.path.expanduser("~/airflow"))
114
+ return os.path.join(expand_env_var(airflow_home), "airflow.cfg")
115
+ return expand_env_var(airflow_config_var)
112
116
 
113
117
 
114
118
  class AirflowSDKConfigParser(_SharedAirflowConfigParser):
@@ -216,7 +216,7 @@ class CommsDecoder(Generic[ReceiveMsgType, SendMsgType]):
216
216
  # always be in the return type union
217
217
  return resp # type: ignore[return-value]
218
218
 
219
- return self._get_response()
219
+ return self._get_response()
220
220
 
221
221
  async def asend(self, msg: SendMsgType) -> ReceiveMsgType | None:
222
222
  """
@@ -1184,7 +1184,7 @@ class ActivitySubprocess(WatchedSubprocess):
1184
1184
  # Reset the counter on success
1185
1185
  self.failed_heartbeats = 0
1186
1186
  except ServerResponseError as e:
1187
- if e.response.status_code in {HTTPStatus.NOT_FOUND, HTTPStatus.CONFLICT}:
1187
+ if e.response.status_code in {HTTPStatus.NOT_FOUND, HTTPStatus.GONE, HTTPStatus.CONFLICT}:
1188
1188
  log.error(
1189
1189
  "Server indicated the task shouldn't be running anymore",
1190
1190
  detail=e.detail,
@@ -27,7 +27,7 @@ from airflow import settings
27
27
  from airflow.sdk._shared.module_loading import import_string
28
28
  from airflow.sdk._shared.observability.metrics.stats import Stats
29
29
  from airflow.sdk._shared.plugins_manager import (
30
- AirflowPlugin,
30
+ AirflowPlugin as AirflowPlugin,
31
31
  _load_entrypoint_plugins,
32
32
  _load_plugins_from_plugin_directory,
33
33
  integrate_listener_plugins as _integrate_listener_plugins,
@@ -197,6 +197,39 @@ class TestDefaultFillingLogic:
197
197
 
198
198
  assert make_op(dummy_task, op_kwargs={"a": 1, "kw_required": "x"}) is not None
199
199
 
200
+ @pytest.mark.parametrize(
201
+ ("kwargs", "match"),
202
+ [
203
+ pytest.param(
204
+ {"task_id": "fetch_{}".format},
205
+ "Expected 'task_id' to be .*, got builtin_function_or_method",
206
+ id="task_id_bound_method",
207
+ ),
208
+ pytest.param(
209
+ {"retries": "three"},
210
+ "Expected 'retries' to be .*, got str",
211
+ id="retries_string",
212
+ ),
213
+ pytest.param(
214
+ {"queue": 42},
215
+ "Expected 'queue' to be .*, got int",
216
+ id="queue_int",
217
+ ),
218
+ pytest.param(
219
+ {"priority_weight": 1.5},
220
+ "Expected 'priority_weight' to be .*, got float",
221
+ id="priority_weight_float",
222
+ ),
223
+ ],
224
+ )
225
+ def test_wrong_arg_type_raises_type_error_at_decoration_time(self, kwargs, match):
226
+ """Non-matching types for operator kwargs raise TypeError at decoration time."""
227
+ with pytest.raises(TypeError, match=match):
228
+
229
+ @task(**kwargs)
230
+ def my_task():
231
+ return 1
232
+
200
233
 
201
234
  def make_op(func, op_args=None, op_kwargs=None, **kwargs):
202
235
  return DummyDecoratedOperator(
@@ -23,10 +23,17 @@ from socket import socketpair
23
23
 
24
24
  import msgspec
25
25
  import pytest
26
+ import structlog
26
27
 
27
28
  from airflow.sdk import timezone
28
- from airflow.sdk.execution_time.comms import BundleInfo, MaskSecret, StartupDetails, _ResponseFrame
29
- from airflow.sdk.execution_time.task_runner import CommsDecoder
29
+ from airflow.sdk.execution_time.comms import (
30
+ BundleInfo,
31
+ CommsDecoder,
32
+ MaskSecret,
33
+ StartupDetails,
34
+ VariableResult,
35
+ _ResponseFrame,
36
+ )
30
37
 
31
38
 
32
39
  class TestCommsModels:
@@ -148,3 +155,41 @@ class TestCommsDecoder:
148
155
  # It actually failed to read at all for large values, but lets just make sure we get it all
149
156
  assert len(msg.value) == 10 * 1024 * 1024 + 1
150
157
  assert msg.value[-1] == "b"
158
+
159
+ def test_send_thread_safety(self):
160
+ r, w = socketpair()
161
+ decoder = CommsDecoder(socket=r, log=structlog.get_logger())
162
+ num_threads = 5
163
+ results = [None] * num_threads
164
+ errors = [None] * num_threads
165
+ request_sent = [threading.Event() for _ in range(num_threads)]
166
+
167
+ def send_and_store(idx):
168
+ request_sent[idx].set() # Signal that this thread is about to send
169
+ try:
170
+ msg = VariableResult(key=f"key{idx}", value=f"value{idx}", type="VariableResult")
171
+ results[idx] = decoder.send(msg)
172
+ except Exception as e:
173
+ errors[idx] = e
174
+
175
+ threads = [threading.Thread(target=send_and_store, args=(i,)) for i in range(num_threads)]
176
+ for t in threads:
177
+ t.start()
178
+
179
+ # For each thread, wait until it signals it's ready, then send the response
180
+ for idx in range(num_threads):
181
+ request_sent[idx].wait()
182
+ resp = {"type": "VariableResult", "key": f"key{idx}", "value": f"value{idx}"}
183
+ frame = _ResponseFrame(idx, resp, None)
184
+ data = msgspec.msgpack.encode(frame)
185
+ w.sendall(len(data).to_bytes(4, byteorder="big") + data)
186
+
187
+ for t in threads:
188
+ t.join(timeout=5)
189
+ for idx, t in enumerate(threads):
190
+ assert not t.is_alive(), f"Thread {idx} did not finish (possible deadlock or hang in send method)"
191
+
192
+ for idx in range(num_threads):
193
+ assert errors[idx] is None, f"Thread {idx} error: {errors[idx]}"
194
+ assert results[idx].key == f"key{idx}", f"Out-of-order or missing response for thread {idx}"
195
+ assert results[idx].value == f"value{idx}", f"Incorrect value for thread {idx}"
@@ -23,7 +23,7 @@ from unittest import mock
23
23
  import pytest
24
24
 
25
25
  from airflow.sdk._shared.configuration.exceptions import AirflowConfigException
26
- from airflow.sdk.configuration import conf
26
+ from airflow.sdk.configuration import conf, get_airflow_config
27
27
  from airflow.sdk.providers_manager_runtime import ProvidersManagerTaskRuntime
28
28
 
29
29
  from tests_common.test_utils.config import (
@@ -156,3 +156,31 @@ class TestSDKProviderConfigPriority:
156
156
  custom_value = "my_custom.celery_executor"
157
157
  with conf_vars({("celery", "celery_app_name"): custom_value}):
158
158
  assert conf.get("celery", "celery_app_name") == custom_value
159
+
160
+
161
+ class TestGetAirflowConfig:
162
+ """Tests for get_airflow_config respecting AIRFLOW_CONFIG env var."""
163
+
164
+ def test_returns_airflow_config_env_var(self):
165
+ """get_airflow_config returns AIRFLOW_CONFIG when set."""
166
+ with mock.patch.dict("os.environ", {"AIRFLOW_CONFIG": "/custom/path/airflow.cfg"}):
167
+ assert get_airflow_config() == "/custom/path/airflow.cfg"
168
+
169
+ def test_expands_env_var_in_airflow_config(self):
170
+ """get_airflow_config expands env vars in AIRFLOW_CONFIG."""
171
+ with mock.patch.dict(
172
+ "os.environ", {"AIRFLOW_CONFIG": "$CUSTOM_DIR/airflow.cfg", "CUSTOM_DIR": "/resolved"}
173
+ ):
174
+ assert get_airflow_config() == "/resolved/airflow.cfg"
175
+
176
+ def test_default_fallback_when_airflow_config_not_set(self):
177
+ """get_airflow_config returns {AIRFLOW_HOME}/airflow.cfg when AIRFLOW_CONFIG is absent."""
178
+ env = {"AIRFLOW_HOME": "/custom/home"}
179
+ with mock.patch.dict("os.environ", env, clear=True):
180
+ assert get_airflow_config() == "/custom/home/airflow.cfg"
181
+
182
+ def test_expands_env_var_in_airflow_home_fallback(self):
183
+ """get_airflow_config expands env vars in AIRFLOW_HOME when AIRFLOW_CONFIG is absent."""
184
+ env = {"AIRFLOW_HOME": "$CUSTOM_DIR/airflow", "CUSTOM_DIR": "/resolved"}
185
+ with mock.patch.dict("os.environ", env, clear=True):
186
+ assert get_airflow_config() == "/resolved/airflow/airflow.cfg"