apache-airflow-providers-standard 1.7.0__tar.gz → 1.8.0rc1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/PKG-INFO +7 -7
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/README.rst +3 -3
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/changelog.rst +31 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/index.rst +1 -1
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/provider.yaml +2 -1
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/pyproject.toml +4 -4
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/__init__.py +1 -1
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_bash_decorator.py +1 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_hitl_operator.py +1 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/exceptions.py +5 -1
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/hitl.py +42 -6
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/triggers/hitl.py +49 -5
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/test_datetime.py +7 -3
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/test_hitl.py +166 -30
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/test_python.py +7 -10
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/sensors/test_external_task_sensor.py +2 -1
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/triggers/test_hitl.py +67 -14
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/commits.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/conf.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/configurations-ref.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/installing-providers-from-sources.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/operators/bash.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/operators/datetime.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/operators/index.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/operators/latest_only.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/operators/python.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/operators/trigger_dag_run.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/security.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/sensors/bash.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/sensors/datetime.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/sensors/external_task_sensor.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/sensors/file.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/sensors/index.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/docs/sensors/python.rst +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/LICENSE +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/bash.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/branch_external_python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/branch_python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/branch_virtualenv.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/external_python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/python_virtualenv.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/sensor.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/decorators/short_circuit.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_bash_operator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_branch_datetime_operator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_branch_day_of_week_operator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_branch_operator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_branch_operator_decorator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_external_task_child_deferrable.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_external_task_marker_dag.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_external_task_parent_deferrable.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_latest_only.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_python_decorator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_python_operator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_sensor_decorator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_sensors.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_short_circuit_decorator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_short_circuit_operator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/example_trigger_controller_dag.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/sql/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/example_dags/sql/sample.sql +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/get_provider_info.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/hooks/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/hooks/filesystem.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/hooks/package_index.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/hooks/subprocess.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/models/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/bash.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/branch.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/datetime.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/empty.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/latest_only.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/smooth.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/trigger_dagrun.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/operators/weekday.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/sensors/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/sensors/bash.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/sensors/date_time.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/sensors/external_task.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/sensors/filesystem.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/sensors/python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/sensors/time.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/sensors/time_delta.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/sensors/weekday.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/triggers/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/triggers/external_task.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/triggers/file.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/triggers/temporal.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/utils/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/utils/python_virtualenv.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/utils/python_virtualenv_script.jinja2 +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/utils/sensor_helper.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/utils/skipmixin.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/utils/weekday.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/src/airflow/providers/standard/version_compat.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/conftest.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/test_bash.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/test_branch_external_python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/test_branch_python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/test_branch_virtualenv.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/test_external_python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/test_python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/test_python_virtualenv.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/test_sensor.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/decorators/test_short_circuit.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/hooks/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/hooks/test_filesystem.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/hooks/test_package_index.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/hooks/test_subprocess.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/test_bash.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/test_branch_operator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/test_latest_only_operator.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/test_smooth.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/test_trigger_dagrun.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/operators/test_weekday.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/sensors/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/sensors/test_bash.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/sensors/test_date_time.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/sensors/test_filesystem.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/sensors/test_python.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/sensors/test_time.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/sensors/test_time_delta.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/sensors/test_weekday.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/test_exceptions.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/triggers/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/triggers/test_external_task.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/triggers/test_file.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/triggers/test_temporal.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/utils/__init__.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/utils/test_python_virtualenv.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/utils/test_sensor_helper.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/utils/test_skipmixin.py +0 -0
- {apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/tests/unit/standard/utils/test_weekday.py +0 -0
{apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-standard
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0rc1
|
|
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>
|
|
@@ -20,10 +20,10 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Classifier: Topic :: System :: Monitoring
|
|
23
|
-
Requires-Dist: apache-airflow>=2.10.
|
|
23
|
+
Requires-Dist: apache-airflow>=2.10.0rc1
|
|
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.
|
|
26
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-standard/1.
|
|
25
|
+
Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-standard/1.8.0/changelog.html
|
|
26
|
+
Project-URL: Documentation, https://airflow.staged.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.
|
|
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.
|
|
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.
|
|
91
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-standard/1.8.0/changelog.html>`_.
|
|
92
92
|
|
{apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/README.rst
RENAMED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
Package ``apache-airflow-providers-standard``
|
|
25
25
|
|
|
26
|
-
Release: ``1.
|
|
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.
|
|
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.
|
|
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
|
|
{apache_airflow_providers_standard-1.7.0 → apache_airflow_providers_standard-1.8.0rc1}/provider.yaml
RENAMED
|
@@ -21,12 +21,13 @@ name: Standard
|
|
|
21
21
|
description: |
|
|
22
22
|
Airflow Standard Provider
|
|
23
23
|
state: ready
|
|
24
|
-
source-date-epoch:
|
|
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.
|
|
28
|
+
version = "1.8.0rc1"
|
|
29
29
|
description = "Provider package apache-airflow-providers-standard for Apache Airflow"
|
|
30
30
|
readme = "README.rst"
|
|
31
31
|
authors = [
|
|
@@ -57,7 +57,7 @@ requires-python = ">=3.10"
|
|
|
57
57
|
# Make sure to run ``prek update-providers-dependencies --all-files``
|
|
58
58
|
# After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
|
|
59
59
|
dependencies = [
|
|
60
|
-
"apache-airflow>=2.10.
|
|
60
|
+
"apache-airflow>=2.10.0rc1",
|
|
61
61
|
]
|
|
62
62
|
|
|
63
63
|
[dependency-groups]
|
|
@@ -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.
|
|
99
|
-
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-standard/1.
|
|
98
|
+
"Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-standard/1.8.0"
|
|
99
|
+
"Changelog" = "https://airflow.staged.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.
|
|
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"
|
|
@@ -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(
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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__(
|
|
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.
|
|
132
|
-
resp.
|
|
170
|
+
resp.responded_by_user.name,
|
|
171
|
+
resp.responded_by_user.id,
|
|
133
172
|
resp.chosen_options,
|
|
134
|
-
resp.
|
|
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(
|