You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2021/12/18 19:11:37 UTC

[airflow] branch main updated: Fix remaining MyPy errors in Google Provider (#20358)

This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new ed604b6  Fix remaining MyPy errors in Google Provider (#20358)
ed604b6 is described below

commit ed604b62f3dfb4d76d6f1eaf4d639dc65956d8f2
Author: Jarek Potiuk <ja...@potiuk.com>
AuthorDate: Sat Dec 18 20:11:09 2021 +0100

    Fix remaining MyPy errors in Google Provider (#20358)
---
 airflow/providers/google/__init__.py               |   2 +-
 airflow/providers/google/cloud/hooks/automl.py     |  72 ++++++++--------
 .../providers/google/cloud/hooks/bigquery_dts.py   |  22 ++---
 .../providers/google/cloud/hooks/cloud_build.py    |  22 ++---
 .../google/cloud/hooks/cloud_memorystore.py        |  80 +++++++++---------
 airflow/providers/google/cloud/hooks/compute.py    |   8 +-
 .../providers/google/cloud/hooks/datacatalog.py    |  92 ++++++++++-----------
 airflow/providers/google/cloud/hooks/datafusion.py |   6 +-
 airflow/providers/google/cloud/hooks/dlp.py        |  70 ++++++++--------
 airflow/providers/google/cloud/hooks/functions.py  |   4 +-
 airflow/providers/google/cloud/hooks/gcs.py        |  27 ++++--
 airflow/providers/google/cloud/hooks/kms.py        |   8 +-
 .../google/cloud/hooks/kubernetes_engine.py        |  24 ++++--
 .../google/cloud/hooks/natural_language.py         |  12 +--
 airflow/providers/google/cloud/hooks/os_login.py   |  17 ++--
 airflow/providers/google/cloud/hooks/pubsub.py     |  36 ++++----
 .../providers/google/cloud/hooks/stackdriver.py    |  66 +++++++--------
 airflow/providers/google/cloud/hooks/tasks.py      |  74 ++++++++---------
 .../google/cloud/hooks/video_intelligence.py       |   2 +-
 airflow/providers/google/cloud/hooks/vision.py     |  42 +++++-----
 airflow/providers/google/cloud/hooks/workflows.py  |  36 ++++----
 airflow/providers/google/cloud/operators/automl.py |  26 +++---
 .../google/cloud/operators/bigquery_dts.py         |   6 +-
 .../google/cloud/operators/cloud_build.py          |  22 ++---
 .../google/cloud/operators/cloud_memorystore.py    |  36 ++++----
 .../google/cloud/operators/datacatalog.py          |  42 +++++-----
 airflow/providers/google/cloud/operators/dlp.py    |  60 +++++++-------
 .../google/cloud/operators/natural_language.py     |   8 +-
 airflow/providers/google/cloud/operators/pubsub.py |   8 +-
 airflow/providers/google/cloud/operators/tasks.py  |  26 +++---
 airflow/providers/google/cloud/operators/vision.py |  24 +++---
 .../providers/google/cloud/operators/workflows.py  |  18 ++--
 .../providers/google/cloud/sensors/bigquery_dts.py |   2 +-
 .../providers/google/cloud/sensors/workflows.py    |   2 +-
 .../providers/google/common/hooks/base_google.py   |   6 ++
 setup.cfg                                          |  26 ++++++
 tests/providers/google/cloud/hooks/test_dlp.py     |  92 ++++++++++-----------
 .../google/cloud/hooks/test_natural_language.py    |  12 +--
 .../google/cloud/hooks/test_video_intelligence.py  |   4 +-
 tests/providers/google/cloud/hooks/test_vision.py  |  56 ++++++-------
 .../google/cloud/operators/source}/__init__.py     |  22 -----
 .../operators/source/source_prefix}/__init__.py    |  22 -----
 .../google/cloud/operators/test_automl.py          |  26 +++---
 .../google/cloud/operators/test_bigquery_dts.py    |   6 +-
 .../google/cloud/operators/test_cloud_build.py     |  24 +++---
 tests/providers/google/cloud/operators/test_dlp.py |  60 +++++++-------
 .../google/cloud/operators/test_pubsub.py          |  14 ++--
 .../providers/google/cloud/operators/test_tasks.py |  26 +++---
 .../google/cloud/operators/test_vision.py          |  26 +++---
 .../google/cloud/sensors/test_bigquery_dts.py      |   4 +-
 tests/providers/google/cloud/transfers/temp-file   | Bin 0 -> 3739 bytes
 51 files changed, 723 insertions(+), 705 deletions(-)

diff --git a/airflow/providers/google/__init__.py b/airflow/providers/google/__init__.py
index dc2ff2a..de7c3ee 100644
--- a/airflow/providers/google/__init__.py
+++ b/airflow/providers/google/__init__.py
@@ -19,7 +19,7 @@ import logging
 
 # HACK:
 # Sphinx-autoapi doesn't like imports to excluded packages in the main module.
-conf = importlib.import_module('airflow.configuration').conf
+conf = importlib.import_module('airflow.configuration').conf  # type: ignore[attr-defined]
 
 PROVIDERS_GOOGLE_VERBOSE_LOGGING: bool = conf.getboolean(
     'providers_google', 'VERBOSE_LOGGING', fallback=False
diff --git a/airflow/providers/google/cloud/hooks/automl.py b/airflow/providers/google/cloud/hooks/automl.py
index 73f5c71..3e2bb21 100644
--- a/airflow/providers/google/cloud/hooks/automl.py
+++ b/airflow/providers/google/cloud/hooks/automl.py
@@ -47,7 +47,7 @@ from google.cloud.automl_v1beta1 import (
 )
 from google.protobuf.field_mask_pb2 import FieldMask
 
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 
 class CloudAutoMLHook(GoogleBaseHook):
@@ -102,9 +102,9 @@ class CloudAutoMLHook(GoogleBaseHook):
         self,
         model: Union[dict, Model],
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         retry: Optional[Retry] = None,
     ) -> Operation:
         """
@@ -138,7 +138,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'parent': parent, 'model': model},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -148,11 +148,11 @@ class CloudAutoMLHook(GoogleBaseHook):
         input_config: Union[dict, BatchPredictInputConfig],
         output_config: Union[dict, BatchPredictOutputConfig],
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         params: Optional[Dict[str, str]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Operation:
         """
         Perform a batch prediction. Unlike the online `Predict`, batch
@@ -199,7 +199,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -209,11 +209,11 @@ class CloudAutoMLHook(GoogleBaseHook):
         model_id: str,
         payload: Union[dict, ExamplePayload],
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         params: Optional[Dict[str, str]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> PredictResponse:
         """
         Perform an online prediction. The prediction result will be directly
@@ -249,7 +249,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'name': name, 'payload': payload, 'params': params},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -258,10 +258,10 @@ class CloudAutoMLHook(GoogleBaseHook):
         self,
         dataset: Union[dict, Dataset],
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Dataset:
         """
         Creates a dataset.
@@ -291,7 +291,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'parent': parent, 'dataset': dataset},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -301,10 +301,10 @@ class CloudAutoMLHook(GoogleBaseHook):
         dataset_id: str,
         location: str,
         input_config: Union[dict, InputConfig],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Operation:
         """
         Imports data into a dataset. For Tables this method can only be called on an empty Dataset.
@@ -336,7 +336,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'name': name, 'input_config': input_config},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -346,13 +346,13 @@ class CloudAutoMLHook(GoogleBaseHook):
         dataset_id: str,
         table_spec_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         field_mask: Optional[Union[dict, FieldMask]] = None,
         filter_: Optional[str] = None,
         page_size: Optional[int] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> ListColumnSpecsPager:
         """
         Lists column specs in a table spec.
@@ -399,7 +399,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'parent': parent, 'field_mask': field_mask, 'filter': filter_, 'page_size': page_size},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -408,10 +408,10 @@ class CloudAutoMLHook(GoogleBaseHook):
         self,
         model_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Model:
         """
         Gets a AutoML model.
@@ -440,7 +440,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'name': name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -449,10 +449,10 @@ class CloudAutoMLHook(GoogleBaseHook):
         self,
         model_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Model:
         """
         Deletes a AutoML model.
@@ -481,7 +481,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'name': name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -491,7 +491,7 @@ class CloudAutoMLHook(GoogleBaseHook):
         update_mask: Optional[Union[dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Dataset:
         """
         Updates a dataset.
@@ -518,7 +518,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'dataset': dataset, 'update_mask': update_mask},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -527,11 +527,11 @@ class CloudAutoMLHook(GoogleBaseHook):
         self,
         model_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         image_detection_metadata: Optional[Union[ImageObjectDetectionModelDeploymentMetadata, dict]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Operation:
         """
         Deploys a model. If a model is already deployed, deploying it with the same parameters
@@ -572,7 +572,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -585,7 +585,7 @@ class CloudAutoMLHook(GoogleBaseHook):
         page_size: Optional[int] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> ListTableSpecsPager:
         """
         Lists table specs in a dataset_id.
@@ -625,7 +625,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'parent': parent, 'filter': filter_, 'page_size': page_size},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -636,7 +636,7 @@ class CloudAutoMLHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> ListDatasetsPager:
         """
         Lists datasets in a project.
@@ -666,7 +666,7 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'parent': parent},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
 
@@ -678,7 +678,7 @@ class CloudAutoMLHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Operation:
         """
         Deletes a dataset and all of its contents.
@@ -707,6 +707,6 @@ class CloudAutoMLHook(GoogleBaseHook):
             request={'name': name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return result
diff --git a/airflow/providers/google/cloud/hooks/bigquery_dts.py b/airflow/providers/google/cloud/hooks/bigquery_dts.py
index ea856c0..a8ff0ff 100644
--- a/airflow/providers/google/cloud/hooks/bigquery_dts.py
+++ b/airflow/providers/google/cloud/hooks/bigquery_dts.py
@@ -29,7 +29,7 @@ from google.cloud.bigquery_datatransfer_v1.types import (
 )
 from googleapiclient.discovery import Resource
 
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 
 def get_object_id(obj: dict) -> str:
@@ -104,11 +104,11 @@ class BiqQueryDataTransferServiceHook(GoogleBaseHook):
     def create_transfer_config(
         self,
         transfer_config: Union[dict, TransferConfig],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         authorization_code: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> TransferConfig:
         """
         Creates a new data transfer configuration.
@@ -146,17 +146,17 @@ class BiqQueryDataTransferServiceHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
     def delete_transfer_config(
         self,
         transfer_config_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes transfer configuration.
@@ -192,12 +192,12 @@ class BiqQueryDataTransferServiceHook(GoogleBaseHook):
     def start_manual_transfer_runs(
         self,
         transfer_config_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         requested_time_range: Optional[dict] = None,
         requested_run_time: Optional[dict] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> StartManualTransferRunsResponse:
         """
         Start manual transfer runs to be executed now with schedule_time equal
@@ -245,7 +245,7 @@ class BiqQueryDataTransferServiceHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -253,10 +253,10 @@ class BiqQueryDataTransferServiceHook(GoogleBaseHook):
         self,
         run_id: str,
         transfer_config_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> TransferRun:
         """
         Returns information about the particular transfer run.
diff --git a/airflow/providers/google/cloud/hooks/cloud_build.py b/airflow/providers/google/cloud/hooks/cloud_build.py
index 91af8f6..0e9dde7 100644
--- a/airflow/providers/google/cloud/hooks/cloud_build.py
+++ b/airflow/providers/google/cloud/hooks/cloud_build.py
@@ -26,7 +26,7 @@ from google.cloud.devtools.cloudbuild import CloudBuildClient
 from google.cloud.devtools.cloudbuild_v1.types import Build, BuildTrigger, RepoSource
 
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 # Time to sleep between active checks of the operation results
 TIME_TO_SLEEP_IN_SECONDS = 5
@@ -95,7 +95,7 @@ class CloudBuildHook(GoogleBaseHook):
     def cancel_build(
         self,
         id_: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
         metadata: Optional[Sequence[Tuple[str, str]]] = None,
@@ -135,7 +135,7 @@ class CloudBuildHook(GoogleBaseHook):
     def create_build(
         self,
         build: Union[Dict, Build],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         wait: bool = True,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
@@ -189,7 +189,7 @@ class CloudBuildHook(GoogleBaseHook):
     def create_build_trigger(
         self,
         trigger: Union[dict, BuildTrigger],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
         metadata: Optional[Sequence[Tuple[str, str]]] = None,
@@ -233,7 +233,7 @@ class CloudBuildHook(GoogleBaseHook):
     def delete_build_trigger(
         self,
         trigger_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
         metadata: Optional[Sequence[Tuple[str, str]]] = None,
@@ -272,7 +272,7 @@ class CloudBuildHook(GoogleBaseHook):
     def get_build(
         self,
         id_: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
         metadata: Optional[Sequence[Tuple[str, str]]] = None,
@@ -312,7 +312,7 @@ class CloudBuildHook(GoogleBaseHook):
     def get_build_trigger(
         self,
         trigger_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
         metadata: Optional[Sequence[Tuple[str, str]]] = None,
@@ -354,8 +354,8 @@ class CloudBuildHook(GoogleBaseHook):
     @GoogleBaseHook.fallback_to_default_project_id
     def list_build_triggers(
         self,
-        project_id: str,
         location: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         page_size: Optional[int] = None,
         page_token: Optional[str] = None,
         retry: Optional[Retry] = None,
@@ -410,8 +410,8 @@ class CloudBuildHook(GoogleBaseHook):
     @GoogleBaseHook.fallback_to_default_project_id
     def list_builds(
         self,
-        project_id: str,
         location: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         page_size: Optional[int] = None,
         page_token: Optional[int] = None,
         filter_: Optional[str] = None,
@@ -471,7 +471,7 @@ class CloudBuildHook(GoogleBaseHook):
     def retry_build(
         self,
         id_: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         wait: bool = True,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
@@ -523,7 +523,7 @@ class CloudBuildHook(GoogleBaseHook):
         self,
         trigger_id: str,
         source: Union[dict, RepoSource],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         wait: bool = True,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
diff --git a/airflow/providers/google/cloud/hooks/cloud_memorystore.py b/airflow/providers/google/cloud/hooks/cloud_memorystore.py
index dc162b9..f86d851 100644
--- a/airflow/providers/google/cloud/hooks/cloud_memorystore.py
+++ b/airflow/providers/google/cloud/hooks/cloud_memorystore.py
@@ -34,7 +34,7 @@ from google.protobuf.field_mask_pb2 import FieldMask
 
 from airflow import version
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 
 class CloudMemorystoreHook(GoogleBaseHook):
@@ -107,10 +107,10 @@ class CloudMemorystoreHook(GoogleBaseHook):
         location: str,
         instance_id: str,
         instance: Union[Dict, Instance],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Creates a Redis instance based on the specified tier and memory size.
@@ -170,7 +170,7 @@ class CloudMemorystoreHook(GoogleBaseHook):
             request={'parent': parent, 'instance_id': instance_id, 'instance': instance},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Instance created.")
@@ -183,10 +183,10 @@ class CloudMemorystoreHook(GoogleBaseHook):
         self,
         location: str,
         instance: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Deletes a specific Redis instance.  Instance stops serving and data is deleted.
@@ -214,7 +214,7 @@ class CloudMemorystoreHook(GoogleBaseHook):
             request={'name': name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         if not instance:
@@ -225,7 +225,7 @@ class CloudMemorystoreHook(GoogleBaseHook):
             request={'name': name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Instance deleted: %s", name)
@@ -236,10 +236,10 @@ class CloudMemorystoreHook(GoogleBaseHook):
         location: str,
         instance: str,
         output_config: Union[Dict, OutputConfig],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Export Redis instance data into a Redis RDB format file in Cloud Storage.
@@ -274,7 +274,7 @@ class CloudMemorystoreHook(GoogleBaseHook):
             request={'name': name, 'output_config': output_config},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Instance exported: %s", name)
@@ -285,10 +285,10 @@ class CloudMemorystoreHook(GoogleBaseHook):
         location: str,
         instance: str,
         data_protection_mode: FailoverInstanceRequest.DataProtectionMode,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Initiates a failover of the primary node to current replica node for a specific STANDARD tier Cloud
@@ -322,7 +322,7 @@ class CloudMemorystoreHook(GoogleBaseHook):
             request={'name': name, 'data_protection_mode': data_protection_mode},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Instance failovered: %s", name)
@@ -332,10 +332,10 @@ class CloudMemorystoreHook(GoogleBaseHook):
         self,
         location: str,
         instance: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Gets the details of a specific Redis instance.
@@ -362,7 +362,7 @@ class CloudMemorystoreHook(GoogleBaseHook):
             request={'name': name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         self.log.info("Fetched Instance: %s", name)
         return result
@@ -373,10 +373,10 @@ class CloudMemorystoreHook(GoogleBaseHook):
         location: str,
         instance: str,
         input_config: Union[Dict, InputConfig],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Import a Redis RDB snapshot file from Cloud Storage into a Redis instance.
@@ -412,7 +412,7 @@ class CloudMemorystoreHook(GoogleBaseHook):
             request={'name': name, 'input_config': input_config},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Instance imported: %s", name)
@@ -422,10 +422,10 @@ class CloudMemorystoreHook(GoogleBaseHook):
         self,
         location: str,
         page_size: int,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Lists all Redis instances owned by a project in either the specified location (region) or all
@@ -458,7 +458,7 @@ class CloudMemorystoreHook(GoogleBaseHook):
             request={'parent': parent, 'page_size': page_size},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         self.log.info("Fetched instances")
         return result
@@ -468,12 +468,12 @@ class CloudMemorystoreHook(GoogleBaseHook):
         self,
         update_mask: Union[Dict, FieldMask],
         instance: Union[Dict, Instance],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         location: Optional[str] = None,
         instance_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Updates the metadata and configuration of a specific Redis instance.
@@ -526,7 +526,7 @@ class CloudMemorystoreHook(GoogleBaseHook):
             request={'update_mask': update_mask, 'instance': instance},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Instance updated: %s", instance.name)
@@ -608,7 +608,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
         instance_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Will update current set of Parameters to the set of specified nodes of the Memcached Instance.
@@ -646,7 +646,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
             apply_all=apply_all,
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Instance updated: %s", instance_id)
@@ -660,7 +660,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Creates a Memcached instance based on the specified tier and memory size.
@@ -724,7 +724,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
             resource=instance,
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Instance created.")
@@ -732,7 +732,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
             name=instance_name,
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -743,7 +743,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Deletes a specific Memcached instance.  Instance stops serving and data is deleted.
@@ -772,7 +772,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
             name=name,
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         if not instance:
@@ -783,7 +783,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
             name=name,
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Instance deleted: %s", name)
@@ -796,7 +796,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Gets the details of a specific Memcached instance.
@@ -831,7 +831,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Lists all Memcached instances owned by a project in either the specified location (region) or all
@@ -863,7 +863,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
             parent=parent,
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         self.log.info("Fetched instances")
         return result
@@ -878,7 +878,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
         instance_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Updates the metadata and configuration of a specific Memcached instance.
@@ -942,7 +942,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
         instance_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Updates the defined Memcached Parameters for an existing Instance. This method only stages the
@@ -990,7 +990,7 @@ class CloudMemorystoreMemcachedHook(GoogleBaseHook):
             parameters=parameters,
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         result.result()
         self.log.info("Update staged for instance: %s", instance_id)
diff --git a/airflow/providers/google/cloud/hooks/compute.py b/airflow/providers/google/cloud/hooks/compute.py
index dd5d761..ef380ff 100644
--- a/airflow/providers/google/cloud/hooks/compute.py
+++ b/airflow/providers/google/cloud/hooks/compute.py
@@ -23,7 +23,7 @@ from typing import Any, Dict, Optional, Sequence, Union
 from googleapiclient.discovery import build
 
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 # Time to sleep between active checks of the operation results
 TIME_TO_SLEEP_IN_SECONDS = 1
@@ -192,7 +192,7 @@ class ComputeEngineHook(GoogleBaseHook):
     def insert_instance_template(
         self,
         body: dict,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         request_id: Optional[str] = None,
     ) -> None:
         """
@@ -230,7 +230,7 @@ class ComputeEngineHook(GoogleBaseHook):
         self,
         zone: str,
         resource_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
     ) -> dict:
         """
         Retrieves Instance Group Manager by project_id, zone and resource_id.
@@ -386,7 +386,7 @@ class ComputeEngineHook(GoogleBaseHook):
 
     @GoogleBaseHook.fallback_to_default_project_id
     def get_instance_address(
-        self, zone: str, resource_id: str, project_id: str, use_internal_ip: bool = False
+        self, zone: str, resource_id: str, project_id: str = PROVIDE_PROJECT_ID, use_internal_ip: bool = False
     ) -> str:
         """
         Return network address associated to instance.
diff --git a/airflow/providers/google/cloud/hooks/datacatalog.py b/airflow/providers/google/cloud/hooks/datacatalog.py
index ebf7c7a..8ab601b 100644
--- a/airflow/providers/google/cloud/hooks/datacatalog.py
+++ b/airflow/providers/google/cloud/hooks/datacatalog.py
@@ -32,7 +32,7 @@ from google.cloud.datacatalog import (
 from google.protobuf.field_mask_pb2 import FieldMask
 
 from airflow import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 
 class CloudDataCatalogHook(GoogleBaseHook):
@@ -84,10 +84,10 @@ class CloudDataCatalogHook(GoogleBaseHook):
         entry_group: str,
         entry_id: str,
         entry: Union[dict, Entry],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Entry:
         """
         Creates an entry.
@@ -123,7 +123,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request={'parent': parent, 'entry_id': entry_id, 'entry': entry},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         self.log.info('Created a entry: name=%s', result.name)
         return result
@@ -134,10 +134,10 @@ class CloudDataCatalogHook(GoogleBaseHook):
         location: str,
         entry_group_id: str,
         entry_group: Union[Dict, EntryGroup],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> EntryGroup:
         """
         Creates an EntryGroup.
@@ -173,7 +173,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request={'parent': parent, 'entry_group_id': entry_group_id, 'entry_group': entry_group},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         self.log.info('Created a entry group: name=%s', result.name)
 
@@ -186,11 +186,11 @@ class CloudDataCatalogHook(GoogleBaseHook):
         entry_group: str,
         entry: str,
         tag: Union[dict, Tag],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         template_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Tag:
         """
         Creates a tag on an entry.
@@ -259,10 +259,10 @@ class CloudDataCatalogHook(GoogleBaseHook):
         location,
         tag_template_id: str,
         tag_template: Union[dict, TagTemplate],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> TagTemplate:
         """
         Creates a tag template.
@@ -312,7 +312,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request=request,
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         self.log.info('Created a tag template: name=%s', result.name)
 
@@ -325,10 +325,10 @@ class CloudDataCatalogHook(GoogleBaseHook):
         tag_template: str,
         tag_template_field_id: str,
         tag_template_field: Union[dict, TagTemplateField],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> TagTemplateField:
         r"""
         Creates a field in a tag template.
@@ -372,7 +372,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         self.log.info('Created a tag template field: name=%s', result.name)
@@ -385,10 +385,10 @@ class CloudDataCatalogHook(GoogleBaseHook):
         location: str,
         entry_group: str,
         entry: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes an existing entry.
@@ -422,10 +422,10 @@ class CloudDataCatalogHook(GoogleBaseHook):
         self,
         location,
         entry_group,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes an EntryGroup.
@@ -464,10 +464,10 @@ class CloudDataCatalogHook(GoogleBaseHook):
         entry_group: str,
         entry: str,
         tag: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a tag.
@@ -510,7 +510,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a tag template and all tags using the template.
@@ -554,7 +554,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a field in a tag template and all uses of that field.
@@ -597,7 +597,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Entry:
         """
         Gets an entry.
@@ -637,10 +637,10 @@ class CloudDataCatalogHook(GoogleBaseHook):
         location: str,
         entry_group: str,
         project_id: str,
-        read_mask: Union[Dict, FieldMask] = None,
+        read_mask: Optional[FieldMask] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> EntryGroup:
         """
         Gets an entry group.
@@ -675,7 +675,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request={'name': name, 'read_mask': read_mask},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         self.log.info('Received a entry group: name=%s', result.name)
@@ -690,7 +690,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> TagTemplate:
         """
         Gets a tag template.
@@ -734,7 +734,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         page_size: int = 100,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Lists the tags on an Entry.
@@ -770,7 +770,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request={'parent': parent, 'page_size': page_size},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         self.log.info('Received tags.')
@@ -787,7 +787,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Tag:
         """
         Gets for a tag with a specific template for a specific entry.
@@ -830,7 +830,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         sql_resource: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Entry:
         r"""
         Get an entry by target resource name.
@@ -867,7 +867,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
                 request={'linked_resource': linked_resource},
                 retry=retry,
                 timeout=timeout,
-                metadata=metadata or (),
+                metadata=metadata,
             )
         else:
             self.log.info('Getting entry: sql_resource=%s', sql_resource)
@@ -875,7 +875,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
                 request={'sql_resource': sql_resource},
                 retry=retry,
                 timeout=timeout,
-                metadata=metadata or (),
+                metadata=metadata,
             )
         self.log.info('Received entry. name=%s', result.name)
 
@@ -891,7 +891,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> TagTemplateField:
         """
         Renames a field in a tag template.
@@ -929,7 +929,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request={'name': name, 'new_tag_template_field_id': new_tag_template_field_id},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         self.log.info('Renamed tag template field.')
@@ -944,7 +944,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         r"""
         Searches Data Catalog for multiple resources like entries, tags that match a query.
@@ -1007,7 +1007,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request={'scope': scope, 'query': query, 'page_size': page_size, 'order_by': order_by},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         self.log.info('Received items.')
@@ -1025,7 +1025,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         entry_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Entry:
         """
         Updates an existing entry.
@@ -1085,7 +1085,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request={'entry': entry, 'update_mask': update_mask},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         self.log.info('Updated entry.')
@@ -1104,7 +1104,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         tag_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Tag:
         """
         Updates an existing tag.
@@ -1168,7 +1168,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request={'tag': tag, 'update_mask': update_mask},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         self.log.info('Updated tag.')
 
@@ -1184,7 +1184,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         tag_template_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> TagTemplate:
         """
         Updates a tag template.
@@ -1248,7 +1248,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             request={'tag_template': tag_template, 'update_mask': update_mask},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         self.log.info('Updated tag template.')
 
@@ -1266,7 +1266,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
         tag_template_field_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         Updates a field in a tag template. This method cannot be used to update the field type.
@@ -1326,7 +1326,7 @@ class CloudDataCatalogHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         self.log.info('Updated tag template field.')
 
diff --git a/airflow/providers/google/cloud/hooks/datafusion.py b/airflow/providers/google/cloud/hooks/datafusion.py
index 3f2828a..6f485c5 100644
--- a/airflow/providers/google/cloud/hooks/datafusion.py
+++ b/airflow/providers/google/cloud/hooks/datafusion.py
@@ -27,7 +27,7 @@ from google.api_core.retry import exponential_sleep_generator
 from googleapiclient.discovery import Resource, build
 
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 Operation = Dict[str, Any]
 
@@ -214,7 +214,7 @@ class DataFusionHook(GoogleBaseHook):
         instance_name: str,
         instance: Dict[str, Any],
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
     ) -> Operation:
         """
         Creates a new Data Fusion instance in the specified project and location.
@@ -272,7 +272,7 @@ class DataFusionHook(GoogleBaseHook):
         instance: Dict[str, Any],
         update_mask: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
     ) -> Operation:
         """
         Updates a single Data Fusion instance.
diff --git a/airflow/providers/google/cloud/hooks/dlp.py b/airflow/providers/google/cloud/hooks/dlp.py
index 2b43006..bd57249 100644
--- a/airflow/providers/google/cloud/hooks/dlp.py
+++ b/airflow/providers/google/cloud/hooks/dlp.py
@@ -50,7 +50,7 @@ from google.cloud.dlp_v2.types import (
 )
 
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 DLP_JOB_PATH_PATTERN = "^projects/[^/]+/dlpJobs/(?P<job>.*?)$"
 
@@ -109,10 +109,10 @@ class CloudDLPHook(GoogleBaseHook):
     def cancel_dlp_job(
         self,
         dlp_job_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Starts asynchronous cancellation on a long-running DLP job.
@@ -149,7 +149,7 @@ class CloudDLPHook(GoogleBaseHook):
         template_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> DeidentifyTemplate:
         """
         Creates a deidentify template for re-using frequently used configuration for
@@ -200,13 +200,13 @@ class CloudDLPHook(GoogleBaseHook):
     @GoogleBaseHook.fallback_to_default_project_id
     def create_dlp_job(
         self,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         inspect_job: Optional[Union[dict, InspectJobConfig]] = None,
         risk_job: Optional[Union[dict, RiskAnalysisJobConfig]] = None,
         job_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         wait_until_finished: bool = True,
         time_to_sleep_in_seconds: int = 60,
     ) -> DlpJob:
@@ -289,7 +289,7 @@ class CloudDLPHook(GoogleBaseHook):
         template_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> InspectTemplate:
         """
         Creates an inspect template for re-using frequently used configuration for
@@ -341,12 +341,12 @@ class CloudDLPHook(GoogleBaseHook):
     @GoogleBaseHook.fallback_to_default_project_id
     def create_job_trigger(
         self,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         job_trigger: Optional[Union[dict, JobTrigger]] = None,
         trigger_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> JobTrigger:
         """
         Creates a job trigger to run DLP actions such as scanning storage for sensitive
@@ -391,7 +391,7 @@ class CloudDLPHook(GoogleBaseHook):
         stored_info_type_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> StoredInfoType:
         """
         Creates a pre-built stored info type to be used for inspection.
@@ -442,7 +442,7 @@ class CloudDLPHook(GoogleBaseHook):
     @GoogleBaseHook.fallback_to_default_project_id
     def deidentify_content(
         self,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         deidentify_config: Optional[Union[dict, DeidentifyConfig]] = None,
         inspect_config: Optional[Union[dict, InspectConfig]] = None,
         item: Optional[Union[dict, ContentItem]] = None,
@@ -450,7 +450,7 @@ class CloudDLPHook(GoogleBaseHook):
         deidentify_template_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> DeidentifyContentResponse:
         """
         De-identifies potentially sensitive info from a content item. This method has limits
@@ -503,7 +503,7 @@ class CloudDLPHook(GoogleBaseHook):
         )
 
     def delete_deidentify_template(
-        self, template_id, organization_id=None, project_id=None, retry=None, timeout=None, metadata=None
+        self, template_id, organization_id=None, project_id=None, retry=None, timeout=None, metadata=()
     ) -> None:
         """
         Deletes a deidentify template.
@@ -551,7 +551,7 @@ class CloudDLPHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a long-running DLP job. This method indicates that the client is no longer
@@ -588,7 +588,7 @@ class CloudDLPHook(GoogleBaseHook):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes an inspect template.
@@ -636,7 +636,7 @@ class CloudDLPHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a job trigger.
@@ -672,7 +672,7 @@ class CloudDLPHook(GoogleBaseHook):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a stored info type.
@@ -720,7 +720,7 @@ class CloudDLPHook(GoogleBaseHook):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> DeidentifyTemplate:
         """
         Gets a deidentify template.
@@ -769,7 +769,7 @@ class CloudDLPHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> DlpJob:
         """
         Gets the latest state of a long-running Dlp Job.
@@ -806,7 +806,7 @@ class CloudDLPHook(GoogleBaseHook):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> InspectTemplate:
         """
         Gets an inspect template.
@@ -855,7 +855,7 @@ class CloudDLPHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> JobTrigger:
         """
         Gets a DLP job trigger.
@@ -892,7 +892,7 @@ class CloudDLPHook(GoogleBaseHook):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> StoredInfoType:
         """
         Gets a stored info type.
@@ -943,7 +943,7 @@ class CloudDLPHook(GoogleBaseHook):
         inspect_template_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> InspectContentResponse:
         """
         Finds potentially sensitive info in content. This method has limits on input size,
@@ -993,7 +993,7 @@ class CloudDLPHook(GoogleBaseHook):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[DeidentifyTemplate]:
         """
         Lists deidentify templates.
@@ -1055,7 +1055,7 @@ class CloudDLPHook(GoogleBaseHook):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[DlpJob]:
         """
         Lists DLP jobs that match the specified filter in the request.
@@ -1106,7 +1106,7 @@ class CloudDLPHook(GoogleBaseHook):
         results_filter: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> ListInfoTypesResponse:
         """
         Returns a list of the sensitive information types that the DLP API supports.
@@ -1146,7 +1146,7 @@ class CloudDLPHook(GoogleBaseHook):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[InspectTemplate]:
         """
         Lists inspect templates.
@@ -1206,7 +1206,7 @@ class CloudDLPHook(GoogleBaseHook):
         results_filter: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[JobTrigger]:
         """
         Lists job triggers.
@@ -1256,7 +1256,7 @@ class CloudDLPHook(GoogleBaseHook):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[StoredInfoType]:
         """
         Lists stored info types.
@@ -1319,7 +1319,7 @@ class CloudDLPHook(GoogleBaseHook):
         byte_item: Optional[Union[dict, ByteContentItem]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> RedactImageResponse:
         """
         Redacts potentially sensitive info from an image. This method has limits on
@@ -1377,7 +1377,7 @@ class CloudDLPHook(GoogleBaseHook):
         reidentify_template_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> ReidentifyContentResponse:
         """
         Re-identifies content that has been de-identified.
@@ -1435,7 +1435,7 @@ class CloudDLPHook(GoogleBaseHook):
         update_mask: Optional[Union[dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> DeidentifyTemplate:
         """
         Updates the deidentify template.
@@ -1497,7 +1497,7 @@ class CloudDLPHook(GoogleBaseHook):
         update_mask: Optional[Union[dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> InspectTemplate:
         """
         Updates the inspect template.
@@ -1558,7 +1558,7 @@ class CloudDLPHook(GoogleBaseHook):
         update_mask: Optional[Union[dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> JobTrigger:
         """
         Updates a job trigger.
@@ -1608,7 +1608,7 @@ class CloudDLPHook(GoogleBaseHook):
         update_mask: Optional[Union[dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> StoredInfoType:
         """
         Updates the stored info type by creating a new version.
diff --git a/airflow/providers/google/cloud/hooks/functions.py b/airflow/providers/google/cloud/hooks/functions.py
index 2110a6a..4670025 100644
--- a/airflow/providers/google/cloud/hooks/functions.py
+++ b/airflow/providers/google/cloud/hooks/functions.py
@@ -23,7 +23,7 @@ import requests
 from googleapiclient.discovery import build
 
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 # Time to sleep between active checks of the operation results
 TIME_TO_SLEEP_IN_SECONDS = 1
@@ -199,7 +199,7 @@ class CloudFunctionsHook(GoogleBaseHook):
         function_id: str,
         input_data: Dict,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
     ) -> dict:
         """
         Synchronously invokes a deployed Cloud Function. To be used for testing
diff --git a/airflow/providers/google/cloud/hooks/gcs.py b/airflow/providers/google/cloud/hooks/gcs.py
index c9836c7..3659b57 100644
--- a/airflow/providers/google/cloud/hooks/gcs.py
+++ b/airflow/providers/google/cloud/hooks/gcs.py
@@ -33,7 +33,9 @@ from typing import Callable, List, Optional, Sequence, Set, Tuple, TypeVar, Unio
 from urllib.parse import urlparse
 
 from google.api_core.exceptions import NotFound
-from google.cloud import storage
+
+# not sure why but mypy complains on missing `storage` but it is clearly there and is importable
+from google.cloud import storage  # type: ignore[attr-defined]
 from google.cloud.exceptions import GoogleCloudError
 
 from airflow.exceptions import AirflowException
@@ -114,6 +116,13 @@ def _fallback_object_url_to_object_name_and_bucket_name(
     return _wrapper
 
 
+# A fake bucket to use in functions decorated by _fallback_object_url_to_object_name_and_bucket_name.
+# This allows the 'bucket' argument to be of type str instead of Optional[str],
+# making it easier to type hint the function body without dealing with the None
+# case that can never happen at runtime.
+PROVIDE_BUCKET: str = cast(str, None)
+
+
 class GCSHook(GoogleBaseHook):
     """
     Interact with Google Cloud Storage. This hook uses the Google Cloud
@@ -299,7 +308,7 @@ class GCSHook(GoogleBaseHook):
 
         num_file_attempts = 0
 
-        while num_file_attempts < num_max_attempts:
+        while True:
             try:
                 num_file_attempts += 1
                 client = self.get_conn()
@@ -333,7 +342,7 @@ class GCSHook(GoogleBaseHook):
     @contextmanager
     def provide_file(
         self,
-        bucket_name: Optional[str] = None,
+        bucket_name: str = PROVIDE_BUCKET,
         object_name: Optional[str] = None,
         object_url: Optional[str] = None,
     ):
@@ -363,7 +372,7 @@ class GCSHook(GoogleBaseHook):
     @contextmanager
     def provide_file_and_upload(
         self,
-        bucket_name: Optional[str] = None,
+        bucket_name: str = PROVIDE_BUCKET,
         object_name: Optional[str] = None,
         object_url: Optional[str] = None,
     ):
@@ -716,11 +725,11 @@ class GCSHook(GoogleBaseHook):
         bucket_name: str,
         timespan_start: datetime,
         timespan_end: datetime,
-        versions: bool = None,
-        max_results: int = None,
-        prefix: str = None,
-        delimiter: str = None,
-    ) -> list:
+        versions: Optional[bool] = None,
+        max_results: Optional[int] = None,
+        prefix: Optional[str] = None,
+        delimiter: Optional[str] = None,
+    ) -> List[str]:
         """
         List all objects from the bucket with the give string prefix in name that were
         updated in the time between ``timespan_start`` and ``timespan_end``.
diff --git a/airflow/providers/google/cloud/hooks/kms.py b/airflow/providers/google/cloud/hooks/kms.py
index 3fd1433..7800394 100644
--- a/airflow/providers/google/cloud/hooks/kms.py
+++ b/airflow/providers/google/cloud/hooks/kms.py
@@ -92,7 +92,7 @@ class CloudKMSHook(GoogleBaseHook):
         authenticated_data: Optional[bytes] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> str:
         """
         Encrypts a plaintext message using Google Cloud KMS.
@@ -125,7 +125,7 @@ class CloudKMSHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         ciphertext = _b64encode(response.ciphertext)
@@ -138,7 +138,7 @@ class CloudKMSHook(GoogleBaseHook):
         authenticated_data: Optional[bytes] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> bytes:
         """
         Decrypts a ciphertext message using Google Cloud KMS.
@@ -170,7 +170,7 @@ class CloudKMSHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
         return response.plaintext
diff --git a/airflow/providers/google/cloud/hooks/kubernetes_engine.py b/airflow/providers/google/cloud/hooks/kubernetes_engine.py
index 1478af9..97375f5 100644
--- a/airflow/providers/google/cloud/hooks/kubernetes_engine.py
+++ b/airflow/providers/google/cloud/hooks/kubernetes_engine.py
@@ -25,14 +25,16 @@ from typing import Dict, Optional, Sequence, Union
 from google.api_core.exceptions import AlreadyExists, NotFound
 from google.api_core.gapic_v1.method import DEFAULT
 from google.api_core.retry import Retry
-from google.cloud import container_v1, exceptions
+
+# not sure why but mypy complains on missing `container_v1` but it is clearly there and is importable
+from google.cloud import container_v1, exceptions  # type: ignore[attr-defined]
 from google.cloud.container_v1.gapic.enums import Operation
 from google.cloud.container_v1.types import Cluster
 from google.protobuf.json_format import ParseDict
 
 from airflow import version
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 OPERATIONAL_POLL_INTERVAL = 15
 
@@ -141,7 +143,11 @@ class GKEHook(GoogleBaseHook):
 
     @GoogleBaseHook.fallback_to_default_project_id
     def delete_cluster(
-        self, name: str, project_id: str, retry: Retry = DEFAULT, timeout: float = DEFAULT
+        self,
+        name: str,
+        project_id: str = PROVIDE_PROJECT_ID,
+        retry: Retry = DEFAULT,
+        timeout: float = DEFAULT,
     ) -> Optional[str]:
         """
         Deletes the cluster, including the Kubernetes endpoint and all
@@ -179,7 +185,11 @@ class GKEHook(GoogleBaseHook):
 
     @GoogleBaseHook.fallback_to_default_project_id
     def create_cluster(
-        self, cluster: Union[Dict, Cluster], project_id: str, retry: Retry = DEFAULT, timeout: float = DEFAULT
+        self,
+        cluster: Union[Dict, Cluster],
+        project_id: str = PROVIDE_PROJECT_ID,
+        retry: Retry = DEFAULT,
+        timeout: float = DEFAULT,
     ) -> str:
         """
         Creates a cluster, consisting of the specified number and type of Google Compute
@@ -228,7 +238,11 @@ class GKEHook(GoogleBaseHook):
 
     @GoogleBaseHook.fallback_to_default_project_id
     def get_cluster(
-        self, name: str, project_id: str, retry: Retry = DEFAULT, timeout: float = DEFAULT
+        self,
+        name: str,
+        project_id: str = PROVIDE_PROJECT_ID,
+        retry: Retry = DEFAULT,
+        timeout: float = DEFAULT,
     ) -> Cluster:
         """
         Gets details of specified cluster
diff --git a/airflow/providers/google/cloud/hooks/natural_language.py b/airflow/providers/google/cloud/hooks/natural_language.py
index 505f6cf..2174c8f 100644
--- a/airflow/providers/google/cloud/hooks/natural_language.py
+++ b/airflow/providers/google/cloud/hooks/natural_language.py
@@ -88,7 +88,7 @@ class CloudNaturalLanguageHook(GoogleBaseHook):
         encoding_type: Optional[enums.EncodingType] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> AnalyzeEntitiesResponse:
         """
         Finds named entities in the text along with entity types,
@@ -122,7 +122,7 @@ class CloudNaturalLanguageHook(GoogleBaseHook):
         encoding_type: Optional[enums.EncodingType] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> AnalyzeEntitySentimentResponse:
         """
         Finds entities, similar to AnalyzeEntities in the text and analyzes sentiment associated with each
@@ -156,7 +156,7 @@ class CloudNaturalLanguageHook(GoogleBaseHook):
         encoding_type: Optional[enums.EncodingType] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> AnalyzeSentimentResponse:
         """
         Analyzes the sentiment of the provided text.
@@ -189,7 +189,7 @@ class CloudNaturalLanguageHook(GoogleBaseHook):
         encoding_type: Optional[enums.EncodingType] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> AnalyzeSyntaxResponse:
         """
         Analyzes the syntax of the text and provides sentence boundaries and tokenization along with part
@@ -224,7 +224,7 @@ class CloudNaturalLanguageHook(GoogleBaseHook):
         encoding_type: enums.EncodingType = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> AnnotateTextResponse:
         """
         A convenience method that provides all the features that analyzeSentiment,
@@ -265,7 +265,7 @@ class CloudNaturalLanguageHook(GoogleBaseHook):
         document: Union[dict, Document],
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> ClassifyTextResponse:
         """
         Classifies a document into categories.
diff --git a/airflow/providers/google/cloud/hooks/os_login.py b/airflow/providers/google/cloud/hooks/os_login.py
index 361ea60..a2e5957 100644
--- a/airflow/providers/google/cloud/hooks/os_login.py
+++ b/airflow/providers/google/cloud/hooks/os_login.py
@@ -15,11 +15,12 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from typing import Dict, Optional, Sequence, Union
+from typing import Dict, Optional, Sequence, Tuple, Union
 
+from google.api_core.retry import Retry
 from google.cloud.oslogin_v1 import ImportSshPublicKeyResponse, OsLoginServiceClient
 
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 
 class OSLoginHook(GoogleBaseHook):
@@ -53,7 +54,13 @@ class OSLoginHook(GoogleBaseHook):
 
     @GoogleBaseHook.fallback_to_default_project_id
     def import_ssh_public_key(
-        self, user: str, ssh_public_key: Dict, project_id: str, retry=None, timeout=None, metadata=None
+        self,
+        user: str,
+        ssh_public_key: Dict,
+        project_id: str = PROVIDE_PROJECT_ID,
+        retry: Optional[Retry] = None,
+        timeout: Optional[float] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> ImportSshPublicKeyResponse:
         """
         Adds an SSH public key and returns the profile information. Default POSIX
@@ -73,7 +80,7 @@ class OSLoginHook(GoogleBaseHook):
             if ``retry`` is specified, the timeout applies to each individual attempt.
         :type timeout: Optional[float]
         :param metadata: Additional metadata that is provided to the method.
-        :type metadata: Optional[Sequence[Tuple[str, str]]]
+        :type metadata: Sequence[Tuple[str, str]]
         :return: A :class:`~google.cloud.oslogin_v1.ImportSshPublicKeyResponse` instance.
         """
         conn = self.get_conn()
@@ -85,5 +92,5 @@ class OSLoginHook(GoogleBaseHook):
             ),
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
diff --git a/airflow/providers/google/cloud/hooks/pubsub.py b/airflow/providers/google/cloud/hooks/pubsub.py
index f1c1f33..11d7c3b 100644
--- a/airflow/providers/google/cloud/hooks/pubsub.py
+++ b/airflow/providers/google/cloud/hooks/pubsub.py
@@ -42,7 +42,7 @@ from google.cloud.pubsub_v1.types import (
 )
 from googleapiclient.errors import HttpError
 
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 from airflow.version import version
 
 
@@ -97,7 +97,7 @@ class PubSubHook(GoogleBaseHook):
         self,
         topic: str,
         messages: List[dict],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
     ) -> None:
         """
         Publishes messages to a Pub/Sub topic.
@@ -164,14 +164,14 @@ class PubSubHook(GoogleBaseHook):
     def create_topic(
         self,
         topic: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         fail_if_exists: bool = False,
         labels: Optional[Dict[str, str]] = None,
         message_storage_policy: Union[Dict, MessageStoragePolicy] = None,
         kms_key_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Creates a Pub/Sub topic, if it does not already exist.
@@ -228,7 +228,7 @@ class PubSubHook(GoogleBaseHook):
                 },
                 retry=retry,
                 timeout=timeout,
-                metadata=metadata or (),
+                metadata=metadata,
             )
         except AlreadyExists:
             self.log.warning('Topic already exists: %s', topic)
@@ -243,11 +243,11 @@ class PubSubHook(GoogleBaseHook):
     def delete_topic(
         self,
         topic: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         fail_if_not_exists: bool = False,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a Pub/Sub topic if it exists.
@@ -292,7 +292,7 @@ class PubSubHook(GoogleBaseHook):
     def create_subscription(
         self,
         topic: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         subscription: Optional[str] = None,
         subscription_project_id: Optional[str] = None,
         ack_deadline_secs: int = 10,
@@ -308,7 +308,7 @@ class PubSubHook(GoogleBaseHook):
         retry_policy: Optional[Union[dict, RetryPolicy]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> str:
         """
         Creates a Pub/Sub subscription, if it does not already exist.
@@ -424,7 +424,7 @@ class PubSubHook(GoogleBaseHook):
                 },
                 retry=retry,
                 timeout=timeout,
-                metadata=metadata or (),
+                metadata=metadata,
             )
         except AlreadyExists:
             self.log.warning('Subscription already exists: %s', subscription_path)
@@ -440,11 +440,11 @@ class PubSubHook(GoogleBaseHook):
     def delete_subscription(
         self,
         subscription: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         fail_if_not_exists: bool = False,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a Pub/Sub subscription, if it exists.
@@ -478,7 +478,7 @@ class PubSubHook(GoogleBaseHook):
                 request={"subscription": subscription_path},
                 retry=retry,
                 timeout=timeout,
-                metadata=metadata or (),
+                metadata=metadata,
             )
 
         except NotFound:
@@ -495,11 +495,11 @@ class PubSubHook(GoogleBaseHook):
         self,
         subscription: str,
         max_messages: int,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         return_immediately: bool = False,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[ReceivedMessage]:
         """
         Pulls up to ``max_messages`` messages from Pub/Sub subscription.
@@ -546,7 +546,7 @@ class PubSubHook(GoogleBaseHook):
                 },
                 retry=retry,
                 timeout=timeout,
-                metadata=metadata or (),
+                metadata=metadata,
             )
             result = getattr(response, 'received_messages', [])
             self.log.info("Pulled %d messages from subscription (path) %s", len(result), subscription_path)
@@ -563,7 +563,7 @@ class PubSubHook(GoogleBaseHook):
         messages: Optional[List[ReceivedMessage]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Acknowledges the messages associated with the ``ack_ids`` from Pub/Sub subscription.
@@ -608,7 +608,7 @@ class PubSubHook(GoogleBaseHook):
                 request={"subscription": subscription_path, "ack_ids": ack_ids},
                 retry=retry,
                 timeout=timeout,
-                metadata=metadata or (),
+                metadata=metadata,
             )
         except (HttpError, GoogleAPICallError) as e:
             raise PubSubException(
diff --git a/airflow/providers/google/cloud/hooks/stackdriver.py b/airflow/providers/google/cloud/hooks/stackdriver.py
index 04dc329..4c2e6da 100644
--- a/airflow/providers/google/cloud/hooks/stackdriver.py
+++ b/airflow/providers/google/cloud/hooks/stackdriver.py
@@ -19,7 +19,7 @@
 """This module contains Google Cloud Stackdriver operators."""
 
 import json
-from typing import Any, Optional, Sequence, Union
+from typing import Any, Optional, Sequence, Tuple, Union
 
 from google.api_core.exceptions import InvalidArgument
 from google.api_core.gapic_v1.method import DEFAULT
@@ -29,7 +29,7 @@ from google.protobuf.field_mask_pb2 import FieldMask
 from googleapiclient.errors import HttpError
 
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 
 class StackdriverHook(GoogleBaseHook):
@@ -62,14 +62,14 @@ class StackdriverHook(GoogleBaseHook):
     @GoogleBaseHook.fallback_to_default_project_id
     def list_alert_policies(
         self,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         format_: Optional[str] = None,
         filter_: Optional[str] = None,
         order_by: Optional[str] = None,
         page_size: Optional[int] = None,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[float] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Any:
         """
         Fetches all the Alert Policies identified by the filter passed as
@@ -119,7 +119,7 @@ class StackdriverHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         if format_ == "dict":
             return [AlertPolicy.to_dict(policy) for policy in policies_]
@@ -132,11 +132,11 @@ class StackdriverHook(GoogleBaseHook):
     def _toggle_policy_status(
         self,
         new_state: bool,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         filter_: Optional[str] = None,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[float] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         client = self._get_policy_client()
         policies_ = self.list_alert_policies(project_id=project_id, filter_=filter_)
@@ -148,17 +148,17 @@ class StackdriverHook(GoogleBaseHook):
                     request={'alert_policy': policy, 'update_mask': mask},
                     retry=retry,
                     timeout=timeout,
-                    metadata=metadata or (),
+                    metadata=metadata,
                 )
 
     @GoogleBaseHook.fallback_to_default_project_id
     def enable_alert_policies(
         self,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         filter_: Optional[str] = None,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[float] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Enables one or more disabled alerting policies identified by filter
@@ -192,11 +192,11 @@ class StackdriverHook(GoogleBaseHook):
     @GoogleBaseHook.fallback_to_default_project_id
     def disable_alert_policies(
         self,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         filter_: Optional[str] = None,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[float] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Disables one or more enabled alerting policies identified by filter
@@ -231,10 +231,10 @@ class StackdriverHook(GoogleBaseHook):
     def upsert_alert(
         self,
         alerts: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[float] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
          Creates a new alert or updates an existing policy identified
@@ -287,7 +287,7 @@ class StackdriverHook(GoogleBaseHook):
                     request={'notification_channel': channel},
                     retry=retry,
                     timeout=timeout,
-                    metadata=metadata or (),
+                    metadata=metadata,
                 )
             else:
                 old_name = channel.name
@@ -296,7 +296,7 @@ class StackdriverHook(GoogleBaseHook):
                     request={'name': f'projects/{project_id}', 'notification_channel': channel},
                     retry=retry,
                     timeout=timeout,
-                    metadata=metadata or (),
+                    metadata=metadata,
                 )
                 channel_name_map[old_name] = new_channel.name
 
@@ -315,7 +315,7 @@ class StackdriverHook(GoogleBaseHook):
                         request={'alert_policy': policy},
                         retry=retry,
                         timeout=timeout,
-                        metadata=metadata or (),
+                        metadata=metadata,
                     )
                 except InvalidArgument:
                     pass
@@ -327,7 +327,7 @@ class StackdriverHook(GoogleBaseHook):
                     request={'name': f'projects/{project_id}', 'alert_policy': policy},
                     retry=retry,
                     timeout=timeout,
-                    metadata=metadata or (),
+                    metadata=metadata,
                 )
 
     def delete_alert_policy(
@@ -335,7 +335,7 @@ class StackdriverHook(GoogleBaseHook):
         name: str,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[float] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes an alerting policy.
@@ -364,14 +364,14 @@ class StackdriverHook(GoogleBaseHook):
     @GoogleBaseHook.fallback_to_default_project_id
     def list_notification_channels(
         self,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         format_: Optional[str] = None,
         filter_: Optional[str] = None,
         order_by: Optional[str] = None,
         page_size: Optional[int] = None,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[str] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Any:
         """
         Fetches all the Notification Channels identified by the filter passed as
@@ -421,7 +421,7 @@ class StackdriverHook(GoogleBaseHook):
             },
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         if format_ == "dict":
             return [NotificationChannel.to_dict(channel) for channel in channels]
@@ -434,11 +434,11 @@ class StackdriverHook(GoogleBaseHook):
     def _toggle_channel_status(
         self,
         new_state: bool,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         filter_: Optional[str] = None,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[str] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         client = self._get_channel_client()
         channels = client.list_notification_channels(
@@ -452,17 +452,17 @@ class StackdriverHook(GoogleBaseHook):
                     request={'notification_channel': channel, 'update_mask': mask},
                     retry=retry,
                     timeout=timeout,
-                    metadata=metadata or (),
+                    metadata=metadata,
                 )
 
     @GoogleBaseHook.fallback_to_default_project_id
     def enable_notification_channels(
         self,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         filter_: Optional[str] = None,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[str] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Enables one or more disabled alerting policies identified by filter
@@ -500,7 +500,7 @@ class StackdriverHook(GoogleBaseHook):
         filter_: Optional[str] = None,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[str] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Disables one or more enabled notification channels identified by filter
@@ -528,7 +528,7 @@ class StackdriverHook(GoogleBaseHook):
             new_state=False,
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -538,7 +538,7 @@ class StackdriverHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[float] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> dict:
         """
         Creates a new notification or updates an existing notification channel
@@ -584,7 +584,7 @@ class StackdriverHook(GoogleBaseHook):
                     request={'notification_channel': channel},
                     retry=retry,
                     timeout=timeout,
-                    metadata=metadata or (),
+                    metadata=metadata,
                 )
             else:
                 old_name = channel.name
@@ -593,7 +593,7 @@ class StackdriverHook(GoogleBaseHook):
                     request={'name': f'projects/{project_id}', 'notification_channel': channel},
                     retry=retry,
                     timeout=timeout,
-                    metadata=metadata or (),
+                    metadata=metadata,
                 )
                 channel_name_map[old_name] = new_channel.name
 
@@ -604,7 +604,7 @@ class StackdriverHook(GoogleBaseHook):
         name: str,
         retry: Optional[str] = DEFAULT,
         timeout: Optional[str] = DEFAULT,
-        metadata: Optional[str] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a notification channel.
diff --git a/airflow/providers/google/cloud/hooks/tasks.py b/airflow/providers/google/cloud/hooks/tasks.py
index 63075e4..ff9e9b1 100644
--- a/airflow/providers/google/cloud/hooks/tasks.py
+++ b/airflow/providers/google/cloud/hooks/tasks.py
@@ -30,7 +30,7 @@ from google.cloud.tasks_v2.types import Queue, Task
 from google.protobuf.field_mask_pb2 import FieldMask
 
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 
 class CloudTasksHook(GoogleBaseHook):
@@ -87,11 +87,11 @@ class CloudTasksHook(GoogleBaseHook):
         self,
         location: str,
         task_queue: Union[dict, Queue],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         queue_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Queue:
         """
         Creates a queue in Cloud Tasks.
@@ -134,20 +134,20 @@ class CloudTasksHook(GoogleBaseHook):
             request={'parent': full_location_path, 'queue': task_queue},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
     def update_queue(
         self,
         task_queue: Queue,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         location: Optional[str] = None,
         queue_name: Optional[str] = None,
         update_mask: Optional[FieldMask] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Queue:
         """
         Updates a queue in Cloud Tasks.
@@ -194,7 +194,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'queue': task_queue, 'update_mask': update_mask},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -202,10 +202,10 @@ class CloudTasksHook(GoogleBaseHook):
         self,
         location: str,
         queue_name: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Queue:
         """
         Gets a queue from Cloud Tasks.
@@ -235,19 +235,19 @@ class CloudTasksHook(GoogleBaseHook):
             request={'name': full_queue_name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
     def list_queues(
         self,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         results_filter: Optional[str] = None,
         page_size: Optional[int] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[Queue]:
         """
         Lists queues from Cloud Tasks.
@@ -280,7 +280,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'parent': full_location_path, 'filter': results_filter, 'page_size': page_size},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return list(queues)
 
@@ -289,10 +289,10 @@ class CloudTasksHook(GoogleBaseHook):
         self,
         location: str,
         queue_name: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a queue from Cloud Tasks, even if it has tasks in it.
@@ -321,7 +321,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'name': full_queue_name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -329,10 +329,10 @@ class CloudTasksHook(GoogleBaseHook):
         self,
         location: str,
         queue_name: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[Queue]:
         """
         Purges a queue by deleting all of its tasks from Cloud Tasks.
@@ -362,7 +362,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'name': full_queue_name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -370,10 +370,10 @@ class CloudTasksHook(GoogleBaseHook):
         self,
         location: str,
         queue_name: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[Queue]:
         """
         Pauses a queue in Cloud Tasks.
@@ -403,7 +403,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'name': full_queue_name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -411,10 +411,10 @@ class CloudTasksHook(GoogleBaseHook):
         self,
         location: str,
         queue_name: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[Queue]:
         """
         Resumes a queue in Cloud Tasks.
@@ -444,7 +444,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'name': full_queue_name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -453,12 +453,12 @@ class CloudTasksHook(GoogleBaseHook):
         location: str,
         queue_name: str,
         task: Union[Dict, Task],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         task_name: Optional[str] = None,
         response_view: Optional[Task.View] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Task:
         """
         Creates a task in Cloud Tasks.
@@ -507,7 +507,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'parent': full_queue_name, 'task': task, 'response_view': response_view},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -516,11 +516,11 @@ class CloudTasksHook(GoogleBaseHook):
         location: str,
         queue_name: str,
         task_name: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         response_view: Optional[Task.View] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Task:
         """
         Gets a task from Cloud Tasks.
@@ -555,7 +555,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'name': full_task_name, 'response_view': response_view},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -568,7 +568,7 @@ class CloudTasksHook(GoogleBaseHook):
         page_size: Optional[int] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> List[Task]:
         """
         Lists the tasks in Cloud Tasks.
@@ -603,7 +603,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'parent': full_queue_name, 'response_view': response_view, 'page_size': page_size},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
         return list(tasks)
 
@@ -616,7 +616,7 @@ class CloudTasksHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         Deletes a task from Cloud Tasks.
@@ -647,7 +647,7 @@ class CloudTasksHook(GoogleBaseHook):
             request={'name': full_task_name},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
 
     @GoogleBaseHook.fallback_to_default_project_id
@@ -660,7 +660,7 @@ class CloudTasksHook(GoogleBaseHook):
         response_view: Optional[Task.View] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Task:
         """
         Forces to run a task in Cloud Tasks.
@@ -695,5 +695,5 @@ class CloudTasksHook(GoogleBaseHook):
             request={'name': full_task_name, 'response_view': response_view},
             retry=retry,
             timeout=timeout,
-            metadata=metadata or (),
+            metadata=metadata,
         )
diff --git a/airflow/providers/google/cloud/hooks/video_intelligence.py b/airflow/providers/google/cloud/hooks/video_intelligence.py
index 96c1c79..2174b22 100644
--- a/airflow/providers/google/cloud/hooks/video_intelligence.py
+++ b/airflow/providers/google/cloud/hooks/video_intelligence.py
@@ -86,7 +86,7 @@ class CloudVideoIntelligenceHook(GoogleBaseHook):
         location: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Operation:
         """
         Performs video annotation.
diff --git a/airflow/providers/google/cloud/hooks/vision.py b/airflow/providers/google/cloud/hooks/vision.py
index 744b43f..d5e6fdc 100644
--- a/airflow/providers/google/cloud/hooks/vision.py
+++ b/airflow/providers/google/cloud/hooks/vision.py
@@ -38,7 +38,7 @@ from google.cloud.vision_v1.types import (
 from google.protobuf.json_format import MessageToDict
 
 from airflow.exceptions import AirflowException
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 ERR_DIFF_NAMES = """The {label} name provided in the object ({explicit_name}) is different
     than the name created from the input parameters ({constructed_name}). Please either:
@@ -175,11 +175,11 @@ class CloudVisionHook(GoogleBaseHook):
         self,
         location: str,
         product_set: Union[dict, ProductSet],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         product_set_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> str:
         """
         For the documentation see:
@@ -211,10 +211,10 @@ class CloudVisionHook(GoogleBaseHook):
         self,
         location: str,
         product_set_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> dict:
         """
         For the documentation see:
@@ -232,13 +232,13 @@ class CloudVisionHook(GoogleBaseHook):
     def update_product_set(
         self,
         product_set: Union[dict, ProductSet],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         location: Optional[str] = None,
         product_set_id: Optional[str] = None,
         update_mask: Union[dict, FieldMask] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> dict:
         """
         For the documentation see:
@@ -261,10 +261,10 @@ class CloudVisionHook(GoogleBaseHook):
         self,
         location: str,
         product_set_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         For the documentation see:
@@ -281,11 +281,11 @@ class CloudVisionHook(GoogleBaseHook):
         self,
         location: str,
         product: Union[dict, Product],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         product_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         For the documentation see:
@@ -317,10 +317,10 @@ class CloudVisionHook(GoogleBaseHook):
         self,
         location: str,
         product_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         For the documentation see:
@@ -338,13 +338,13 @@ class CloudVisionHook(GoogleBaseHook):
     def update_product(
         self,
         product: Union[dict, Product],
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         location: Optional[str] = None,
         product_id: Optional[str] = None,
         update_mask: Optional[Dict[str, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ):
         """
         For the documentation see:
@@ -365,10 +365,10 @@ class CloudVisionHook(GoogleBaseHook):
         self,
         location: str,
         product_id: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         For the documentation see:
@@ -390,7 +390,7 @@ class CloudVisionHook(GoogleBaseHook):
         reference_image_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> str:
         """
         For the documentation see:
@@ -430,7 +430,7 @@ class CloudVisionHook(GoogleBaseHook):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> dict:
         """
         For the documentation see:
@@ -461,7 +461,7 @@ class CloudVisionHook(GoogleBaseHook):
         location: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         For the documentation see:
@@ -489,7 +489,7 @@ class CloudVisionHook(GoogleBaseHook):
         location: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> None:
         """
         For the documentation see:
diff --git a/airflow/providers/google/cloud/hooks/workflows.py b/airflow/providers/google/cloud/hooks/workflows.py
index ed3716a..9088924 100644
--- a/airflow/providers/google/cloud/hooks/workflows.py
+++ b/airflow/providers/google/cloud/hooks/workflows.py
@@ -25,7 +25,7 @@ from google.cloud.workflows_v1beta import Workflow, WorkflowsClient
 from google.cloud.workflows_v1beta.services.workflows.pagers import ListWorkflowsPager
 from google.protobuf.field_mask_pb2 import FieldMask
 
-from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
+from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseHook
 
 
 class WorkflowsHook(GoogleBaseHook):
@@ -50,10 +50,10 @@ class WorkflowsHook(GoogleBaseHook):
         workflow: Dict,
         workflow_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Operation:
         """
         Creates a new workflow. If a workflow with the specified name
@@ -93,10 +93,10 @@ class WorkflowsHook(GoogleBaseHook):
         self,
         workflow_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Workflow:
         """
         Gets details of a single Workflow.
@@ -127,7 +127,7 @@ class WorkflowsHook(GoogleBaseHook):
         update_mask: Optional[FieldMask] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Operation:
         """
         Updates an existing workflow.
@@ -165,10 +165,10 @@ class WorkflowsHook(GoogleBaseHook):
         self,
         workflow_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Operation:
         """
         Deletes a workflow with the specified name.
@@ -199,12 +199,12 @@ class WorkflowsHook(GoogleBaseHook):
     def list_workflows(
         self,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         filter_: Optional[str] = None,
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> ListWorkflowsPager:
         """
         Lists Workflows in a given project and location.
@@ -246,11 +246,11 @@ class WorkflowsHook(GoogleBaseHook):
         self,
         workflow_id: str,
         location: str,
-        project_id: str,
         execution: Dict,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Execution:
         """
         Creates a new execution using the latest revision of
@@ -289,10 +289,10 @@ class WorkflowsHook(GoogleBaseHook):
         workflow_id: str,
         execution_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Execution:
         """
         Returns an execution for the given ``workflow_id`` and ``execution_id``.
@@ -325,10 +325,10 @@ class WorkflowsHook(GoogleBaseHook):
         workflow_id: str,
         execution_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> Execution:
         """
         Cancels an execution using the given ``workflow_id`` and ``execution_id``.
@@ -362,10 +362,10 @@ class WorkflowsHook(GoogleBaseHook):
         self,
         workflow_id: str,
         location: str,
-        project_id: str,
+        project_id: str = PROVIDE_PROJECT_ID,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
     ) -> ListExecutionsPager:
         """
         Returns a list of executions which belong to the
diff --git a/airflow/providers/google/cloud/operators/automl.py b/airflow/providers/google/cloud/operators/automl.py
index bdd4bb5..d903221 100644
--- a/airflow/providers/google/cloud/operators/automl.py
+++ b/airflow/providers/google/cloud/operators/automl.py
@@ -86,7 +86,7 @@ class AutoMLTrainModelOperator(BaseOperator):
         model: dict,
         location: str,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -181,7 +181,7 @@ class AutoMLPredictOperator(BaseOperator):
         payload: dict,
         operation_params: Optional[Dict[str, str]] = None,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -289,7 +289,7 @@ class AutoMLBatchPredictOperator(BaseOperator):
         location: str,
         project_id: Optional[str] = None,
         prediction_params: Optional[Dict[str, str]] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -384,7 +384,7 @@ class AutoMLCreateDatasetOperator(BaseOperator):
         dataset: dict,
         location: str,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -480,7 +480,7 @@ class AutoMLImportDataOperator(BaseOperator):
         location: str,
         input_config: dict,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -587,7 +587,7 @@ class AutoMLTablesListColumnSpecsOperator(BaseOperator):
         filter_: Optional[str] = None,
         page_size: Optional[int] = None,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -684,7 +684,7 @@ class AutoMLTablesUpdateDatasetOperator(BaseOperator):
         dataset: dict,
         location: str,
         update_mask: Optional[dict] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -770,7 +770,7 @@ class AutoMLGetModelOperator(BaseOperator):
         model_id: str,
         location: str,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -855,7 +855,7 @@ class AutoMLDeleteModelOperator(BaseOperator):
         model_id: str,
         location: str,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -950,7 +950,7 @@ class AutoMLDeployModelOperator(BaseOperator):
         location: str,
         project_id: Optional[str] = None,
         image_detection_metadata: Optional[dict] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -1049,7 +1049,7 @@ class AutoMLTablesListTableSpecsOperator(BaseOperator):
         page_size: Optional[int] = None,
         filter_: Optional[str] = None,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -1135,7 +1135,7 @@ class AutoMLListDatasetOperator(BaseOperator):
         *,
         location: str,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
@@ -1225,7 +1225,7 @@ class AutoMLDeleteDatasetOperator(BaseOperator):
         dataset_id: Union[str, List[str]],
         location: str,
         project_id: Optional[str] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         timeout: Optional[float] = None,
         retry: Optional[Retry] = None,
         gcp_conn_id: str = "google_cloud_default",
diff --git a/airflow/providers/google/cloud/operators/bigquery_dts.py b/airflow/providers/google/cloud/operators/bigquery_dts.py
index 0f2a422..e66058f 100644
--- a/airflow/providers/google/cloud/operators/bigquery_dts.py
+++ b/airflow/providers/google/cloud/operators/bigquery_dts.py
@@ -83,7 +83,7 @@ class BigQueryCreateDataTransferOperator(BaseOperator):
         authorization_code: Optional[str] = None,
         retry: Retry = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id="google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -170,7 +170,7 @@ class BigQueryDeleteDataTransferConfigOperator(BaseOperator):
         location: Optional[str] = None,
         retry: Retry = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id="google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -266,7 +266,7 @@ class BigQueryDataTransferServiceStartTransferRunsOperator(BaseOperator):
         requested_run_time: Optional[dict] = None,
         retry: Retry = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id="google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/operators/cloud_build.py b/airflow/providers/google/cloud/operators/cloud_build.py
index df3934a..a4de6c5 100644
--- a/airflow/providers/google/cloud/operators/cloud_build.py
+++ b/airflow/providers/google/cloud/operators/cloud_build.py
@@ -81,7 +81,7 @@ class CloudBuildCancelBuildOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -161,7 +161,7 @@ class CloudBuildCreateBuildOperator(BaseOperator):
         wait: bool = True,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -262,7 +262,7 @@ class CloudBuildCreateBuildTriggerOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -331,7 +331,7 @@ class CloudBuildDeleteBuildTriggerOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -401,7 +401,7 @@ class CloudBuildGetBuildOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -472,7 +472,7 @@ class CloudBuildGetBuildTriggerOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -549,7 +549,7 @@ class CloudBuildListBuildTriggersOperator(BaseOperator):
         page_token: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -630,7 +630,7 @@ class CloudBuildListBuildsOperator(BaseOperator):
         filter_: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -709,7 +709,7 @@ class CloudBuildRetryBuildOperator(BaseOperator):
         wait: bool = True,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -789,7 +789,7 @@ class CloudBuildRunBuildTriggerOperator(BaseOperator):
         wait: bool = True,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -868,7 +868,7 @@ class CloudBuildUpdateBuildTriggerOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/operators/cloud_memorystore.py b/airflow/providers/google/cloud/operators/cloud_memorystore.py
index d232f95..b37b1dc 100644
--- a/airflow/providers/google/cloud/operators/cloud_memorystore.py
+++ b/airflow/providers/google/cloud/operators/cloud_memorystore.py
@@ -102,7 +102,7 @@ class CloudMemorystoreCreateInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -189,7 +189,7 @@ class CloudMemorystoreDeleteInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -281,7 +281,7 @@ class CloudMemorystoreExportInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -373,7 +373,7 @@ class CloudMemorystoreFailoverInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -458,7 +458,7 @@ class CloudMemorystoreGetInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -552,7 +552,7 @@ class CloudMemorystoreImportOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -641,7 +641,7 @@ class CloudMemorystoreListInstancesOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -748,7 +748,7 @@ class CloudMemorystoreUpdateInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -840,7 +840,7 @@ class CloudMemorystoreScaleInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -953,7 +953,7 @@ class CloudMemorystoreCreateInstanceAndImportOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1060,7 +1060,7 @@ class CloudMemorystoreExportAndDeleteInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1155,7 +1155,7 @@ class CloudMemorystoreMemcachedApplyParametersOperator(BaseOperator):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1249,7 +1249,7 @@ class CloudMemorystoreMemcachedCreateInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         *args,
         **kwargs,
@@ -1314,7 +1314,7 @@ class CloudMemorystoreMemcachedDeleteInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         *args,
         **kwargs,
@@ -1394,7 +1394,7 @@ class CloudMemorystoreMemcachedGetInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1477,7 +1477,7 @@ class CloudMemorystoreMemcachedListInstancesOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1579,7 +1579,7 @@ class CloudMemorystoreMemcachedUpdateInstanceOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1671,7 +1671,7 @@ class CloudMemorystoreMemcachedUpdateParametersOperator(BaseOperator):
         project_id: str,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/operators/datacatalog.py b/airflow/providers/google/cloud/operators/datacatalog.py
index 59ae7c2..94db14f 100644
--- a/airflow/providers/google/cloud/operators/datacatalog.py
+++ b/airflow/providers/google/cloud/operators/datacatalog.py
@@ -104,7 +104,7 @@ class CloudDataCatalogCreateEntryOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -220,7 +220,7 @@ class CloudDataCatalogCreateEntryGroupOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -339,7 +339,7 @@ class CloudDataCatalogCreateTagOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -467,7 +467,7 @@ class CloudDataCatalogCreateTagTemplateOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -585,7 +585,7 @@ class CloudDataCatalogCreateTagTemplateFieldOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -694,7 +694,7 @@ class CloudDataCatalogDeleteEntryOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -786,7 +786,7 @@ class CloudDataCatalogDeleteEntryGroupOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -882,7 +882,7 @@ class CloudDataCatalogDeleteTagOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -980,7 +980,7 @@ class CloudDataCatalogDeleteTagTemplateOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1078,7 +1078,7 @@ class CloudDataCatalogDeleteTagTemplateFieldOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1174,7 +1174,7 @@ class CloudDataCatalogGetEntryOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1269,7 +1269,7 @@ class CloudDataCatalogGetEntryGroupOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1357,7 +1357,7 @@ class CloudDataCatalogGetTagTemplateOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1454,7 +1454,7 @@ class CloudDataCatalogListTagsOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1546,7 +1546,7 @@ class CloudDataCatalogLookupEntryOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1641,7 +1641,7 @@ class CloudDataCatalogRenameTagTemplateFieldOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1761,7 +1761,7 @@ class CloudDataCatalogSearchCatalogOperator(BaseOperator):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1868,7 +1868,7 @@ class CloudDataCatalogUpdateEntryOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1980,7 +1980,7 @@ class CloudDataCatalogUpdateTagOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2093,7 +2093,7 @@ class CloudDataCatalogUpdateTagTemplateOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2212,7 +2212,7 @@ class CloudDataCatalogUpdateTagTemplateFieldOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/operators/dlp.py b/airflow/providers/google/cloud/operators/dlp.py
index 7b34824..ddcff0f 100644
--- a/airflow/providers/google/cloud/operators/dlp.py
+++ b/airflow/providers/google/cloud/operators/dlp.py
@@ -96,7 +96,7 @@ class CloudDLPCancelDLPJobOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -186,7 +186,7 @@ class CloudDLPCreateDeidentifyTemplateOperator(BaseOperator):
         template_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -293,7 +293,7 @@ class CloudDLPCreateDLPJobOperator(BaseOperator):
         job_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         wait_until_finished: bool = True,
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
@@ -400,7 +400,7 @@ class CloudDLPCreateInspectTemplateOperator(BaseOperator):
         template_id: Optional[Union[Dict, InspectTemplate]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -500,7 +500,7 @@ class CloudDLPCreateJobTriggerOperator(BaseOperator):
         trigger_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -603,7 +603,7 @@ class CloudDLPCreateStoredInfoTypeOperator(BaseOperator):
         stored_info_type_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -723,7 +723,7 @@ class CloudDLPDeidentifyContentOperator(BaseOperator):
         deidentify_template_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -815,7 +815,7 @@ class CloudDLPDeleteDeidentifyTemplateOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -899,7 +899,7 @@ class CloudDLPDeleteDLPJobOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -985,7 +985,7 @@ class CloudDLPDeleteInspectTemplateOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1068,7 +1068,7 @@ class CloudDLPDeleteJobTriggerOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1154,7 +1154,7 @@ class CloudDLPDeleteStoredInfoTypeOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1244,7 +1244,7 @@ class CloudDLPGetDeidentifyTemplateOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1327,7 +1327,7 @@ class CloudDLPGetDLPJobOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1413,7 +1413,7 @@ class CloudDLPGetInspectTemplateOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1496,7 +1496,7 @@ class CloudDLPGetDLPJobTriggerOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1582,7 +1582,7 @@ class CloudDLPGetStoredInfoTypeOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1676,7 +1676,7 @@ class CloudDLPInspectContentOperator(BaseOperator):
         inspect_template_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1770,7 +1770,7 @@ class CloudDLPListDeidentifyTemplatesOperator(BaseOperator):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1865,7 +1865,7 @@ class CloudDLPListDLPJobsOperator(BaseOperator):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1951,7 +1951,7 @@ class CloudDLPListInfoTypesOperator(BaseOperator):
         results_filter: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2041,7 +2041,7 @@ class CloudDLPListInspectTemplatesOperator(BaseOperator):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2133,7 +2133,7 @@ class CloudDLPListJobTriggersOperator(BaseOperator):
         results_filter: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2227,7 +2227,7 @@ class CloudDLPListStoredInfoTypesOperator(BaseOperator):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2329,7 +2329,7 @@ class CloudDLPRedactImageOperator(BaseOperator):
         byte_item: Optional[Union[Dict, ByteContentItem]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2436,7 +2436,7 @@ class CloudDLPReidentifyContentOperator(BaseOperator):
         reidentify_template_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2538,7 +2538,7 @@ class CloudDLPUpdateDeidentifyTemplateOperator(BaseOperator):
         update_mask: Optional[Union[Dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2638,7 +2638,7 @@ class CloudDLPUpdateInspectTemplateOperator(BaseOperator):
         update_mask: Optional[Union[Dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2733,7 +2733,7 @@ class CloudDLPUpdateJobTriggerOperator(BaseOperator):
         update_mask: Optional[Union[Dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -2832,7 +2832,7 @@ class CloudDLPUpdateStoredInfoTypeOperator(BaseOperator):
         update_mask: Optional[Union[Dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/operators/natural_language.py b/airflow/providers/google/cloud/operators/natural_language.py
index 6fc1677..34c5e4e 100644
--- a/airflow/providers/google/cloud/operators/natural_language.py
+++ b/airflow/providers/google/cloud/operators/natural_language.py
@@ -78,7 +78,7 @@ class CloudNaturalLanguageAnalyzeEntitiesOperator(BaseOperator):
         encoding_type: Optional[enums.EncodingType] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -158,7 +158,7 @@ class CloudNaturalLanguageAnalyzeEntitySentimentOperator(BaseOperator):
         encoding_type: Optional[enums.EncodingType] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -241,7 +241,7 @@ class CloudNaturalLanguageAnalyzeSentimentOperator(BaseOperator):
         encoding_type: Optional[enums.EncodingType] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -315,7 +315,7 @@ class CloudNaturalLanguageClassifyTextOperator(BaseOperator):
         document: Union[dict, Document],
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/operators/pubsub.py b/airflow/providers/google/cloud/operators/pubsub.py
index f590256..424b473 100644
--- a/airflow/providers/google/cloud/operators/pubsub.py
+++ b/airflow/providers/google/cloud/operators/pubsub.py
@@ -137,7 +137,7 @@ class PubSubCreateTopicOperator(BaseOperator):
         kms_key_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         project: Optional[str] = None,
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -363,7 +363,7 @@ class PubSubCreateSubscriptionOperator(BaseOperator):
         retry_policy: Optional[Union[Dict, RetryPolicy]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         topic_project: Optional[str] = None,
         subscription_project: Optional[str] = None,
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
@@ -530,7 +530,7 @@ class PubSubDeleteTopicOperator(BaseOperator):
         delegate_to: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         project: Optional[str] = None,
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -662,7 +662,7 @@ class PubSubDeleteSubscriptionOperator(BaseOperator):
         delegate_to: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         project: Optional[str] = None,
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/operators/tasks.py b/airflow/providers/google/cloud/operators/tasks.py
index ea97dbc..0f7cbed 100644
--- a/airflow/providers/google/cloud/operators/tasks.py
+++ b/airflow/providers/google/cloud/operators/tasks.py
@@ -96,7 +96,7 @@ class CloudTasksQueueCreateOperator(BaseOperator):
         queue_name: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -209,7 +209,7 @@ class CloudTasksQueueUpdateOperator(BaseOperator):
         update_mask: Optional[Union[Dict, FieldMask]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -299,7 +299,7 @@ class CloudTasksQueueGetOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -388,7 +388,7 @@ class CloudTasksQueuesListOperator(BaseOperator):
         page_size: Optional[int] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -474,7 +474,7 @@ class CloudTasksQueueDeleteOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -559,7 +559,7 @@ class CloudTasksQueuePurgeOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -645,7 +645,7 @@ class CloudTasksQueuePauseOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -731,7 +731,7 @@ class CloudTasksQueueResumeOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -831,7 +831,7 @@ class CloudTasksTaskCreateOperator(BaseOperator):
         response_view: Optional[Task.View] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -931,7 +931,7 @@ class CloudTasksTaskGetOperator(BaseOperator):
         response_view: Optional[Task.View] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1029,7 +1029,7 @@ class CloudTasksTasksListOperator(BaseOperator):
         page_size: Optional[int] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1121,7 +1121,7 @@ class CloudTasksTaskDeleteOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1216,7 +1216,7 @@ class CloudTasksTaskRunOperator(BaseOperator):
         response_view: Optional[Task.View] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/operators/vision.py b/airflow/providers/google/cloud/operators/vision.py
index 9203f23..514a677 100644
--- a/airflow/providers/google/cloud/operators/vision.py
+++ b/airflow/providers/google/cloud/operators/vision.py
@@ -100,7 +100,7 @@ class CloudVisionCreateProductSetOperator(BaseOperator):
         product_set_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -195,7 +195,7 @@ class CloudVisionGetProductSetOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = 'google_cloud_default',
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -302,7 +302,7 @@ class CloudVisionUpdateProductSetOperator(BaseOperator):
         update_mask: Union[Dict, FieldMask] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = 'google_cloud_default',
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -394,7 +394,7 @@ class CloudVisionDeleteProductSetOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = 'google_cloud_default',
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -493,7 +493,7 @@ class CloudVisionCreateProductOperator(BaseOperator):
         product_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = 'google_cloud_default',
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -591,7 +591,7 @@ class CloudVisionGetProductOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -709,7 +709,7 @@ class CloudVisionUpdateProductOperator(BaseOperator):
         update_mask: Union[Dict, FieldMask] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = 'google_cloud_default',
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -806,7 +806,7 @@ class CloudVisionDeleteProductOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = 'google_cloud_default',
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -980,7 +980,7 @@ class CloudVisionCreateReferenceImageOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = 'google_cloud_default',
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1084,7 +1084,7 @@ class CloudVisionDeleteReferenceImageOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = 'google_cloud_default',
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1182,7 +1182,7 @@ class CloudVisionAddProductToProductSetOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -1274,7 +1274,7 @@ class CloudVisionRemoveProductFromProductSetOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[MetaData] = None,
+        metadata: MetaData = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/operators/workflows.py b/airflow/providers/google/cloud/operators/workflows.py
index 824fb87..a144ad7 100644
--- a/airflow/providers/google/cloud/operators/workflows.py
+++ b/airflow/providers/google/cloud/operators/workflows.py
@@ -73,7 +73,7 @@ class WorkflowsCreateWorkflowOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         force_rerun: bool = False,
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
@@ -182,7 +182,7 @@ class WorkflowsUpdateWorkflowOperator(BaseOperator):
         update_mask: Optional[Union[FieldMask, Dict[str, List[str]]]] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -258,7 +258,7 @@ class WorkflowsDeleteWorkflowOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -329,7 +329,7 @@ class WorkflowsListWorkflowsOperator(BaseOperator):
         order_by: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -395,7 +395,7 @@ class WorkflowsGetWorkflowOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -464,7 +464,7 @@ class WorkflowsCreateExecutionOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -535,7 +535,7 @@ class WorkflowsCancelExecutionOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -609,7 +609,7 @@ class WorkflowsListExecutionsOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
@@ -678,7 +678,7 @@ class WorkflowsGetExecutionOperator(BaseOperator):
         project_id: Optional[str] = None,
         retry: Optional[Retry] = None,
         timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/cloud/sensors/bigquery_dts.py b/airflow/providers/google/cloud/sensors/bigquery_dts.py
index 8a782a4..826c5de 100644
--- a/airflow/providers/google/cloud/sensors/bigquery_dts.py
+++ b/airflow/providers/google/cloud/sensors/bigquery_dts.py
@@ -86,7 +86,7 @@ class BigQueryDataTransferServiceTransferRunSensor(BaseSensorOperator):
         gcp_conn_id: str = "google_cloud_default",
         retry: Optional[Retry] = None,
         request_timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
     ) -> None:
diff --git a/airflow/providers/google/cloud/sensors/workflows.py b/airflow/providers/google/cloud/sensors/workflows.py
index a1162a1..4da0f31 100644
--- a/airflow/providers/google/cloud/sensors/workflows.py
+++ b/airflow/providers/google/cloud/sensors/workflows.py
@@ -66,7 +66,7 @@ class WorkflowExecutionSensor(BaseSensorOperator):
         failure_states: Optional[Set[Execution.State]] = None,
         retry: Optional[Retry] = None,
         request_timeout: Optional[float] = None,
-        metadata: Optional[Sequence[Tuple[str, str]]] = None,
+        metadata: Sequence[Tuple[str, str]] = (),
         gcp_conn_id: str = "google_cloud_default",
         impersonation_chain: Optional[Union[str, Sequence[str]]] = None,
         **kwargs,
diff --git a/airflow/providers/google/common/hooks/base_google.py b/airflow/providers/google/common/hooks/base_google.py
index 96edc99..a149831 100644
--- a/airflow/providers/google/common/hooks/base_google.py
+++ b/airflow/providers/google/common/hooks/base_google.py
@@ -111,6 +111,12 @@ class retry_if_operation_in_progress(tenacity.retry_if_exception):
         super().__init__(is_operation_in_progress_exception)
 
 
+# A fake project_id to use in functions decorated by fallback_to_default_project_id
+# This allows the 'project_id' argument to be of type str instead of Optional[str],
+# making it easier to type hint the function body without dealing with the None
+# case that can never happen at runtime.
+PROVIDE_PROJECT_ID: str = cast(str, None)
+
 T = TypeVar("T", bound=Callable)
 RT = TypeVar('RT')
 
diff --git a/setup.cfg b/setup.cfg
index adba25a..1ed8e88 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -203,6 +203,7 @@ pretty = True
 
 [mypy-airflow.migrations.*]
 ignore_errors = True
+
 [mypy-google.cloud.tasks_v2.*]
 no_implicit_optional = False
 
@@ -224,6 +225,31 @@ no_implicit_optional = False
 [mypy-google.cloud.dataproc_v1.services.cluster_controller.*]
 no_implicit_optional = False
 
+[mypy-google.cloud.bigquery_datatransfer_v1.services.data_transfer_service.*]
+no_implicit_optional = False
+
+[mypy-google.cloud.devtools.cloudbuild_v1.services.cloud_build.*]
+no_implicit_optional = False
+
+[mypy-google.cloud.workflows_v1beta.services.workflows.*]
+no_implicit_optional = False
+
+[mypy-google.cloud.workflows.executions_v1beta.services.executions.*]
+no_implicit_optional = False
+
+[mypy-google.cloud.datacatalog_v1.services.data_catalog.*]
+no_implicit_optional = False
+
+[mypy-google.cloud.redis_v1.services.cloud_redis.*]
+no_implicit_optional = False
+
+[mypy-google.cloud.kms_v1.services.key_management_service.*]
+no_implicit_optional = False
+
+[mypy-google.cloud.oslogin_v1.services.os_login_service.*]
+no_implicit_optional = False
+
+
 [isort]
 line_length=110
 combine_as_imports = true
diff --git a/tests/providers/google/cloud/hooks/test_dlp.py b/tests/providers/google/cloud/hooks/test_dlp.py
index d11db57..f66882d 100644
--- a/tests/providers/google/cloud/hooks/test_dlp.py
+++ b/tests/providers/google/cloud/hooks/test_dlp.py
@@ -79,7 +79,7 @@ class TestCloudDLPHook(unittest.TestCase):
         self.hook.cancel_dlp_job(dlp_job_id=DLP_JOB_ID, project_id=PROJECT_ID)
 
         get_conn.return_value.cancel_dlp_job.assert_called_once_with(
-            name=DLP_JOB_PATH, retry=None, timeout=None, metadata=None
+            name=DLP_JOB_PATH, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -114,7 +114,7 @@ class TestCloudDLPHook(unittest.TestCase):
             template_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -129,7 +129,7 @@ class TestCloudDLPHook(unittest.TestCase):
             template_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -155,7 +155,7 @@ class TestCloudDLPHook(unittest.TestCase):
             job_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -178,7 +178,7 @@ class TestCloudDLPHook(unittest.TestCase):
         self.hook.create_dlp_job(project_id=PROJECT_ID)
 
         get_conn.return_value.get_dlp_job.assert_called_once_with(
-            name=DLP_JOB_PATH, retry=None, timeout=None, metadata=None
+            name=DLP_JOB_PATH, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch(
@@ -198,7 +198,7 @@ class TestCloudDLPHook(unittest.TestCase):
             template_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -213,7 +213,7 @@ class TestCloudDLPHook(unittest.TestCase):
             template_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -238,7 +238,7 @@ class TestCloudDLPHook(unittest.TestCase):
             trigger_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -268,7 +268,7 @@ class TestCloudDLPHook(unittest.TestCase):
             stored_info_type_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -283,7 +283,7 @@ class TestCloudDLPHook(unittest.TestCase):
             stored_info_type_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -311,7 +311,7 @@ class TestCloudDLPHook(unittest.TestCase):
             deidentify_template_name=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -337,7 +337,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=DEIDENTIFY_TEMPLATE_ORGANIZATION_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -348,7 +348,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=DEIDENTIFY_TEMPLATE_PROJECT_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -371,7 +371,7 @@ class TestCloudDLPHook(unittest.TestCase):
         self.hook.delete_dlp_job(dlp_job_id=DLP_JOB_ID, project_id=PROJECT_ID)
 
         get_conn.return_value.delete_dlp_job.assert_called_once_with(
-            name=DLP_JOB_PATH, retry=None, timeout=None, metadata=None
+            name=DLP_JOB_PATH, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -402,7 +402,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=INSPECT_TEMPLATE_ORGANIZATION_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -413,7 +413,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=INSPECT_TEMPLATE_PROJECT_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -436,7 +436,7 @@ class TestCloudDLPHook(unittest.TestCase):
         self.hook.delete_job_trigger(job_trigger_id=TRIGGER_ID, project_id=PROJECT_ID)
 
         get_conn.return_value.delete_job_trigger.assert_called_once_with(
-            name=JOB_TRIGGER_PATH, retry=None, timeout=None, metadata=None
+            name=JOB_TRIGGER_PATH, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -469,7 +469,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=STORED_INFO_TYPE_ORGANIZATION_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -480,7 +480,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=STORED_INFO_TYPE_PROJECT_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -513,7 +513,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=DEIDENTIFY_TEMPLATE_ORGANIZATION_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -526,7 +526,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=DEIDENTIFY_TEMPLATE_PROJECT_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -551,7 +551,7 @@ class TestCloudDLPHook(unittest.TestCase):
 
         assert result is API_RESPONSE
         get_conn.return_value.get_dlp_job.assert_called_once_with(
-            name=DLP_JOB_PATH, retry=None, timeout=None, metadata=None
+            name=DLP_JOB_PATH, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -584,7 +584,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=INSPECT_TEMPLATE_ORGANIZATION_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -597,7 +597,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=INSPECT_TEMPLATE_PROJECT_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -622,7 +622,7 @@ class TestCloudDLPHook(unittest.TestCase):
 
         assert result is API_RESPONSE
         get_conn.return_value.get_job_trigger.assert_called_once_with(
-            name=JOB_TRIGGER_PATH, retry=None, timeout=None, metadata=None
+            name=JOB_TRIGGER_PATH, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -657,7 +657,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=STORED_INFO_TYPE_ORGANIZATION_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -672,7 +672,7 @@ class TestCloudDLPHook(unittest.TestCase):
             name=STORED_INFO_TYPE_PROJECT_PATH,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -703,7 +703,7 @@ class TestCloudDLPHook(unittest.TestCase):
             inspect_template_name=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -732,7 +732,7 @@ class TestCloudDLPHook(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -746,7 +746,7 @@ class TestCloudDLPHook(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -772,7 +772,7 @@ class TestCloudDLPHook(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -792,7 +792,7 @@ class TestCloudDLPHook(unittest.TestCase):
 
         assert result is API_RESPONSE
         get_conn.return_value.list_info_types.assert_called_once_with(
-            language_code=None, filter_=None, retry=None, timeout=None, metadata=None
+            language_code=None, filter_=None, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch(
@@ -811,7 +811,7 @@ class TestCloudDLPHook(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -825,7 +825,7 @@ class TestCloudDLPHook(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -850,7 +850,7 @@ class TestCloudDLPHook(unittest.TestCase):
             filter_=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -879,7 +879,7 @@ class TestCloudDLPHook(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -893,7 +893,7 @@ class TestCloudDLPHook(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -920,7 +920,7 @@ class TestCloudDLPHook(unittest.TestCase):
             byte_item=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -948,7 +948,7 @@ class TestCloudDLPHook(unittest.TestCase):
             reidentify_template_name=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -980,7 +980,7 @@ class TestCloudDLPHook(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -995,7 +995,7 @@ class TestCloudDLPHook(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -1030,7 +1030,7 @@ class TestCloudDLPHook(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -1045,7 +1045,7 @@ class TestCloudDLPHook(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -1075,7 +1075,7 @@ class TestCloudDLPHook(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -1112,7 +1112,7 @@ class TestCloudDLPHook(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
@@ -1129,7 +1129,7 @@ class TestCloudDLPHook(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.dlp.CloudDLPHook.get_conn")
diff --git a/tests/providers/google/cloud/hooks/test_natural_language.py b/tests/providers/google/cloud/hooks/test_natural_language.py
index 10efef9..a867199 100644
--- a/tests/providers/google/cloud/hooks/test_natural_language.py
+++ b/tests/providers/google/cloud/hooks/test_natural_language.py
@@ -66,7 +66,7 @@ class TestCloudNaturalLanguageHook(unittest.TestCase):
         assert result == API_RESPONSE
 
         get_conn.return_value.analyze_entities.assert_called_once_with(
-            document=DOCUMENT, encoding_type=ENCODING_TYPE, retry=None, timeout=None, metadata=None
+            document=DOCUMENT, encoding_type=ENCODING_TYPE, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch(
@@ -79,7 +79,7 @@ class TestCloudNaturalLanguageHook(unittest.TestCase):
         assert result == API_RESPONSE
 
         get_conn.return_value.analyze_entity_sentiment.assert_called_once_with(
-            document=DOCUMENT, encoding_type=ENCODING_TYPE, retry=None, timeout=None, metadata=None
+            document=DOCUMENT, encoding_type=ENCODING_TYPE, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch(
@@ -92,7 +92,7 @@ class TestCloudNaturalLanguageHook(unittest.TestCase):
         assert result == API_RESPONSE
 
         get_conn.return_value.analyze_sentiment.assert_called_once_with(
-            document=DOCUMENT, encoding_type=ENCODING_TYPE, retry=None, timeout=None, metadata=None
+            document=DOCUMENT, encoding_type=ENCODING_TYPE, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch(
@@ -105,7 +105,7 @@ class TestCloudNaturalLanguageHook(unittest.TestCase):
         assert result == API_RESPONSE
 
         get_conn.return_value.analyze_syntax.assert_called_once_with(
-            document=DOCUMENT, encoding_type=ENCODING_TYPE, retry=None, timeout=None, metadata=None
+            document=DOCUMENT, encoding_type=ENCODING_TYPE, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch(
@@ -123,7 +123,7 @@ class TestCloudNaturalLanguageHook(unittest.TestCase):
             features=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -136,5 +136,5 @@ class TestCloudNaturalLanguageHook(unittest.TestCase):
         assert result == API_RESPONSE
 
         get_conn.return_value.classify_text.assert_called_once_with(
-            document=DOCUMENT, retry=None, timeout=None, metadata=None
+            document=DOCUMENT, retry=None, timeout=None, metadata=()
         )
diff --git a/tests/providers/google/cloud/hooks/test_video_intelligence.py b/tests/providers/google/cloud/hooks/test_video_intelligence.py
index 4715ac1..b357aa0 100644
--- a/tests/providers/google/cloud/hooks/test_video_intelligence.py
+++ b/tests/providers/google/cloud/hooks/test_video_intelligence.py
@@ -76,7 +76,7 @@ class TestCloudVideoIntelligenceHook(unittest.TestCase):
             location_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.hooks.video_intelligence.CloudVideoIntelligenceHook.get_conn")
@@ -99,5 +99,5 @@ class TestCloudVideoIntelligenceHook(unittest.TestCase):
             location_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
diff --git a/tests/providers/google/cloud/hooks/test_vision.py b/tests/providers/google/cloud/hooks/test_vision.py
index 5b68250..434b407 100644
--- a/tests/providers/google/cloud/hooks/test_vision.py
+++ b/tests/providers/google/cloud/hooks/test_vision.py
@@ -108,7 +108,7 @@ class TestGcpVisionHook(unittest.TestCase):
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
         # Then
@@ -120,7 +120,7 @@ class TestGcpVisionHook(unittest.TestCase):
             product_set_id=PRODUCTSET_ID_TEST,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
@@ -148,7 +148,7 @@ class TestGcpVisionHook(unittest.TestCase):
             product_set_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
@@ -168,7 +168,7 @@ class TestGcpVisionHook(unittest.TestCase):
                 project_id=PROJECT_ID_TEST,
                 retry=None,
                 timeout=None,
-                metadata=None,
+                metadata=(),
             )
         # Then
         # API response was wrong (None) and thus ProductSet ID extraction should fail.
@@ -180,7 +180,7 @@ class TestGcpVisionHook(unittest.TestCase):
             product_set_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
@@ -197,7 +197,7 @@ class TestGcpVisionHook(unittest.TestCase):
         # Then
         assert response
         assert response == MessageToDict(response_product_set)
-        get_product_set_method.assert_called_once_with(name=name, retry=None, timeout=None, metadata=None)
+        get_product_set_method.assert_called_once_with(name=name, retry=None, timeout=None, metadata=())
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
     def test_update_productset_no_explicit_name(self, get_conn):
@@ -217,13 +217,13 @@ class TestGcpVisionHook(unittest.TestCase):
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
         # Then
         assert result == MessageToDict(product_set)
         update_product_set_method.assert_called_once_with(
             product_set=ProductSet(name=productset_name),
-            metadata=None,
+            metadata=(),
             retry=None,
             timeout=None,
             update_mask=None,
@@ -248,7 +248,7 @@ class TestGcpVisionHook(unittest.TestCase):
                 project_id=PROJECT_ID_TEST,
                 retry=None,
                 timeout=None,
-                metadata=None,
+                metadata=(),
             )
         err = ctx.value
         assert err
@@ -276,13 +276,13 @@ class TestGcpVisionHook(unittest.TestCase):
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
         # Then
         assert result == MessageToDict(product_set)
         update_product_set_method.assert_called_once_with(
             product_set=ProductSet(name=explicit_ps_name),
-            metadata=None,
+            metadata=(),
             retry=None,
             timeout=None,
             update_mask=None,
@@ -313,7 +313,7 @@ class TestGcpVisionHook(unittest.TestCase):
                 project_id=PROJECT_ID_TEST,
                 retry=None,
                 timeout=None,
-                metadata=None,
+                metadata=(),
             )
         err = ctx.value
         # self.assertIn("The required parameter 'project_id' is missing", str(err))
@@ -341,7 +341,7 @@ class TestGcpVisionHook(unittest.TestCase):
         )
         # Then
         assert response is None
-        delete_product_set_method.assert_called_once_with(name=name, retry=None, timeout=None, metadata=None)
+        delete_product_set_method.assert_called_once_with(name=name, retry=None, timeout=None, metadata=())
 
     @mock.patch(
         'airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn',
@@ -368,7 +368,7 @@ class TestGcpVisionHook(unittest.TestCase):
             reference_image_id=REFERENCE_IMAGE_ID_TEST,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -396,7 +396,7 @@ class TestGcpVisionHook(unittest.TestCase):
             reference_image_id=REFERENCE_IMAGE_ID_TEST,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
@@ -414,7 +414,7 @@ class TestGcpVisionHook(unittest.TestCase):
         # Then
         # Product ID was provided explicitly in the method call above, should be returned from the method
         add_product_to_product_set_method.assert_called_once_with(
-            name=PRODUCTSET_NAME_TEST, product=PRODUCT_NAME_TEST, retry=None, timeout=None, metadata=None
+            name=PRODUCTSET_NAME_TEST, product=PRODUCT_NAME_TEST, retry=None, timeout=None, metadata=()
         )
 
     # remove_product_from_product_set
@@ -433,7 +433,7 @@ class TestGcpVisionHook(unittest.TestCase):
         # Then
         # Product ID was provided explicitly in the method call above, should be returned from the method
         remove_product_from_product_set_method.assert_called_once_with(
-            name=PRODUCTSET_NAME_TEST, product=PRODUCT_NAME_TEST, retry=None, timeout=None, metadata=None
+            name=PRODUCTSET_NAME_TEST, product=PRODUCT_NAME_TEST, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.annotator_client')
@@ -482,7 +482,7 @@ class TestGcpVisionHook(unittest.TestCase):
             product_id=PRODUCT_ID_TEST,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
@@ -505,7 +505,7 @@ class TestGcpVisionHook(unittest.TestCase):
         # and returned.
         assert result == autogenerated_id
         create_product_method.assert_called_once_with(
-            parent=parent, product=product, product_id=None, retry=None, timeout=None, metadata=None
+            parent=parent, product=product, product_id=None, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
@@ -527,7 +527,7 @@ class TestGcpVisionHook(unittest.TestCase):
         err = ctx.value
         assert 'Unable to get id from name' in str(err)
         create_product_method.assert_called_once_with(
-            parent=parent, product=product, product_id=None, retry=None, timeout=None, metadata=None
+            parent=parent, product=product, product_id=None, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
@@ -548,7 +548,7 @@ class TestGcpVisionHook(unittest.TestCase):
         err = ctx.value
         assert 'Unable to get name from response...' in str(err)
         create_product_method.assert_called_once_with(
-            parent=parent, product=product, product_id=None, retry=None, timeout=None, metadata=None
+            parent=parent, product=product, product_id=None, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
@@ -567,12 +567,12 @@ class TestGcpVisionHook(unittest.TestCase):
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
         # Then
         assert result == MessageToDict(product)
         update_product_method.assert_called_once_with(
-            product=Product(name=product_name), metadata=None, retry=None, timeout=None, update_mask=None
+            product=Product(name=product_name), metadata=(), retry=None, timeout=None, update_mask=None
         )
 
     @parameterized.expand([(None, None), (None, PRODUCT_ID_TEST), (LOC_ID_TEST, None)])
@@ -594,7 +594,7 @@ class TestGcpVisionHook(unittest.TestCase):
                 project_id=PROJECT_ID_TEST,
                 retry=None,
                 timeout=None,
-                metadata=None,
+                metadata=(),
             )
         err = ctx.value
         assert err
@@ -622,12 +622,12 @@ class TestGcpVisionHook(unittest.TestCase):
             project_id=PROJECT_ID_TEST,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
         # Then
         assert result == MessageToDict(product)
         update_product_method.assert_called_once_with(
-            product=Product(name=explicit_p_name), metadata=None, retry=None, timeout=None, update_mask=None
+            product=Product(name=explicit_p_name), metadata=(), retry=None, timeout=None, update_mask=None
         )
 
     @mock.patch('airflow.providers.google.cloud.hooks.vision.CloudVisionHook.get_conn')
@@ -653,7 +653,7 @@ class TestGcpVisionHook(unittest.TestCase):
                 project_id=PROJECT_ID_TEST,
                 retry=None,
                 timeout=None,
-                metadata=None,
+                metadata=(),
             )
         err = ctx.value
         assert err
@@ -680,7 +680,7 @@ class TestGcpVisionHook(unittest.TestCase):
         )
         # Then
         assert response is None
-        delete_product_method.assert_called_once_with(name=name, retry=None, timeout=None, metadata=None)
+        delete_product_method.assert_called_once_with(name=name, retry=None, timeout=None, metadata=())
 
     @mock.patch("airflow.providers.google.cloud.hooks.vision.CloudVisionHook.annotator_client")
     def test_detect_text(self, annotator_client_mock):
diff --git a/airflow/providers/google/__init__.py b/tests/providers/google/cloud/operators/source/__init__.py
similarity index 51%
copy from airflow/providers/google/__init__.py
copy to tests/providers/google/cloud/operators/source/__init__.py
index dc2ff2a..13a8339 100644
--- a/airflow/providers/google/__init__.py
+++ b/tests/providers/google/cloud/operators/source/__init__.py
@@ -14,25 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-import importlib
-import logging
-
-# HACK:
-# Sphinx-autoapi doesn't like imports to excluded packages in the main module.
-conf = importlib.import_module('airflow.configuration').conf
-
-PROVIDERS_GOOGLE_VERBOSE_LOGGING: bool = conf.getboolean(
-    'providers_google', 'VERBOSE_LOGGING', fallback=False
-)
-if PROVIDERS_GOOGLE_VERBOSE_LOGGING:
-    for logger_name in ["google_auth_httplib2", "httplib2", "googleapiclient"]:
-        logger = logging.getLogger(logger_name)
-        logger.handlers += [
-            handler for handler in logging.getLogger().handlers if handler.name in ["task", "console"]
-        ]
-        logger.level = logging.DEBUG
-        logger.propagate = False
-
-    import httplib2
-
-    httplib2.debuglevel = 4
diff --git a/airflow/providers/google/__init__.py b/tests/providers/google/cloud/operators/source/source_prefix/__init__.py
similarity index 51%
copy from airflow/providers/google/__init__.py
copy to tests/providers/google/cloud/operators/source/source_prefix/__init__.py
index dc2ff2a..13a8339 100644
--- a/airflow/providers/google/__init__.py
+++ b/tests/providers/google/cloud/operators/source/source_prefix/__init__.py
@@ -14,25 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-import importlib
-import logging
-
-# HACK:
-# Sphinx-autoapi doesn't like imports to excluded packages in the main module.
-conf = importlib.import_module('airflow.configuration').conf
-
-PROVIDERS_GOOGLE_VERBOSE_LOGGING: bool = conf.getboolean(
-    'providers_google', 'VERBOSE_LOGGING', fallback=False
-)
-if PROVIDERS_GOOGLE_VERBOSE_LOGGING:
-    for logger_name in ["google_auth_httplib2", "httplib2", "googleapiclient"]:
-        logger = logging.getLogger(logger_name)
-        logger.handlers += [
-            handler for handler in logging.getLogger().handlers if handler.name in ["task", "console"]
-        ]
-        logger.level = logging.DEBUG
-        logger.propagate = False
-
-    import httplib2
-
-    httplib2.debuglevel = 4
diff --git a/tests/providers/google/cloud/operators/test_automl.py b/tests/providers/google/cloud/operators/test_automl.py
index bcbacac..fa5db10 100644
--- a/tests/providers/google/cloud/operators/test_automl.py
+++ b/tests/providers/google/cloud/operators/test_automl.py
@@ -84,7 +84,7 @@ class TestAutoMLTrainModelOperator(unittest.TestCase):
             project_id=GCP_PROJECT_ID,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
         mock_xcom.assert_called_once_with(None, key="model_id", value=MODEL_ID)
 
@@ -108,7 +108,7 @@ class TestAutoMLBatchPredictOperator(unittest.TestCase):
         mock_hook.return_value.batch_predict.assert_called_once_with(
             input_config=INPUT_CONFIG,
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             model_id=MODEL_ID,
             output_config=OUTPUT_CONFIG,
             params={},
@@ -134,7 +134,7 @@ class TestAutoMLPredictOperator(unittest.TestCase):
         op.execute(context=None)
         mock_hook.return_value.predict.assert_called_once_with(
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             model_id=MODEL_ID,
             params={"TEST_KEY": "TEST_VALUE"},
             payload=PAYLOAD,
@@ -161,7 +161,7 @@ class TestAutoMLCreateImportOperator(unittest.TestCase):
         mock_hook.return_value.create_dataset.assert_called_once_with(
             dataset=DATASET,
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             project_id=GCP_PROJECT_ID,
             retry=None,
             timeout=None,
@@ -192,7 +192,7 @@ class TestAutoMLListColumnsSpecsOperator(unittest.TestCase):
             field_mask=MASK,
             filter_=filter_,
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             page_size=page_size,
             project_id=GCP_PROJECT_ID,
             retry=None,
@@ -218,7 +218,7 @@ class TestAutoMLUpdateDatasetOperator(unittest.TestCase):
         op.execute(context=None)
         mock_hook.return_value.update_dataset.assert_called_once_with(
             dataset=dataset,
-            metadata=None,
+            metadata=(),
             retry=None,
             timeout=None,
             update_mask=MASK,
@@ -240,7 +240,7 @@ class TestAutoMLGetModelOperator(unittest.TestCase):
         op.execute(context=None)
         mock_hook.return_value.get_model.assert_called_once_with(
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             model_id=MODEL_ID,
             project_id=GCP_PROJECT_ID,
             retry=None,
@@ -260,7 +260,7 @@ class TestAutoMLDeleteModelOperator(unittest.TestCase):
         op.execute(context=None)
         mock_hook.return_value.delete_model.assert_called_once_with(
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             model_id=MODEL_ID,
             project_id=GCP_PROJECT_ID,
             retry=None,
@@ -283,7 +283,7 @@ class TestAutoMLDeployModelOperator(unittest.TestCase):
         mock_hook.return_value.deploy_model.assert_called_once_with(
             image_detection_metadata={},
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             model_id=MODEL_ID,
             project_id=GCP_PROJECT_ID,
             retry=None,
@@ -305,7 +305,7 @@ class TestAutoMLDatasetImportOperator(unittest.TestCase):
         mock_hook.return_value.import_data.assert_called_once_with(
             input_config=INPUT_CONFIG,
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             dataset_id=DATASET_ID,
             project_id=GCP_PROJECT_ID,
             retry=None,
@@ -332,7 +332,7 @@ class TestAutoMLTablesListTableSpecsOperator(unittest.TestCase):
             dataset_id=DATASET_ID,
             filter_=filter_,
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             page_size=page_size,
             project_id=GCP_PROJECT_ID,
             retry=None,
@@ -348,7 +348,7 @@ class TestAutoMLDatasetListOperator(unittest.TestCase):
         op.execute(context=None)
         mock_hook.return_value.list_datasets.assert_called_once_with(
             location=GCP_LOCATION,
-            metadata=None,
+            metadata=(),
             project_id=GCP_PROJECT_ID,
             retry=None,
             timeout=None,
@@ -369,7 +369,7 @@ class TestAutoMLDatasetDeleteOperator(unittest.TestCase):
         mock_hook.return_value.delete_dataset.assert_called_once_with(
             location=GCP_LOCATION,
             dataset_id=DATASET_ID,
-            metadata=None,
+            metadata=(),
             project_id=GCP_PROJECT_ID,
             retry=None,
             timeout=None,
diff --git a/tests/providers/google/cloud/operators/test_bigquery_dts.py b/tests/providers/google/cloud/operators/test_bigquery_dts.py
index d6071fa..08d7782 100644
--- a/tests/providers/google/cloud/operators/test_bigquery_dts.py
+++ b/tests/providers/google/cloud/operators/test_bigquery_dts.py
@@ -60,7 +60,7 @@ class BigQueryCreateDataTransferOperatorTestCase(unittest.TestCase):
 
         mock_hook.return_value.create_transfer_config.assert_called_once_with(
             authorization_code=None,
-            metadata=None,
+            metadata=(),
             transfer_config=TRANSFER_CONFIG,
             project_id=PROJECT_ID,
             retry=None,
@@ -77,7 +77,7 @@ class BigQueryDeleteDataTransferConfigOperatorTestCase(unittest.TestCase):
         )
         op.execute(None)
         mock_hook.return_value.delete_transfer_config.assert_called_once_with(
-            metadata=None,
+            metadata=(),
             transfer_config_id=TRANSFER_CONFIG_ID,
             project_id=PROJECT_ID,
             retry=None,
@@ -107,7 +107,7 @@ class BigQueryDataTransferServiceStartTransferRunsOperatorTestCase(unittest.Test
             project_id=PROJECT_ID,
             requested_time_range=None,
             requested_run_time=None,
-            metadata=None,
+            metadata=(),
             retry=None,
             timeout=None,
         )
diff --git a/tests/providers/google/cloud/operators/test_cloud_build.py b/tests/providers/google/cloud/operators/test_cloud_build.py
index a74217e..4908c14 100644
--- a/tests/providers/google/cloud/operators/test_cloud_build.py
+++ b/tests/providers/google/cloud/operators/test_cloud_build.py
@@ -72,7 +72,7 @@ class TestCloudBuildOperator(TestCase):
         operator.execute(context=None)
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=None)
         mock_hook.return_value.cancel_build.assert_called_once_with(
-            id_=TRIGGER_ID, project_id=None, retry=None, timeout=None, metadata=None
+            id_=TRIGGER_ID, project_id=None, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -83,7 +83,7 @@ class TestCloudBuildOperator(TestCase):
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=None)
         build = Build(BUILD)
         mock_hook.return_value.create_build.assert_called_once_with(
-            build=build, project_id=None, wait=True, retry=None, timeout=None, metadata=None
+            build=build, project_id=None, wait=True, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -94,7 +94,7 @@ class TestCloudBuildOperator(TestCase):
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=None)
         build = Build(BUILD)
         mock_hook.return_value.create_build.assert_called_once_with(
-            build=build, project_id=None, wait=True, retry=None, timeout=None, metadata=None
+            build=build, project_id=None, wait=True, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -138,7 +138,7 @@ class TestCloudBuildOperator(TestCase):
         operator.execute(context=None)
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=None)
         mock_hook.return_value.create_build_trigger.assert_called_once_with(
-            trigger=BUILD_TRIGGER, project_id=None, retry=None, timeout=None, metadata=None
+            trigger=BUILD_TRIGGER, project_id=None, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -148,7 +148,7 @@ class TestCloudBuildOperator(TestCase):
         operator.execute(context=None)
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=None)
         mock_hook.return_value.delete_build_trigger.assert_called_once_with(
-            trigger_id=TRIGGER_ID, project_id=None, retry=None, timeout=None, metadata=None
+            trigger_id=TRIGGER_ID, project_id=None, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -158,7 +158,7 @@ class TestCloudBuildOperator(TestCase):
         operator.execute(context=None)
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=None)
         mock_hook.return_value.get_build.assert_called_once_with(
-            id_=BUILD_ID, project_id=None, retry=None, timeout=None, metadata=None
+            id_=BUILD_ID, project_id=None, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -168,7 +168,7 @@ class TestCloudBuildOperator(TestCase):
         operator.execute(context=None)
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=None)
         mock_hook.return_value.get_build_trigger.assert_called_once_with(
-            trigger_id=TRIGGER_ID, project_id=None, retry=None, timeout=None, metadata=None
+            trigger_id=TRIGGER_ID, project_id=None, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -184,7 +184,7 @@ class TestCloudBuildOperator(TestCase):
             page_token=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -200,7 +200,7 @@ class TestCloudBuildOperator(TestCase):
             filter_=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -210,7 +210,7 @@ class TestCloudBuildOperator(TestCase):
         operator.execute(context=None)
         mock_hook.assert_called_once_with(gcp_conn_id=GCP_CONN_ID, impersonation_chain=None)
         mock_hook.return_value.retry_build.assert_called_once_with(
-            id_=BUILD_ID, project_id=None, wait=True, retry=None, timeout=None, metadata=None
+            id_=BUILD_ID, project_id=None, wait=True, retry=None, timeout=None, metadata=()
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -226,7 +226,7 @@ class TestCloudBuildOperator(TestCase):
             wait=True,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch("airflow.providers.google.cloud.operators.cloud_build.CloudBuildHook")
@@ -243,7 +243,7 @@ class TestCloudBuildOperator(TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
diff --git a/tests/providers/google/cloud/operators/test_dlp.py b/tests/providers/google/cloud/operators/test_dlp.py
index a0a5dba..4b6061c 100644
--- a/tests/providers/google/cloud/operators/test_dlp.py
+++ b/tests/providers/google/cloud/operators/test_dlp.py
@@ -81,7 +81,7 @@ class TestCloudDLPCancelDLPJobOperator(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -102,7 +102,7 @@ class TestCloudDLPCreateDeidentifyTemplateOperator(unittest.TestCase):
             template_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -123,7 +123,7 @@ class TestCloudDLPCreateDLPJobOperator(unittest.TestCase):
             job_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
             wait_until_finished=True,
         )
 
@@ -145,7 +145,7 @@ class TestCloudDLPCreateInspectTemplateOperator(unittest.TestCase):
             template_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -165,7 +165,7 @@ class TestCloudDLPCreateJobTriggerOperator(unittest.TestCase):
             trigger_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -186,7 +186,7 @@ class TestCloudDLPCreateStoredInfoTypeOperator(unittest.TestCase):
             stored_info_type_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -209,7 +209,7 @@ class TestCloudDLPDeidentifyContentOperator(unittest.TestCase):
             deidentify_template_name=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -231,7 +231,7 @@ class TestCloudDLPDeleteDeidentifyTemplateOperator(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -250,7 +250,7 @@ class TestCloudDLPDeleteDlpJobOperator(unittest.TestCase):
             project_id=PROJECT_ID,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -272,7 +272,7 @@ class TestCloudDLPDeleteInspectTemplateOperator(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -293,7 +293,7 @@ class TestCloudDLPDeleteJobTriggerOperator(unittest.TestCase):
             project_id=PROJECT_ID,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -317,7 +317,7 @@ class TestCloudDLPDeleteStoredInfoTypeOperator(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -339,7 +339,7 @@ class TestCloudDLPGetDeidentifyTemplateOperator(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -358,7 +358,7 @@ class TestCloudDLPGetDlpJobOperator(unittest.TestCase):
             project_id=PROJECT_ID,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -380,7 +380,7 @@ class TestCloudDLPGetInspectTemplateOperator(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -401,7 +401,7 @@ class TestCloudDLPGetJobTripperOperator(unittest.TestCase):
             project_id=PROJECT_ID,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -425,7 +425,7 @@ class TestCloudDLPGetStoredInfoTypeOperator(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -446,7 +446,7 @@ class TestCloudDLPInspectContentOperator(unittest.TestCase):
             inspect_template_name=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -467,7 +467,7 @@ class TestCloudDLPListDeidentifyTemplatesOperator(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -489,7 +489,7 @@ class TestCloudDLPListDlpJobsOperator(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -508,7 +508,7 @@ class TestCloudDLPListInfoTypesOperator(unittest.TestCase):
             results_filter=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -529,7 +529,7 @@ class TestCloudDLPListInspectTemplatesOperator(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -550,7 +550,7 @@ class TestCloudDLPListJobTriggersOperator(unittest.TestCase):
             results_filter=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -571,7 +571,7 @@ class TestCloudDLPListStoredInfoTypesOperator(unittest.TestCase):
             order_by=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -593,7 +593,7 @@ class TestCloudDLPRedactImageOperator(unittest.TestCase):
             byte_item=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -616,7 +616,7 @@ class TestCloudDLPReidentifyContentOperator(unittest.TestCase):
             reidentify_template_name=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -640,7 +640,7 @@ class TestCloudDLPUpdateDeidentifyTemplateOperator(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -664,7 +664,7 @@ class TestCloudDLPUpdateInspectTemplateOperator(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -685,7 +685,7 @@ class TestCloudDLPUpdateJobTriggerOperator(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -711,5 +711,5 @@ class TestCloudDLPUpdateStoredInfoTypeOperator(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
diff --git a/tests/providers/google/cloud/operators/test_pubsub.py b/tests/providers/google/cloud/operators/test_pubsub.py
index a8bc046..7e2370c 100644
--- a/tests/providers/google/cloud/operators/test_pubsub.py
+++ b/tests/providers/google/cloud/operators/test_pubsub.py
@@ -59,7 +59,7 @@ class TestPubSubTopicCreateOperator(unittest.TestCase):
             kms_key_name=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch('airflow.providers.google.cloud.operators.pubsub.PubSubHook')
@@ -78,7 +78,7 @@ class TestPubSubTopicCreateOperator(unittest.TestCase):
             kms_key_name=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -94,7 +94,7 @@ class TestPubSubTopicDeleteOperator(unittest.TestCase):
             fail_if_not_exists=False,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -124,7 +124,7 @@ class TestPubSubSubscriptionCreateOperator(unittest.TestCase):
             retry_policy=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
         assert response == TEST_SUBSCRIPTION
 
@@ -158,7 +158,7 @@ class TestPubSubSubscriptionCreateOperator(unittest.TestCase):
             retry_policy=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
         assert response == TEST_SUBSCRIPTION
 
@@ -187,7 +187,7 @@ class TestPubSubSubscriptionCreateOperator(unittest.TestCase):
             retry_policy=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
         assert response == TEST_SUBSCRIPTION
 
@@ -206,7 +206,7 @@ class TestPubSubSubscriptionDeleteOperator(unittest.TestCase):
             fail_if_not_exists=False,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
diff --git a/tests/providers/google/cloud/operators/test_tasks.py b/tests/providers/google/cloud/operators/test_tasks.py
index 585e261..b0e8e66 100644
--- a/tests/providers/google/cloud/operators/test_tasks.py
+++ b/tests/providers/google/cloud/operators/test_tasks.py
@@ -69,7 +69,7 @@ class TestCloudTasksQueueCreate(unittest.TestCase):
             queue_name=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -94,7 +94,7 @@ class TestCloudTasksQueueUpdate(unittest.TestCase):
             update_mask=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -117,7 +117,7 @@ class TestCloudTasksQueueGet(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -141,7 +141,7 @@ class TestCloudTasksQueuesList(unittest.TestCase):
             page_size=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -163,7 +163,7 @@ class TestCloudTasksQueueDelete(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -186,7 +186,7 @@ class TestCloudTasksQueuePurge(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -209,7 +209,7 @@ class TestCloudTasksQueuePause(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -232,7 +232,7 @@ class TestCloudTasksQueueResume(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -266,7 +266,7 @@ class TestCloudTasksTaskCreate(unittest.TestCase):
             response_view=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -299,7 +299,7 @@ class TestCloudTasksTaskGet(unittest.TestCase):
             response_view=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -337,7 +337,7 @@ class TestCloudTasksTasksList(unittest.TestCase):
             page_size=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -362,7 +362,7 @@ class TestCloudTasksTaskDelete(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -395,5 +395,5 @@ class TestCloudTasksTaskRun(unittest.TestCase):
             response_view=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
diff --git a/tests/providers/google/cloud/operators/test_vision.py b/tests/providers/google/cloud/operators/test_vision.py
index aebd3d6..3c256fe 100644
--- a/tests/providers/google/cloud/operators/test_vision.py
+++ b/tests/providers/google/cloud/operators/test_vision.py
@@ -77,7 +77,7 @@ class TestCloudVisionProductSetCreate(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch('airflow.providers.google.cloud.operators.vision.CloudVisionHook')
@@ -114,7 +114,7 @@ class TestCloudVisionProductSetUpdate(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
             update_mask=None,
         )
 
@@ -137,7 +137,7 @@ class TestCloudVisionProductSetGet(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -159,7 +159,7 @@ class TestCloudVisionProductSetDelete(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -180,7 +180,7 @@ class TestCloudVisionProductCreate(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch('airflow.providers.google.cloud.operators.vision.CloudVisionHook')
@@ -214,7 +214,7 @@ class TestCloudVisionProductGet(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -235,7 +235,7 @@ class TestCloudVisionProductUpdate(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
             update_mask=None,
         )
 
@@ -258,7 +258,7 @@ class TestCloudVisionProductDelete(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -287,7 +287,7 @@ class TestCloudVisionReferenceImageCreate(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
     @mock.patch(
@@ -315,7 +315,7 @@ class TestCloudVisionReferenceImageCreate(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -343,7 +343,7 @@ class TestCloudVisionReferenceImageDelete(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -368,7 +368,7 @@ class TestCloudVisionAddProductToProductSetOperator(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
@@ -393,7 +393,7 @@ class TestCloudVisionRemoveProductFromProductSetOperator(unittest.TestCase):
             project_id=None,
             retry=None,
             timeout=None,
-            metadata=None,
+            metadata=(),
         )
 
 
diff --git a/tests/providers/google/cloud/sensors/test_bigquery_dts.py b/tests/providers/google/cloud/sensors/test_bigquery_dts.py
index b121bfb..cfc7a73 100644
--- a/tests/providers/google/cloud/sensors/test_bigquery_dts.py
+++ b/tests/providers/google/cloud/sensors/test_bigquery_dts.py
@@ -49,7 +49,7 @@ class TestBigQueryDataTransferServiceTransferRunSensor(unittest.TestCase):
             transfer_config_id=TRANSFER_CONFIG_ID,
             run_id=RUN_ID,
             project_id=PROJECT_ID,
-            metadata=None,
+            metadata=(),
             retry=None,
             timeout=None,
         )
@@ -73,7 +73,7 @@ class TestBigQueryDataTransferServiceTransferRunSensor(unittest.TestCase):
             transfer_config_id=TRANSFER_CONFIG_ID,
             run_id=RUN_ID,
             project_id=PROJECT_ID,
-            metadata=None,
+            metadata=(),
             retry=None,
             timeout=None,
         )
diff --git a/tests/providers/google/cloud/transfers/temp-file b/tests/providers/google/cloud/transfers/temp-file
new file mode 100644
index 0000000..d2282fc
Binary files /dev/null and b/tests/providers/google/cloud/transfers/temp-file differ