apache-airflow-providers-standard 1.7.0__tar.gz → 1.8.0__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.

Potentially problematic release.


This version of apache-airflow-providers-standard might be problematic. Click here for more details.

Files changed (144) hide show
  1. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/PKG-INFO +6 -6
  2. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/README.rst +3 -3
  3. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/changelog.rst +31 -0
  4. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/index.rst +1 -1
  5. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/provider.yaml +2 -1
  6. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/pyproject.toml +3 -3
  7. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/__init__.py +1 -1
  8. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_bash_decorator.py +1 -0
  9. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_hitl_operator.py +1 -0
  10. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/exceptions.py +5 -1
  11. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/hitl.py +42 -6
  12. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/triggers/hitl.py +49 -5
  13. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/test_datetime.py +7 -3
  14. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/test_hitl.py +166 -30
  15. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/test_python.py +7 -10
  16. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/sensors/test_external_task_sensor.py +2 -1
  17. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/triggers/test_hitl.py +67 -14
  18. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/commits.rst +0 -0
  19. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/conf.py +0 -0
  20. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/configurations-ref.rst +0 -0
  21. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/installing-providers-from-sources.rst +0 -0
  22. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/operators/bash.rst +0 -0
  23. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/operators/datetime.rst +0 -0
  24. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/operators/index.rst +0 -0
  25. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/operators/latest_only.rst +0 -0
  26. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/operators/python.rst +0 -0
  27. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/operators/trigger_dag_run.rst +0 -0
  28. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/security.rst +0 -0
  29. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/sensors/bash.rst +0 -0
  30. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/sensors/datetime.rst +0 -0
  31. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/sensors/external_task_sensor.rst +0 -0
  32. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/sensors/file.rst +0 -0
  33. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/sensors/index.rst +0 -0
  34. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/docs/sensors/python.rst +0 -0
  35. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/__init__.py +0 -0
  36. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/__init__.py +0 -0
  37. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/LICENSE +0 -0
  38. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/__init__.py +0 -0
  39. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/bash.py +0 -0
  40. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/branch_external_python.py +0 -0
  41. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/branch_python.py +0 -0
  42. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/branch_virtualenv.py +0 -0
  43. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/external_python.py +0 -0
  44. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/python.py +0 -0
  45. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/python_virtualenv.py +0 -0
  46. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/sensor.py +0 -0
  47. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/decorators/short_circuit.py +0 -0
  48. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/__init__.py +0 -0
  49. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_bash_operator.py +0 -0
  50. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_branch_datetime_operator.py +0 -0
  51. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_branch_day_of_week_operator.py +0 -0
  52. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_branch_operator.py +0 -0
  53. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_branch_operator_decorator.py +0 -0
  54. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_external_task_child_deferrable.py +0 -0
  55. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_external_task_marker_dag.py +0 -0
  56. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_external_task_parent_deferrable.py +0 -0
  57. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_latest_only.py +0 -0
  58. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_python_decorator.py +0 -0
  59. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_python_operator.py +0 -0
  60. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_sensor_decorator.py +0 -0
  61. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_sensors.py +0 -0
  62. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_short_circuit_decorator.py +0 -0
  63. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_short_circuit_operator.py +0 -0
  64. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/example_trigger_controller_dag.py +0 -0
  65. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/sql/__init__.py +0 -0
  66. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/example_dags/sql/sample.sql +0 -0
  67. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/get_provider_info.py +0 -0
  68. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/hooks/__init__.py +0 -0
  69. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/hooks/filesystem.py +0 -0
  70. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/hooks/package_index.py +0 -0
  71. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/hooks/subprocess.py +0 -0
  72. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/models/__init__.py +0 -0
  73. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/__init__.py +0 -0
  74. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/bash.py +0 -0
  75. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/branch.py +0 -0
  76. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/datetime.py +0 -0
  77. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/empty.py +0 -0
  78. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/latest_only.py +0 -0
  79. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/python.py +0 -0
  80. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/smooth.py +0 -0
  81. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/trigger_dagrun.py +0 -0
  82. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/operators/weekday.py +0 -0
  83. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/sensors/__init__.py +0 -0
  84. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/sensors/bash.py +0 -0
  85. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/sensors/date_time.py +0 -0
  86. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/sensors/external_task.py +0 -0
  87. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/sensors/filesystem.py +0 -0
  88. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/sensors/python.py +0 -0
  89. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/sensors/time.py +0 -0
  90. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/sensors/time_delta.py +0 -0
  91. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/sensors/weekday.py +0 -0
  92. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/triggers/__init__.py +0 -0
  93. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/triggers/external_task.py +0 -0
  94. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/triggers/file.py +0 -0
  95. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/triggers/temporal.py +0 -0
  96. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/utils/__init__.py +0 -0
  97. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/utils/python_virtualenv.py +0 -0
  98. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/utils/python_virtualenv_script.jinja2 +0 -0
  99. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/utils/sensor_helper.py +0 -0
  100. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/utils/skipmixin.py +0 -0
  101. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/utils/weekday.py +0 -0
  102. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/src/airflow/providers/standard/version_compat.py +0 -0
  103. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/conftest.py +0 -0
  104. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/__init__.py +0 -0
  105. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/__init__.py +0 -0
  106. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/__init__.py +0 -0
  107. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/test_bash.py +0 -0
  108. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/test_branch_external_python.py +0 -0
  109. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/test_branch_python.py +0 -0
  110. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/test_branch_virtualenv.py +0 -0
  111. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/test_external_python.py +0 -0
  112. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/test_python.py +0 -0
  113. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/test_python_virtualenv.py +0 -0
  114. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/test_sensor.py +0 -0
  115. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/decorators/test_short_circuit.py +0 -0
  116. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/hooks/__init__.py +0 -0
  117. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/hooks/test_filesystem.py +0 -0
  118. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/hooks/test_package_index.py +0 -0
  119. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/hooks/test_subprocess.py +0 -0
  120. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/__init__.py +0 -0
  121. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/test_bash.py +0 -0
  122. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/test_branch_operator.py +0 -0
  123. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/test_latest_only_operator.py +0 -0
  124. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/test_smooth.py +0 -0
  125. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/test_trigger_dagrun.py +0 -0
  126. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/operators/test_weekday.py +0 -0
  127. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/sensors/__init__.py +0 -0
  128. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/sensors/test_bash.py +0 -0
  129. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/sensors/test_date_time.py +0 -0
  130. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/sensors/test_filesystem.py +0 -0
  131. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/sensors/test_python.py +0 -0
  132. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/sensors/test_time.py +0 -0
  133. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/sensors/test_time_delta.py +0 -0
  134. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/sensors/test_weekday.py +0 -0
  135. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/test_exceptions.py +0 -0
  136. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/triggers/__init__.py +0 -0
  137. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/triggers/test_external_task.py +0 -0
  138. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/triggers/test_file.py +0 -0
  139. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/triggers/test_temporal.py +0 -0
  140. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/utils/__init__.py +0 -0
  141. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/utils/test_python_virtualenv.py +0 -0
  142. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/utils/test_sensor_helper.py +0 -0
  143. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/utils/test_skipmixin.py +0 -0
  144. {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0}/tests/unit/standard/utils/test_weekday.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-standard
3
- Version: 1.7.0
3
+ Version: 1.8.0
4
4
  Summary: Provider package apache-airflow-providers-standard for Apache Airflow
5
5
  Keywords: airflow-provider,standard,airflow,integration
6
6
  Author-email: Apache Software Foundation <dev@airflow.apache.org>
@@ -22,8 +22,8 @@ Classifier: Programming Language :: Python :: 3.13
22
22
  Classifier: Topic :: System :: Monitoring
23
23
  Requires-Dist: apache-airflow>=2.10.0
24
24
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
25
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-standard/1.7.0/changelog.html
26
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-standard/1.7.0
25
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0/changelog.html
26
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0
27
27
  Project-URL: Mastodon, https://fosstodon.org/@airflow
28
28
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
29
29
  Project-URL: Source Code, https://github.com/apache/airflow
@@ -54,7 +54,7 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
54
54
 
55
55
  Package ``apache-airflow-providers-standard``
56
56
 
57
- Release: ``1.7.0``
57
+ Release: ``1.8.0``
58
58
 
59
59
 
60
60
  Airflow Standard Provider
@@ -67,7 +67,7 @@ This is a provider package for ``standard`` provider. All classes for this provi
67
67
  are in ``airflow.providers.standard`` python package.
68
68
 
69
69
  You can find package information and changelog for the provider
70
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.7.0/>`_.
70
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0/>`_.
71
71
 
72
72
  Installation
73
73
  ------------
@@ -88,5 +88,5 @@ PIP package Version required
88
88
  ================== ==================
89
89
 
90
90
  The changelog for the provider package can be found in the
91
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.7.0/changelog.html>`_.
91
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0/changelog.html>`_.
92
92
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  Package ``apache-airflow-providers-standard``
25
25
 
26
- Release: ``1.7.0``
26
+ Release: ``1.8.0``
27
27
 
28
28
 
29
29
  Airflow Standard Provider
@@ -36,7 +36,7 @@ This is a provider package for ``standard`` provider. All classes for this provi
36
36
  are in ``airflow.providers.standard`` python package.
37
37
 
38
38
  You can find package information and changelog for the provider
39
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.7.0/>`_.
39
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0/>`_.
40
40
 
41
41
  Installation
42
42
  ------------
@@ -57,4 +57,4 @@ PIP package Version required
57
57
  ================== ==================
58
58
 
59
59
  The changelog for the provider package can be found in the
60
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.7.0/changelog.html>`_.
60
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0/changelog.html>`_.
@@ -35,6 +35,37 @@
35
35
  Changelog
36
36
  ---------
37
37
 
38
+ 1.8.0
39
+ .....
40
+
41
+
42
+ Release Date: ``|PypiReleaseDate|``
43
+
44
+ Features
45
+ ~~~~~~~~
46
+
47
+ * ``feat(hitl): get rid off "Fallback to defaults" in HITL (#55536)``
48
+ * ``feat(hitl): add fail_on_reject to ApprovalOperator (#55255)``
49
+
50
+ Bug Fixes
51
+ ~~~~~~~~~
52
+
53
+ * ``fix(hitl): make the user model in HITLDetail consistent with airflow user model (#55463)``
54
+ * ``fix(hitl): Resolve Conflict 409 in API server when user actions at nearly timeout (#55243)``
55
+ * ``fix(hitl): fix HITL timeout error handling (#55760)``
56
+
57
+ Misc
58
+ ~~~~
59
+
60
+ * ``refactor(hitl): rename response_at to responded_at (#55535)``
61
+ * ``refactor(hitl): remove AirflowException from HITLTriggerEventError inheritance (#55763)``
62
+
63
+ .. Below changes are excluded from the changelog. Move them to
64
+ appropriate section above if needed. Do not delete the lines(!):
65
+ * ``Remove SDK dependency from SerializedDAG (#55538)``
66
+ * ``Introduce e2e testing with testcontainers (#54072)``
67
+ * ``Switch all airflow logging to structlog (#52651)``
68
+
38
69
  1.7.0
39
70
  .....
40
71
 
@@ -66,7 +66,7 @@ apache-airflow-providers-standard package
66
66
  Airflow Standard Provider
67
67
 
68
68
 
69
- Release: 1.7.0
69
+ Release: 1.8.0
70
70
 
71
71
  Provider package
72
72
  ----------------
@@ -21,12 +21,13 @@ name: Standard
21
21
  description: |
22
22
  Airflow Standard Provider
23
23
  state: ready
24
- source-date-epoch: 1756877597
24
+ source-date-epoch: 1757951068
25
25
  # Note that those versions are maintained by release manager - do not update them manually
26
26
  # with the exception of case where other provider in sources has >= new provider version.
27
27
  # In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
28
28
  # to be done in the same PR
29
29
  versions:
30
+ - 1.8.0
30
31
  - 1.7.0
31
32
  - 1.6.0
32
33
  - 1.5.0
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
25
25
 
26
26
  [project]
27
27
  name = "apache-airflow-providers-standard"
28
- version = "1.7.0"
28
+ version = "1.8.0"
29
29
  description = "Provider package apache-airflow-providers-standard for Apache Airflow"
30
30
  readme = "README.rst"
31
31
  authors = [
@@ -95,8 +95,8 @@ apache-airflow-providers-common-sql = {workspace = true}
95
95
  apache-airflow-providers-standard = {workspace = true}
96
96
 
97
97
  [project.urls]
98
- "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-standard/1.7.0"
99
- "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-standard/1.7.0/changelog.html"
98
+ "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0"
99
+ "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0/changelog.html"
100
100
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
101
101
  "Source Code" = "https://github.com/apache/airflow"
102
102
  "Slack Chat" = "https://s.apache.org/airflow-slack"
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "1.7.0"
32
+ __version__ = "1.8.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.10.0"
@@ -105,6 +105,7 @@ def example_bash_decorator():
105
105
  from shlex import join
106
106
 
107
107
  files = _get_files_in_cwd()
108
+ files = files if files else ["."]
108
109
  cmd = join(["stat", *files])
109
110
 
110
111
  return cmd
@@ -140,6 +140,7 @@ with DAG(
140
140
  notifiers=[hitl_request_callback],
141
141
  on_success_callback=hitl_success_callback,
142
142
  on_failure_callback=hitl_failure_callback,
143
+ assigned_users=[{"id": "admin", "name": "admin"}],
143
144
  )
144
145
  # [END howto_hitl_approval_operator]
145
146
 
@@ -57,9 +57,13 @@ class DuplicateStateError(AirflowExternalTaskSensorException):
57
57
  """Raised when duplicate states are provided across allowed, skipped and failed states."""
58
58
 
59
59
 
60
- class HITLTriggerEventError(AirflowException):
60
+ class HITLTriggerEventError(Exception):
61
61
  """Raised when TriggerEvent contains error."""
62
62
 
63
63
 
64
64
  class HITLTimeoutError(HITLTriggerEventError):
65
65
  """Raised when HITLOperator timeouts."""
66
+
67
+
68
+ class HITLRejectException(AirflowException):
69
+ """Raised when an ApprovalOperator receives a "Reject" response when fail_on_reject is set to True."""
@@ -29,7 +29,7 @@ from typing import TYPE_CHECKING, Any
29
29
  from urllib.parse import ParseResult, urlencode, urlparse, urlunparse
30
30
 
31
31
  from airflow.configuration import conf
32
- from airflow.providers.standard.exceptions import HITLTimeoutError, HITLTriggerEventError
32
+ from airflow.providers.standard.exceptions import HITLRejectException, HITLTimeoutError, HITLTriggerEventError
33
33
  from airflow.providers.standard.operators.branch import BranchMixIn
34
34
  from airflow.providers.standard.triggers.hitl import HITLTrigger, HITLTriggerEventSuccessPayload
35
35
  from airflow.providers.standard.utils.skipmixin import SkipMixin
@@ -41,6 +41,7 @@ from airflow.sdk.timezone import utcnow
41
41
 
42
42
  if TYPE_CHECKING:
43
43
  from airflow.sdk.definitions.context import Context
44
+ from airflow.sdk.execution_time.hitl import HITLUser
44
45
  from airflow.sdk.types import RuntimeTaskInstanceProtocol
45
46
 
46
47
 
@@ -70,7 +71,7 @@ class HITLOperator(BaseOperator):
70
71
  multiple: bool = False,
71
72
  params: ParamsDict | dict[str, Any] | None = None,
72
73
  notifiers: Sequence[BaseNotifier] | BaseNotifier | None = None,
73
- respondents: str | list[str] | None = None,
74
+ assigned_users: HITLUser | list[HITLUser] | None = None,
74
75
  **kwargs,
75
76
  ) -> None:
76
77
  super().__init__(**kwargs)
@@ -86,7 +87,7 @@ class HITLOperator(BaseOperator):
86
87
  self.notifiers: Sequence[BaseNotifier] = (
87
88
  [notifiers] if isinstance(notifiers, BaseNotifier) else notifiers or []
88
89
  )
89
- self.respondents = [respondents] if isinstance(respondents, str) else respondents
90
+ self.assigned_users = [assigned_users] if isinstance(assigned_users, dict) else assigned_users
90
91
 
91
92
  self.validate_options()
92
93
  self.validate_params()
@@ -138,7 +139,7 @@ class HITLOperator(BaseOperator):
138
139
  defaults=self.defaults,
139
140
  multiple=self.multiple,
140
141
  params=self.serialized_params,
141
- respondents=self.respondents,
142
+ assigned_users=self.assigned_users,
142
143
  )
143
144
 
144
145
  if self.execution_timeout:
@@ -178,10 +179,12 @@ class HITLOperator(BaseOperator):
178
179
  return HITLTriggerEventSuccessPayload(
179
180
  chosen_options=chosen_options,
180
181
  params_input=params_input,
182
+ responded_at=event["responded_at"],
183
+ responded_by_user=event["responded_by_user"],
181
184
  )
182
185
 
183
186
  def process_trigger_event_error(self, event: dict[str, Any]) -> None:
184
- if "error_type" == "timeout":
187
+ if event["error_type"] == "timeout":
185
188
  raise HITLTimeoutError(event)
186
189
 
187
190
  raise HITLTriggerEventError(event)
@@ -300,12 +303,42 @@ class ApprovalOperator(HITLOperator, SkipMixin):
300
303
  APPROVE = "Approve"
301
304
  REJECT = "Reject"
302
305
 
303
- def __init__(self, ignore_downstream_trigger_rules: bool = False, **kwargs) -> None:
306
+ def __init__(
307
+ self,
308
+ *,
309
+ ignore_downstream_trigger_rules: bool = False,
310
+ fail_on_reject: bool = False,
311
+ **kwargs,
312
+ ) -> None:
313
+ """
314
+ Human-in-the-loop Operator for simple approval workflows.
315
+
316
+ This operator presents the user with two fixed options: "Approve" and "Reject".
317
+
318
+ Behavior:
319
+ - "Approve": Downstream tasks execute as normal.
320
+ - "Reject":
321
+ - Downstream tasks are skipped according to the `ignore_downstream_trigger_rules` setting.
322
+ - If `fail_on_reject=True`, the task fails instead of only skipping downstream tasks.
323
+
324
+ Warning:
325
+ Using `fail_on_reject=True` is generally discouraged. A HITLOperator's role is to collect
326
+ human input, and receiving any response—including "Reject"—indicates the task succeeded.
327
+ Treating "Reject" as a task failure mixes human decision outcomes with Airflow task
328
+ success/failure states.
329
+ Only use this option if you explicitly intend for a "Reject" response to fail the task.
330
+
331
+ Args:
332
+ ignore_downstream_trigger_rules: If True, skips all downstream tasks regardless of trigger rules.
333
+ fail_on_reject: If True, the task fails when "Reject" is selected. Generally discouraged.
334
+ Read the warning carefully before using.
335
+ """
304
336
  for arg in self.FIXED_ARGS:
305
337
  if arg in kwargs:
306
338
  raise ValueError(f"Passing {arg} to ApprovalOperator is not allowed.")
307
339
 
308
340
  self.ignore_downstream_trigger_rules = ignore_downstream_trigger_rules
341
+ self.fail_on_reject = fail_on_reject
309
342
 
310
343
  super().__init__(
311
344
  options=[self.APPROVE, self.REJECT],
@@ -321,6 +354,9 @@ class ApprovalOperator(HITLOperator, SkipMixin):
321
354
  self.log.info("Approved. Proceeding with downstream tasks...")
322
355
  return ret
323
356
 
357
+ if self.fail_on_reject and chosen_option == self.REJECT:
358
+ raise HITLRejectException('Receive "Reject"')
359
+
324
360
  if not self.downstream_task_ids:
325
361
  self.log.info("No downstream tasks; nothing to do.")
326
362
  return ret
@@ -25,12 +25,13 @@ if not AIRFLOW_V_3_1_PLUS:
25
25
  import asyncio
26
26
  from collections.abc import AsyncIterator
27
27
  from datetime import datetime
28
- from typing import Any, Literal, TypedDict
28
+ from typing import TYPE_CHECKING, Any, Literal, TypedDict
29
29
  from uuid import UUID
30
30
 
31
31
  from asgiref.sync import sync_to_async
32
32
 
33
33
  from airflow.sdk.execution_time.hitl import (
34
+ HITLUser,
34
35
  get_hitl_detail_content_detail,
35
36
  update_hitl_detail_response,
36
37
  )
@@ -43,6 +44,8 @@ class HITLTriggerEventSuccessPayload(TypedDict, total=False):
43
44
 
44
45
  chosen_options: list[str]
45
46
  params_input: dict[str, Any]
47
+ responded_by_user: HITLUser | None
48
+ responded_at: datetime
46
49
  timedout: bool
47
50
 
48
51
 
@@ -98,6 +101,35 @@ class HITLTrigger(BaseTrigger):
98
101
  """Loop until the Human-in-the-loop response received or timeout reached."""
99
102
  while True:
100
103
  if self.timeout_datetime and self.timeout_datetime < utcnow():
104
+ # Fetch latest HITL detail before fallback
105
+ resp = await sync_to_async(get_hitl_detail_content_detail)(ti_id=self.ti_id)
106
+ # Response already received, yield success and exit
107
+ if resp.response_received and resp.chosen_options:
108
+ if TYPE_CHECKING:
109
+ assert resp.responded_by_user is not None
110
+ assert resp.responded_at is not None
111
+
112
+ self.log.info(
113
+ "[HITL] responded_by=%s (id=%s) options=%s at %s (timeout fallback skipped)",
114
+ resp.responded_by_user.name,
115
+ resp.responded_by_user.id,
116
+ resp.chosen_options,
117
+ resp.responded_at,
118
+ )
119
+ yield TriggerEvent(
120
+ HITLTriggerEventSuccessPayload(
121
+ chosen_options=resp.chosen_options,
122
+ params_input=resp.params_input or {},
123
+ responded_at=resp.responded_at,
124
+ responded_by_user=HITLUser(
125
+ id=resp.responded_by_user.id,
126
+ name=resp.responded_by_user.name,
127
+ ),
128
+ timedout=False,
129
+ )
130
+ )
131
+ return
132
+
101
133
  if self.defaults is None:
102
134
  yield TriggerEvent(
103
135
  HITLTriggerEventFailurePayload(
@@ -107,11 +139,13 @@ class HITLTrigger(BaseTrigger):
107
139
  )
108
140
  return
109
141
 
110
- await sync_to_async(update_hitl_detail_response)(
142
+ resp = await sync_to_async(update_hitl_detail_response)(
111
143
  ti_id=self.ti_id,
112
144
  chosen_options=self.defaults,
113
145
  params_input=self.params,
114
146
  )
147
+ if TYPE_CHECKING:
148
+ assert resp.responded_at is not None
115
149
  self.log.info(
116
150
  "[HITL] timeout reached before receiving response, fallback to default %s", self.defaults
117
151
  )
@@ -119,6 +153,8 @@ class HITLTrigger(BaseTrigger):
119
153
  HITLTriggerEventSuccessPayload(
120
154
  chosen_options=self.defaults,
121
155
  params_input=self.params,
156
+ responded_by_user=None,
157
+ responded_at=resp.responded_at,
122
158
  timedout=True,
123
159
  )
124
160
  )
@@ -126,17 +162,25 @@ class HITLTrigger(BaseTrigger):
126
162
 
127
163
  resp = await sync_to_async(get_hitl_detail_content_detail)(ti_id=self.ti_id)
128
164
  if resp.response_received and resp.chosen_options:
165
+ if TYPE_CHECKING:
166
+ assert resp.responded_by_user is not None
167
+ assert resp.responded_at is not None
129
168
  self.log.info(
130
169
  "[HITL] responded_by=%s (id=%s) options=%s at %s",
131
- resp.responded_user_name,
132
- resp.responded_user_id,
170
+ resp.responded_by_user.name,
171
+ resp.responded_by_user.id,
133
172
  resp.chosen_options,
134
- resp.response_at,
173
+ resp.responded_at,
135
174
  )
136
175
  yield TriggerEvent(
137
176
  HITLTriggerEventSuccessPayload(
138
177
  chosen_options=resp.chosen_options,
139
178
  params_input=resp.params_input or {},
179
+ responded_at=resp.responded_at,
180
+ responded_by_user=HITLUser(
181
+ id=resp.responded_by_user.id,
182
+ name=resp.responded_by_user.name,
183
+ ),
140
184
  timedout=False,
141
185
  )
142
186
  )
@@ -28,11 +28,15 @@ from airflow.models.taskinstance import TaskInstance as TI
28
28
  from airflow.providers.standard.operators.datetime import BranchDateTimeOperator
29
29
  from airflow.providers.standard.operators.empty import EmptyOperator
30
30
  from airflow.timetables.base import DataInterval
31
- from airflow.utils import timezone
32
31
  from airflow.utils.session import create_session
33
32
  from airflow.utils.state import State
34
33
 
35
- from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_1, AIRFLOW_V_3_0_PLUS
34
+ from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_1, AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS
35
+
36
+ if AIRFLOW_V_3_1_PLUS:
37
+ from airflow.sdk import timezone
38
+ else:
39
+ from airflow.utils import timezone # type: ignore[attr-defined,no-redef]
36
40
 
37
41
  pytestmark = pytest.mark.db_test
38
42
 
@@ -113,7 +117,7 @@ class TestBranchDateTimeOperator:
113
117
  follow_task_ids_if_false="branch_2",
114
118
  target_upper=None,
115
119
  target_lower=None,
116
- dag=self.dag,
120
+ dag=self.dag_maker.dag,
117
121
  )
118
122
 
119
123
  @pytest.mark.parametrize(