This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a change to branch
dependabot/npm_and_yarn/providers/edge3/src/airflow/providers/edge3/plugins/www/edge-ui-package-updates-2fb672323e
in repository https://gitbox.apache.org/repos/asf/airflow.git
discard 40cc19fbc61 Bump the edge-ui-package-updates group across 1 directory
with 19 updates
add 5f3ed2385d2 fix mypy type errors in opensearch provider for sqlalchemy
2 upgrade (#56819)
add ed3dec85e87 fix mypy type errors in elasticsearch provider for
sqlalchemy 2 upgrade (#56818)
add df65e63c688 Bump eslint from 9.37.0 to 9.38.0 in
/providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates
group across 1 directory (#56847)
add b1777899662 `shared/README.md`: fix typo `airlow` -> `airflow` (#56898)
add 2d1aa75a889 Replace --force flag with -f in prek install commands for
Breeze setup docs (#56888)
add f46326bd4ee Add airflowctl integration tests to CODEOWNERS (#56900)
add 9b02bafa0a6 Add SQLA's `mapped_column` to common-compat (#56880)
add d0e6222ef8c Handle invalid token in `JWTRefreshMiddleware` (#56904)
add 3eda4081921 fix mypy type errors in imap provider for sqlalchemy 2
upgrade (#56810)
add a2455c0ceda Dag task named 'root' causes blue screen on hover (#56902)
add 22e347d1479 Pass args/kwargs to super in local executor (#56786)
add 7c9ffa5bf6b feat: add async jira notifier (#56326)
add e24cfb0fae9 Common.Compat: Extract reusable compat utilities and
rename to sdk (#56884)
add 0cc7da3369f Align HITL frontend and backend API sorting parameters
(#56030)
add 8ffb7b17a33 fix(scheduler): load dag_run eagering for execution API
validation (#56916)
add d83e80ff615 FAB: reuse ORM type hints from common-compat (#56903)
add e8194f12e8e Introduce generic Callbacks to support running callbacks
on executors (#54796)
add 4791bbb5206 Fix DAG params API contract broken by #55111 (#56831)
add c99f814ddb2 use AIRFLOW__CELERY__POOL=solo when debugging
celery-worker (#56868)
add 6802605ee8d Fix mypy errors for sqla2 in aws hooks (#56751)
add f32fdf86622 Close Catalan gap (#56905)
add 8d4d4b164e2 Add support of deferable mode for
CloudDataTransferServiceRunJobOperator (#56711)
add 389a34bddd7 Move container-related functions from PodManager to a
separate file (#56700)
add e24d78c3ef2 Add security checkpoints to release processes. (#56927)
add d16a8207b71 Restore timtable active_runs_limit check (#56922)
add 04e59381ef5 Bump psutil from 7.1.0 to 7.1.1 in /dev/breeze (#56899)
add d9790957192 update celery broker_url config description (#56917)
add 4dec042ff31 Pass required remote_host arg to SSHHook (#55664)
add 02cea461679 let PubsubPullTrigger exceptions propagate to triggerer
framework (#56400)
add e33598939d9 Serialize pydantic models in json mode. This ensures the
dict is json serializable. (#56736) (#56878)
add 209fb2e923b Revert "fix(scheduler): load dag_run eagering for
execution API validation (#56916)" (#56943)
add 800f733c22f fix: enable api to clear ti instances by specifying map
indexes (#56346)
add a244a0166a1 Add Thai UI translation (#56353)
add 652dd855aa0 fix MyPy type errors in test_assets.py ,
test_mapped_task_upstream_dep.py and test_serialized_objects.py. for
SQLAlchemy 2 compatibility (#56806)
add a35602c691c Simplify version-specific imports in the Standard provider
(#56867)
add df0e1ae9286 SQLA2/FAB: fix some type hints (#56928)
add d7174df9b81 Fix refresh token middleware error handling (#56892)
add c26fc9334cd Bump vite (#56914)
add 871ff3a010c fix: Add ``max_retry_delay`` to ``MappedOperator`` model
(#56396)
add 0e3312d035e SQLA2: Fix assorted mypy issues in core (#56930)
add 82d2aff08f2 fix mypy type errors in dag_processing for sqlalchemy 2
upgrade (#56843)
add f3ad20aad80 fix: Fix MyPy type errors in CLI commands for SQLAlchemy 2
compatibility (#56907)
add 34ac24fa27b Deprecate old vertex ai generative operators and introduce
new gen ai (#56950)
add 4f7908cc883 docs: Enhance triggering_asset_event retrieval
documentation in DAGs (#52666) (#52674)
add 9b1beb4b51a Bump vite from 7.1.5 to 7.1.11 in
/airflow-core/src/airflow/ui (#56912)
add 9366ab2f559 Update duration format to show milliseconds (#56775)
add 04e6398eaca Bump happy-dom from 17.4.6 to 20.0.2 in
/airflow-core/src/airflow/ui (#56684)
add 657cde25713 SQLA2: fix mypy violations in
`api_fastapi/.../calendar.py` (#56944)
add 6c2a45d556d Bump the edge-ui-package-updates group across 1 directory
with 19 updates
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (40cc19fbc61)
\
N -- N -- N
refs/heads/dependabot/npm_and_yarn/providers/edge3/src/airflow/providers/edge3/plugins/www/edge-ui-package-updates-2fb672323e
(6c2a45d556d)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.github/CODEOWNERS | 4 +
.github/boring-cyborg.yml | 3 +
.pre-commit-config.yaml | 7 +-
.../authoring-and-scheduling/asset-scheduling.rst | 88 +-
airflow-core/docs/img/airflow_erd.sha256 | 2 +-
airflow-core/docs/img/airflow_erd.svg | 4247 ++++++++++----------
airflow-core/docs/migrations-ref.rst | 4 +-
.../auth/managers/simple/ui/package-lock.json | 8 +-
.../auth/managers/simple/ui/package.json | 2 +-
.../auth/managers/simple/ui/pnpm-lock.yaml | 448 +--
.../api_fastapi/auth/middlewares/refresh_token.py | 45 +-
.../api_fastapi/core_api/datamodels/dags.py | 2 +-
.../core_api/datamodels/task_instances.py | 6 +-
.../api_fastapi/core_api/datamodels/tasks.py | 2 +-
.../core_api/openapi/v2-rest-api-generated.yaml | 8 +-
.../api_fastapi/core_api/routes/public/hitl.py | 1 +
.../core_api/routes/public/task_instances.py | 27 +-
.../api_fastapi/core_api/services/ui/calendar.py | 36 +-
.../src/airflow/cli/commands/dag_command.py | 16 +-
.../src/airflow/cli/commands/task_command.py | 8 +-
.../src/airflow/dag_processing/collection.py | 55 +-
airflow-core/src/airflow/dag_processing/dagbag.py | 2 +-
airflow-core/src/airflow/dag_processing/manager.py | 9 +-
.../src/airflow/executors/local_executor.py | 4 +-
airflow-core/src/airflow/executors/workloads.py | 71 +-
airflow-core/src/airflow/jobs/job.py | 30 +-
.../0091_3_2_0_restructure_callback_table.py | 101 +
airflow-core/src/airflow/models/__init__.py | 2 +
airflow-core/src/airflow/models/backfill.py | 13 +
airflow-core/src/airflow/models/callback.py | 208 +
.../src/airflow/models/db_callback_request.py | 39 +-
airflow-core/src/airflow/models/deadline.py | 2 +-
airflow-core/src/airflow/models/hitl_history.py | 39 +-
airflow-core/src/airflow/models/mappedoperator.py | 4 +
airflow-core/src/airflow/models/pool.py | 4 +-
.../src/airflow/models/renderedtifields.py | 2 +-
airflow-core/src/airflow/models/trigger.py | 2 +
.../src/airflow/serialization/definitions/param.py | 8 +
.../airflow/serialization/serialized_objects.py | 3 +
.../airflow/serialization/serializers/pydantic.py | 2 +-
.../ui/openapi-gen/queries/ensureQueryData.ts | 2 +-
.../src/airflow/ui/openapi-gen/queries/prefetch.ts | 2 +-
.../src/airflow/ui/openapi-gen/queries/queries.ts | 2 +-
.../src/airflow/ui/openapi-gen/queries/suspense.ts | 2 +-
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 3 +-
.../ui/openapi-gen/requests/services.gen.ts | 2 +-
.../airflow/ui/openapi-gen/requests/types.gen.ts | 5 +-
airflow-core/src/airflow/ui/package.json | 4 +-
airflow-core/src/airflow/ui/pnpm-lock.yaml | 534 +--
.../airflow/ui/public/i18n/locales/ca/common.json | 9 +-
.../ui/public/i18n/locales/ca/components.json | 5 +-
.../src/airflow/ui/public/i18n/locales/ca/dag.json | 2 +
.../airflow/ui/public/i18n/locales/ca/dags.json | 3 +-
.../airflow/ui/public/i18n/locales/ca/hitl.json | 3 +
.../airflow/ui/public/i18n/locales/en/hitl.json | 2 +
.../airflow/ui/public/i18n/locales/th/admin.json | 166 +
.../airflow/ui/public/i18n/locales/th/assets.json | 30 +
.../airflow/ui/public/i18n/locales/th/browse.json | 26 +
.../airflow/ui/public/i18n/locales/th/common.json | 318 ++
.../ui/public/i18n/locales/th/components.json | 132 +
.../src/airflow/ui/public/i18n/locales/th/dag.json | 154 +
.../airflow/ui/public/i18n/locales/th/dags.json | 96 +
.../ui/public/i18n/locales/th/dashboard.json | 45 +
.../airflow/ui/public/i18n/locales/th/hitl.json | 34 +
.../airflow/ui/public/i18n/locales/th/tasks.json | 10 +
.../airflow/ui/public/i18n/locales/zh-TW/hitl.json | 2 +
airflow-core/src/airflow/ui/src/i18n/config.ts | 1 +
.../airflow/ui/src/layouts/Details/Grid/GridTI.tsx | 4 +-
.../ui/src/layouts/Details/Grid/TaskNames.tsx | 4 +-
.../pages/HITLTaskInstances/HITLTaskInstances.tsx | 47 +-
.../src/airflow/ui/src/utils/datetimeUtils.test.ts | 6 +-
.../src/airflow/ui/src/utils/datetimeUtils.ts | 6 +-
airflow-core/src/airflow/utils/db.py | 2 +-
.../tests/unit/always/test_project_structure.py | 6 +
.../auth/middlewares/test_refresh_token.py | 28 +-
.../core_api/routes/public/test_assets.py | 4 +-
.../core_api/routes/public/test_dags.py | 4 +-
.../core_api/routes/public/test_task_instances.py | 141 +-
.../core_api/routes/public/test_tasks.py | 10 +-
airflow-core/tests/unit/models/test_callback.py | 139 +
.../tests/unit/models/test_mappedoperator.py | 178 +
.../unit/serialization/test_dag_serialization.py | 6 +
.../unit/serialization/test_serialized_objects.py | 2 +-
.../ti_deps/deps/test_mapped_task_upstream_dep.py | 2 +-
.../src/airflowctl/api/datamodels/generated.py | 8 +-
.../03a_contributors_quick_start_beginners.rst | 8 +-
dev/README_RELEASE_AIRFLOW.md | 9 +
dev/README_RELEASE_HELM_CHART.md | 9 +
dev/README_RELEASE_PROVIDERS.md | 9 +
dev/README_RELEASE_PYTHON_CLIENT.md | 13 +-
dev/breeze/tests/test_selective_checks.py | 17 +-
dev/breeze/uv.lock | 24 +-
dev/i18n/check_translations_completeness.py | 1 +
.../providers/amazon/aws/hooks/athena_sql.py | 20 +-
.../providers/amazon/aws/hooks/redshift_sql.py | 28 +-
providers/atlassian/jira/pyproject.toml | 2 +
.../airflow/providers/atlassian/jira/hooks/jira.py | 107 +-
.../providers/atlassian/jira/notifications/jira.py | 55 +-
.../tests/unit/atlassian/jira/hooks/test_jira.py | 120 +-
.../unit/atlassian/jira/notifications/test_jira.py | 36 +-
providers/celery/provider.yaml | 4 +-
.../airflow/providers/celery/get_provider_info.py | 2 +-
.../providers/cncf/kubernetes/hooks/kubernetes.py | 35 +-
.../providers/cncf/kubernetes/operators/pod.py | 8 +-
.../providers/cncf/kubernetes/utils/container.py | 118 +
.../providers/cncf/kubernetes/utils/pod_manager.py | 137 +-
.../unit/cncf/kubernetes/utils/test_container.py | 172 +
.../unit/cncf/kubernetes/utils/test_pod_manager.py | 147 -
.../providers/common/compat/_compat_utils.py | 105 +
.../airflow/providers/common/compat/lazy_compat.py | 310 --
.../providers/common/compat/lazy_compat.pyi | 232 --
.../src/airflow/providers/common/compat/sdk.py | 212 +
.../common/compat/sqlalchemy}/__init__.py | 0
.../providers/common/compat/sqlalchemy/orm.py | 9 +-
.../providers/common/compat/standard/operators.py | 23 +-
.../providers/common/compat/standard/triggers.py | 11 +-
.../providers/common/compat/standard/utils.py | 18 +-
.../unit/common/compat/sqlalchemy}/__init__.py | 0
.../unit/common/compat/sqlalchemy/test_orm.py | 145 +
.../tests/unit/common/compat/test__compat_utils.py | 215 +
.../compat/{test_lazy_compat.py => test_sdk.py} | 10 +-
.../providers/edge3/example_dags/win_test.py | 2 +-
.../providers/edge3/openapi/v2-edge-generated.yaml | 6 +-
.../providers/edge3/plugins/www/dist/main.umd.cjs | 38 +-
.../www/openapi-gen/requests/schemas.gen.ts | 8 +-
.../plugins/www/openapi-gen/requests/types.gen.ts | 2 +-
.../providers/edge3/plugins/www/package.json | 4 +-
.../providers/edge3/plugins/www/pnpm-lock.yaml | 248 +-
providers/edge3/www-hash.txt | 2 +-
.../providers/elasticsearch/log/es_task_handler.py | 14 +-
providers/fab/pyproject.toml | 2 +-
.../providers/fab/auth_manager/models/__init__.py | 17 +-
.../airflow/providers/fab/www/package-lock.json | 43 +-
.../fab/src/airflow/providers/fab/www/package.json | 2 +-
.../tests/unit/fab/auth_manager/test_security.py | 14 +-
providers/fab/www-hash.txt | 2 +-
providers/google/docs/operators/cloud/gen_ai.rst | 112 +
.../google/docs/operators/cloud/vertex_ai.rst | 68 +-
providers/google/provider.yaml | 11 +
.../src/airflow/providers/google/ads/hooks/ads.py | 2 +-
.../src/airflow/providers/google/assets/gcs.py | 2 +-
.../providers/google/cloud/hooks/cloud_sql.py | 2 +-
.../cloud/hooks/cloud_storage_transfer_service.py | 16 +
.../providers/google/cloud/hooks/dataflow.py | 2 +-
.../providers/google/cloud/hooks/dataprep.py | 2 +-
.../airflow/providers/google/cloud/hooks/gen_ai.py | 196 +
.../airflow/providers/google/cloud/hooks/looker.py | 2 +-
.../cloud/hooks/vertex_ai/generative_model.py | 30 +
.../airflow/providers/google/cloud/links/base.py | 2 +-
.../providers/google/cloud/links/dataproc.py | 2 +-
.../providers/google/cloud/operators/cloud_sql.py | 2 +-
.../operators/cloud_storage_transfer_service.py | 31 +
.../providers/google/cloud/operators/gen_ai.py | 389 ++
.../cloud/operators/vertex_ai/generative_model.py | 30 +
.../providers/google/cloud/sensors/bigquery.py | 2 +-
.../providers/google/cloud/sensors/bigquery_dts.py | 2 +-
.../providers/google/cloud/sensors/bigtable.py | 2 +-
.../google/cloud/sensors/cloud_composer.py | 2 +-
.../sensors/cloud_storage_transfer_service.py | 2 +-
.../providers/google/cloud/sensors/dataflow.py | 2 +-
.../providers/google/cloud/sensors/dataform.py | 2 +-
.../providers/google/cloud/sensors/datafusion.py | 2 +-
.../providers/google/cloud/sensors/dataplex.py | 2 +-
.../providers/google/cloud/sensors/dataprep.py | 2 +-
.../providers/google/cloud/sensors/dataproc.py | 2 +-
.../google/cloud/sensors/dataproc_metastore.py | 2 +-
.../airflow/providers/google/cloud/sensors/gcs.py | 2 +-
.../providers/google/cloud/sensors/looker.py | 2 +-
.../providers/google/cloud/sensors/pubsub.py | 2 +-
.../providers/google/cloud/sensors/tasks.py | 2 +-
.../cloud/sensors/vertex_ai/feature_store.py | 2 +-
.../providers/google/cloud/sensors/workflows.py | 2 +-
.../triggers/cloud_storage_transfer_service.py | 90 +
.../providers/google/cloud/triggers/pubsub.py | 32 +-
.../providers/google/common/hooks/base_google.py | 2 +-
.../airflow/providers/google/get_provider_info.py | 14 +
.../providers/google/leveldb/hooks/leveldb.py | 2 +-
.../marketing_platform/links/analytics_admin.py | 2 +-
.../marketing_platform/sensors/campaign_manager.py | 2 +-
.../marketing_platform/sensors/display_video.py | 2 +-
.../providers/google/suite/sensors/drive.py | 2 +-
.../tests/system/google/cloud/gen_ai}/__init__.py | 0
.../example_gen_ai_generative_model.py} | 138 +-
.../example_gen_ai_generative_model_tuning.py} | 38 +-
.../google/cloud/gen_ai/resources}/__init__.py | 0
.../resources/video_tuning_dataset.jsonl | 0
.../test_cloud_storage_transfer_service_async.py | 18 +
.../tests/unit/google/cloud/hooks/test_gen_ai.py | 193 +
.../cloud/hooks/vertex_ai/test_generative_model.py | 92 +-
.../google/cloud/operators/gen_ai}/__init__.py | 0
.../unit/google/cloud/operators/test_gen_ai.py | 250 ++
.../operators/vertex_ai/test_generative_model.py | 134 +-
.../test_cloud_storage_transfer_service.py | 93 +
.../unit/google/cloud/triggers/test_pubsub.py | 42 +
.../imap/src/airflow/providers/imap/hooks/imap.py | 9 +-
.../neo4j/tests/unit/neo4j/operators/test_neo4j.py | 2 +-
.../providers/opensearch/log/os_task_handler.py | 14 +-
.../src/airflow/providers/sftp/operators/sftp.py | 19 +-
.../ssh/src/airflow/providers/ssh/operators/ssh.py | 14 +-
providers/ssh/tests/unit/ssh/operators/test_ssh.py | 10 +
providers/standard/pyproject.toml | 2 +
.../airflow/providers/standard/decorators/bash.py | 20 +-
.../standard/decorators/branch_external_python.py | 10 +-
.../providers/standard/decorators/branch_python.py | 9 +-
.../standard/decorators/branch_virtualenv.py | 9 +-
.../standard/decorators/external_python.py | 9 +-
.../providers/standard/decorators/python.py | 9 +-
.../standard/decorators/python_virtualenv.py | 11 +-
.../providers/standard/decorators/sensor.py | 11 +-
.../providers/standard/decorators/short_circuit.py | 10 +-
.../airflow/providers/standard/decorators/stub.py | 18 +-
.../example_dags/example_bash_decorator.py | 7 +-
.../example_dags/example_branch_operator.py | 7 +-
.../example_branch_operator_decorator.py | 7 +-
.../example_external_task_parent_deferrable.py | 8 +-
.../standard/example_dags/example_hitl_operator.py | 2 +-
.../standard/example_dags/example_sensors.py | 7 +-
.../example_short_circuit_decorator.py | 7 +-
.../example_dags/example_short_circuit_operator.py | 7 +-
.../airflow/providers/standard/hooks/filesystem.py | 2 +-
.../providers/standard/hooks/package_index.py | 2 +-
.../airflow/providers/standard/hooks/subprocess.py | 2 +-
.../airflow/providers/standard/operators/bash.py | 15 +-
.../airflow/providers/standard/operators/branch.py | 2 +-
.../providers/standard/operators/datetime.py | 8 +-
.../airflow/providers/standard/operators/empty.py | 2 +-
.../airflow/providers/standard/operators/hitl.py | 2 +-
.../providers/standard/operators/latest_only.py | 7 +-
.../airflow/providers/standard/operators/python.py | 9 +-
.../airflow/providers/standard/operators/smooth.py | 2 +-
.../providers/standard/operators/trigger_dagrun.py | 20 +-
.../providers/standard/operators/weekday.py | 8 +-
.../src/airflow/providers/standard/sensors/bash.py | 8 +-
.../providers/standard/sensors/date_time.py | 8 +-
.../providers/standard/sensors/external_task.py | 9 +-
.../providers/standard/sensors/filesystem.py | 2 +-
.../airflow/providers/standard/sensors/python.py | 8 +-
.../src/airflow/providers/standard/sensors/time.py | 7 +-
.../providers/standard/sensors/time_delta.py | 10 +-
.../airflow/providers/standard/sensors/weekday.py | 9 +-
.../providers/standard/triggers/temporal.py | 6 +-
.../airflow/providers/standard/utils/skipmixin.py | 8 +-
.../airflow/providers/standard/version_compat.py | 24 +-
.../ci/prek/check_common_compat_lazy_imports.py | 491 +--
scripts/cov/core_coverage.py | 1 +
scripts/in_container/bin/run_tmux | 4 +
shared/README.md | 2 +-
task-sdk/src/airflow/sdk/definitions/dag.py | 7 +
task-sdk/tests/task_sdk/definitions/test_dag.py | 15 +
249 files changed, 8661 insertions(+), 4890 deletions(-)
create mode 100644
airflow-core/src/airflow/migrations/versions/0091_3_2_0_restructure_callback_table.py
create mode 100644 airflow-core/src/airflow/models/callback.py
create mode 100644
airflow-core/src/airflow/ui/public/i18n/locales/th/admin.json
create mode 100644
airflow-core/src/airflow/ui/public/i18n/locales/th/assets.json
create mode 100644
airflow-core/src/airflow/ui/public/i18n/locales/th/browse.json
create mode 100644
airflow-core/src/airflow/ui/public/i18n/locales/th/common.json
create mode 100644
airflow-core/src/airflow/ui/public/i18n/locales/th/components.json
create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/th/dag.json
create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/th/dags.json
create mode 100644
airflow-core/src/airflow/ui/public/i18n/locales/th/dashboard.json
create mode 100644 airflow-core/src/airflow/ui/public/i18n/locales/th/hitl.json
create mode 100644
airflow-core/src/airflow/ui/public/i18n/locales/th/tasks.json
create mode 100644 airflow-core/tests/unit/models/test_callback.py
create mode 100644
providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/container.py
create mode 100644
providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_container.py
create mode 100644
providers/common/compat/src/airflow/providers/common/compat/_compat_utils.py
delete mode 100644
providers/common/compat/src/airflow/providers/common/compat/lazy_compat.py
delete mode 100644
providers/common/compat/src/airflow/providers/common/compat/lazy_compat.pyi
create mode 100644
providers/common/compat/src/airflow/providers/common/compat/sdk.py
copy {airflow-core/src/airflow/_shared =>
providers/common/compat/src/airflow/providers/common/compat/sqlalchemy}/__init__.py
(100%)
copy dev/breeze/src/airflow_breeze/utils/click_utils.py =>
providers/common/compat/src/airflow/providers/common/compat/sqlalchemy/orm.py
(80%)
copy {airflow-core/src/airflow/_shared =>
providers/common/compat/tests/unit/common/compat/sqlalchemy}/__init__.py (100%)
create mode 100644
providers/common/compat/tests/unit/common/compat/sqlalchemy/test_orm.py
create mode 100644
providers/common/compat/tests/unit/common/compat/test__compat_utils.py
rename providers/common/compat/tests/unit/common/compat/{test_lazy_compat.py
=> test_sdk.py} (87%)
create mode 100644 providers/google/docs/operators/cloud/gen_ai.rst
create mode 100644
providers/google/src/airflow/providers/google/cloud/hooks/gen_ai.py
create mode 100644
providers/google/src/airflow/providers/google/cloud/operators/gen_ai.py
copy {airflow-core/src/airflow/_shared =>
providers/google/tests/system/google/cloud/gen_ai}/__init__.py (100%)
rename
providers/google/tests/system/google/cloud/{vertex_ai/example_vertex_ai_generative_model.py
=> gen_ai/example_gen_ai_generative_model.py} (80%)
rename
providers/google/tests/system/google/cloud/{vertex_ai/example_vertex_ai_generative_model_tuning.py
=> gen_ai/example_gen_ai_generative_model_tuning.py} (82%)
copy {airflow-core/src/airflow/_shared =>
providers/google/tests/system/google/cloud/gen_ai/resources}/__init__.py (100%)
copy providers/google/tests/system/google/cloud/{vertex_ai =>
gen_ai}/resources/video_tuning_dataset.jsonl (100%)
create mode 100644
providers/google/tests/unit/google/cloud/hooks/test_gen_ai.py
copy {airflow-core/src/airflow/_shared =>
providers/google/tests/unit/google/cloud/operators/gen_ai}/__init__.py (100%)
create mode 100644
providers/google/tests/unit/google/cloud/operators/test_gen_ai.py