apache-airflow-providers-google 10.7.0__py3-none-any.whl → 10.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. airflow/providers/google/__init__.py +1 -1
  2. airflow/providers/google/ads/hooks/ads.py +10 -6
  3. airflow/providers/google/cloud/_internal_client/secret_manager_client.py +4 -1
  4. airflow/providers/google/cloud/example_dags/example_cloud_sql_query.py +31 -34
  5. airflow/providers/google/cloud/hooks/automl.py +11 -9
  6. airflow/providers/google/cloud/hooks/bigquery.py +30 -36
  7. airflow/providers/google/cloud/hooks/bigquery_dts.py +5 -3
  8. airflow/providers/google/cloud/hooks/bigtable.py +11 -8
  9. airflow/providers/google/cloud/hooks/cloud_batch.py +5 -3
  10. airflow/providers/google/cloud/hooks/cloud_build.py +6 -4
  11. airflow/providers/google/cloud/hooks/cloud_composer.py +14 -10
  12. airflow/providers/google/cloud/hooks/cloud_memorystore.py +5 -3
  13. airflow/providers/google/cloud/hooks/cloud_run.py +5 -3
  14. airflow/providers/google/cloud/hooks/cloud_sql.py +11 -14
  15. airflow/providers/google/cloud/hooks/cloud_storage_transfer_service.py +8 -6
  16. airflow/providers/google/cloud/hooks/compute.py +5 -3
  17. airflow/providers/google/cloud/hooks/compute_ssh.py +1 -1
  18. airflow/providers/google/cloud/hooks/datacatalog.py +5 -3
  19. airflow/providers/google/cloud/hooks/dataflow.py +8 -11
  20. airflow/providers/google/cloud/hooks/dataform.py +4 -2
  21. airflow/providers/google/cloud/hooks/datafusion.py +24 -6
  22. airflow/providers/google/cloud/hooks/dataplex.py +75 -6
  23. airflow/providers/google/cloud/hooks/dataproc.py +9 -7
  24. airflow/providers/google/cloud/hooks/dataproc_metastore.py +8 -6
  25. airflow/providers/google/cloud/hooks/dlp.py +139 -137
  26. airflow/providers/google/cloud/hooks/gcs.py +15 -20
  27. airflow/providers/google/cloud/hooks/kms.py +4 -2
  28. airflow/providers/google/cloud/hooks/kubernetes_engine.py +34 -34
  29. airflow/providers/google/cloud/hooks/looker.py +4 -1
  30. airflow/providers/google/cloud/hooks/mlengine.py +8 -6
  31. airflow/providers/google/cloud/hooks/natural_language.py +4 -2
  32. airflow/providers/google/cloud/hooks/os_login.py +9 -7
  33. airflow/providers/google/cloud/hooks/pubsub.py +13 -11
  34. airflow/providers/google/cloud/hooks/spanner.py +7 -5
  35. airflow/providers/google/cloud/hooks/speech_to_text.py +4 -2
  36. airflow/providers/google/cloud/hooks/stackdriver.py +6 -5
  37. airflow/providers/google/cloud/hooks/tasks.py +5 -3
  38. airflow/providers/google/cloud/hooks/text_to_speech.py +4 -2
  39. airflow/providers/google/cloud/hooks/vertex_ai/auto_ml.py +7 -5
  40. airflow/providers/google/cloud/hooks/vertex_ai/batch_prediction_job.py +6 -4
  41. airflow/providers/google/cloud/hooks/vertex_ai/custom_job.py +11 -9
  42. airflow/providers/google/cloud/hooks/vertex_ai/dataset.py +12 -10
  43. airflow/providers/google/cloud/hooks/vertex_ai/endpoint_service.py +8 -6
  44. airflow/providers/google/cloud/hooks/vertex_ai/hyperparameter_tuning_job.py +6 -4
  45. airflow/providers/google/cloud/hooks/vertex_ai/model_service.py +7 -5
  46. airflow/providers/google/cloud/hooks/video_intelligence.py +5 -3
  47. airflow/providers/google/cloud/hooks/vision.py +5 -3
  48. airflow/providers/google/cloud/hooks/workflows.py +8 -6
  49. airflow/providers/google/cloud/links/bigquery.py +1 -1
  50. airflow/providers/google/cloud/links/bigquery_dts.py +1 -1
  51. airflow/providers/google/cloud/links/cloud_functions.py +1 -1
  52. airflow/providers/google/cloud/links/cloud_memorystore.py +1 -1
  53. airflow/providers/google/cloud/links/cloud_sql.py +1 -1
  54. airflow/providers/google/cloud/links/cloud_tasks.py +1 -1
  55. airflow/providers/google/cloud/links/compute.py +1 -1
  56. airflow/providers/google/cloud/links/datacatalog.py +1 -1
  57. airflow/providers/google/cloud/links/dataflow.py +1 -1
  58. airflow/providers/google/cloud/links/dataform.py +1 -1
  59. airflow/providers/google/cloud/links/pubsub.py +1 -1
  60. airflow/providers/google/cloud/links/spanner.py +1 -1
  61. airflow/providers/google/cloud/links/stackdriver.py +1 -1
  62. airflow/providers/google/cloud/links/workflows.py +2 -2
  63. airflow/providers/google/cloud/log/gcs_task_handler.py +5 -7
  64. airflow/providers/google/cloud/log/stackdriver_task_handler.py +8 -4
  65. airflow/providers/google/cloud/operators/automl.py +2 -1
  66. airflow/providers/google/cloud/operators/bigquery.py +6 -2
  67. airflow/providers/google/cloud/operators/bigquery_dts.py +2 -1
  68. airflow/providers/google/cloud/operators/bigtable.py +5 -3
  69. airflow/providers/google/cloud/operators/cloud_batch.py +6 -3
  70. airflow/providers/google/cloud/operators/cloud_build.py +2 -1
  71. airflow/providers/google/cloud/operators/cloud_composer.py +3 -2
  72. airflow/providers/google/cloud/operators/cloud_memorystore.py +3 -2
  73. airflow/providers/google/cloud/operators/cloud_run.py +3 -2
  74. airflow/providers/google/cloud/operators/cloud_sql.py +157 -152
  75. airflow/providers/google/cloud/operators/compute.py +59 -61
  76. airflow/providers/google/cloud/operators/datacatalog.py +3 -2
  77. airflow/providers/google/cloud/operators/dataflow.py +3 -1
  78. airflow/providers/google/cloud/operators/dataform.py +2 -1
  79. airflow/providers/google/cloud/operators/datafusion.py +1 -1
  80. airflow/providers/google/cloud/operators/dataplex.py +110 -8
  81. airflow/providers/google/cloud/operators/dataproc.py +39 -18
  82. airflow/providers/google/cloud/operators/dataproc_metastore.py +2 -1
  83. airflow/providers/google/cloud/operators/dlp.py +3 -2
  84. airflow/providers/google/cloud/operators/functions.py +46 -46
  85. airflow/providers/google/cloud/operators/gcs.py +4 -6
  86. airflow/providers/google/cloud/operators/kubernetes_engine.py +2 -1
  87. airflow/providers/google/cloud/operators/natural_language.py +3 -2
  88. airflow/providers/google/cloud/operators/pubsub.py +2 -1
  89. airflow/providers/google/cloud/operators/speech_to_text.py +3 -2
  90. airflow/providers/google/cloud/operators/stackdriver.py +2 -1
  91. airflow/providers/google/cloud/operators/tasks.py +3 -2
  92. airflow/providers/google/cloud/operators/text_to_speech.py +3 -2
  93. airflow/providers/google/cloud/operators/translate_speech.py +2 -1
  94. airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py +2 -1
  95. airflow/providers/google/cloud/operators/vertex_ai/batch_prediction_job.py +3 -2
  96. airflow/providers/google/cloud/operators/vertex_ai/custom_job.py +2 -1
  97. airflow/providers/google/cloud/operators/vertex_ai/dataset.py +3 -2
  98. airflow/providers/google/cloud/operators/vertex_ai/endpoint_service.py +4 -4
  99. airflow/providers/google/cloud/operators/vertex_ai/hyperparameter_tuning_job.py +3 -2
  100. airflow/providers/google/cloud/operators/vertex_ai/model_service.py +2 -1
  101. airflow/providers/google/cloud/operators/video_intelligence.py +2 -1
  102. airflow/providers/google/cloud/operators/vision.py +3 -2
  103. airflow/providers/google/cloud/operators/workflows.py +7 -5
  104. airflow/providers/google/cloud/secrets/secret_manager.py +2 -2
  105. airflow/providers/google/cloud/sensors/bigquery_dts.py +2 -1
  106. airflow/providers/google/cloud/sensors/dataplex.py +2 -1
  107. airflow/providers/google/cloud/sensors/dataproc_metastore.py +2 -2
  108. airflow/providers/google/cloud/sensors/gcs.py +2 -1
  109. airflow/providers/google/cloud/sensors/workflows.py +2 -1
  110. airflow/providers/google/cloud/transfers/azure_fileshare_to_gcs.py +24 -10
  111. airflow/providers/google/cloud/transfers/bigquery_to_gcs.py +2 -1
  112. airflow/providers/google/cloud/transfers/bigquery_to_mssql.py +2 -1
  113. airflow/providers/google/cloud/transfers/bigquery_to_mysql.py +1 -4
  114. airflow/providers/google/cloud/transfers/bigquery_to_postgres.py +1 -4
  115. airflow/providers/google/cloud/transfers/bigquery_to_sql.py +1 -1
  116. airflow/providers/google/cloud/transfers/calendar_to_gcs.py +4 -2
  117. airflow/providers/google/cloud/transfers/cassandra_to_gcs.py +1 -3
  118. airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py +2 -2
  119. airflow/providers/google/cloud/transfers/gcs_to_bigquery.py +2 -1
  120. airflow/providers/google/cloud/transfers/presto_to_gcs.py +5 -4
  121. airflow/providers/google/cloud/transfers/sql_to_gcs.py +1 -1
  122. airflow/providers/google/cloud/transfers/trino_to_gcs.py +5 -4
  123. airflow/providers/google/cloud/triggers/bigquery.py +30 -36
  124. airflow/providers/google/cloud/triggers/bigquery_dts.py +9 -10
  125. airflow/providers/google/cloud/triggers/cloud_batch.py +6 -8
  126. airflow/providers/google/cloud/triggers/cloud_build.py +5 -6
  127. airflow/providers/google/cloud/triggers/cloud_run.py +4 -3
  128. airflow/providers/google/cloud/triggers/cloud_sql.py +10 -10
  129. airflow/providers/google/cloud/triggers/cloud_storage_transfer_service.py +1 -1
  130. airflow/providers/google/cloud/triggers/dataflow.py +5 -6
  131. airflow/providers/google/cloud/triggers/datafusion.py +5 -6
  132. airflow/providers/google/cloud/triggers/dataplex.py +110 -0
  133. airflow/providers/google/cloud/triggers/dataproc.py +18 -20
  134. airflow/providers/google/cloud/triggers/kubernetes_engine.py +14 -13
  135. airflow/providers/google/cloud/triggers/mlengine.py +5 -5
  136. airflow/providers/google/cloud/triggers/pubsub.py +2 -2
  137. airflow/providers/google/cloud/utils/bigquery_get_data.py +6 -3
  138. airflow/providers/google/cloud/utils/credentials_provider.py +1 -1
  139. airflow/providers/google/cloud/utils/field_validator.py +13 -13
  140. airflow/providers/google/cloud/utils/mlengine_operator_utils.py +5 -3
  141. airflow/providers/google/cloud/utils/mlengine_prediction_summary.py +1 -1
  142. airflow/providers/google/common/hooks/base_google.py +10 -2
  143. airflow/providers/google/common/links/storage.py +1 -1
  144. airflow/providers/google/common/utils/id_token_credentials.py +4 -1
  145. airflow/providers/google/get_provider_info.py +5 -0
  146. airflow/providers/google/marketing_platform/hooks/campaign_manager.py +4 -2
  147. airflow/providers/google/marketing_platform/sensors/display_video.py +6 -3
  148. airflow/providers/google/suite/hooks/calendar.py +4 -2
  149. {apache_airflow_providers_google-10.7.0.dist-info → apache_airflow_providers_google-10.8.0.dist-info}/METADATA +6 -6
  150. {apache_airflow_providers_google-10.7.0.dist-info → apache_airflow_providers_google-10.8.0.dist-info}/RECORD +155 -173
  151. {apache_airflow_providers_google-10.7.0.dist-info → apache_airflow_providers_google-10.8.0.dist-info}/WHEEL +1 -1
  152. airflow/providers/google/ads/_vendor/__init__.py +0 -16
  153. airflow/providers/google/ads/_vendor/googleads/__init__.py +0 -16
  154. airflow/providers/google/ads/_vendor/googleads/interceptors/__init__.py +0 -16
  155. airflow/providers/google/ads/_vendor/googleads/v12/__init__.py +0 -16
  156. airflow/providers/google/ads/_vendor/googleads/v12/common/__init__.py +0 -16
  157. airflow/providers/google/ads/_vendor/googleads/v12/common/types/__init__.py +0 -16
  158. airflow/providers/google/ads/_vendor/googleads/v12/enums/__init__.py +0 -16
  159. airflow/providers/google/ads/_vendor/googleads/v12/enums/types/__init__.py +0 -16
  160. airflow/providers/google/ads/_vendor/googleads/v12/errors/__init__.py +0 -16
  161. airflow/providers/google/ads/_vendor/googleads/v12/errors/types/__init__.py +0 -16
  162. airflow/providers/google/ads/_vendor/googleads/v12/resources/__init__.py +0 -16
  163. airflow/providers/google/ads/_vendor/googleads/v12/resources/types/__init__.py +0 -16
  164. airflow/providers/google/ads/_vendor/googleads/v12/services/__init__.py +0 -16
  165. airflow/providers/google/ads/_vendor/googleads/v12/services/services/__init__.py +0 -16
  166. airflow/providers/google/ads/_vendor/googleads/v12/services/services/customer_service/__init__.py +0 -16
  167. airflow/providers/google/ads/_vendor/googleads/v12/services/services/customer_service/transports/__init__.py +0 -16
  168. airflow/providers/google/ads/_vendor/googleads/v12/services/services/google_ads_service/__init__.py +0 -16
  169. airflow/providers/google/ads/_vendor/googleads/v12/services/services/google_ads_service/transports/__init__.py +0 -16
  170. airflow/providers/google/ads/_vendor/googleads/v12/services/types/__init__.py +0 -16
  171. {apache_airflow_providers_google-10.7.0.dist-info → apache_airflow_providers_google-10.8.0.dist-info}/LICENSE +0 -0
  172. {apache_airflow_providers_google-10.7.0.dist-info → apache_airflow_providers_google-10.8.0.dist-info}/NOTICE +0 -0
  173. {apache_airflow_providers_google-10.7.0.dist-info → apache_airflow_providers_google-10.8.0.dist-info}/entry_points.txt +0 -0
  174. {apache_airflow_providers_google-10.7.0.dist-info → apache_airflow_providers_google-10.8.0.dist-info}/top_level.txt +0 -0
@@ -158,20 +158,20 @@ def _int_greater_than_zero(value):
158
158
 
159
159
 
160
160
  EXAMPLE_VALIDATION_SPECIFICATION = [
161
- dict(name="name", allow_empty=False),
162
- dict(name="description", allow_empty=False, optional=True),
163
- dict(name="availableMemoryMb", custom_validation=_int_greater_than_zero, optional=True),
164
- dict(name="labels", optional=True, type="dict"),
165
- dict(
166
- name="an_union",
167
- type="union",
168
- fields=[
169
- dict(name="variant_1", regexp=r"^.+$"),
170
- dict(name="variant_2", regexp=r"^.+$", api_version="v1beta2"),
171
- dict(name="variant_3", type="dict", fields=[dict(name="url", regexp=r"^.+$")]),
172
- dict(name="variant_4"),
161
+ {"name": "name", "allow_empty": False},
162
+ {"name": "description", "allow_empty": False, "optional": True},
163
+ {"name": "availableMemoryMb", "custom_validation": _int_greater_than_zero, "optional": True},
164
+ {"name": "labels", "optional": True, "type": "dict"},
165
+ {
166
+ "name": "an_union",
167
+ "type": "union",
168
+ "fields": [
169
+ {"name": "variant_1", "regexp": r"^.+$"},
170
+ {"name": "variant_2", "regexp": r"^.+$", "api_version": "v1beta2"},
171
+ {"name": "variant_3", "type": "dict", "fields": [{"name": "url", "regexp": r"^.+$"}]},
172
+ {"name": "variant_4"},
173
173
  ],
174
- ),
174
+ },
175
175
  ]
176
176
 
177
177
 
@@ -21,12 +21,11 @@ import base64
21
21
  import json
22
22
  import os
23
23
  import re
24
- from typing import Callable, Iterable, TypeVar
24
+ from typing import TYPE_CHECKING, Callable, Iterable, TypeVar
25
25
  from urllib.parse import urlsplit
26
26
 
27
27
  import dill
28
28
 
29
- from airflow import DAG
30
29
  from airflow.exceptions import AirflowException
31
30
  from airflow.operators.python import PythonOperator
32
31
  from airflow.providers.apache.beam.hooks.beam import BeamRunnerType
@@ -34,6 +33,9 @@ from airflow.providers.apache.beam.operators.beam import BeamRunPythonPipelineOp
34
33
  from airflow.providers.google.cloud.hooks.gcs import GCSHook
35
34
  from airflow.providers.google.cloud.operators.mlengine import MLEngineStartBatchPredictionJobOperator
36
35
 
36
+ if TYPE_CHECKING:
37
+ from airflow import DAG
38
+
37
39
  T = TypeVar("T", bound=Callable)
38
40
 
39
41
 
@@ -191,7 +193,7 @@ def create_evaluate_ops(
191
193
 
192
194
  # Verify that task_prefix doesn't have any special characters except hyphen
193
195
  # '-', which is the only allowed non-alphanumeric character by Dataflow.
194
- if not re.match(r"^[a-zA-Z][-A-Za-z0-9]*$", task_prefix):
196
+ if not re.fullmatch(r"[a-zA-Z][-A-Za-z0-9]*", task_prefix):
195
197
  raise AirflowException(
196
198
  "Malformed task_id for DataFlowPythonOperator (only alphanumeric "
197
199
  "and hyphens are allowed but got: " + task_prefix
@@ -139,7 +139,7 @@ def MakeSummary(pcoll, metric_fn, metric_keys):
139
139
  return (
140
140
  pcoll
141
141
  | "ApplyMetricFnPerInstance" >> beam.Map(metric_fn)
142
- | "PairWith1" >> beam.Map(lambda tup: tup + (1,))
142
+ | "PairWith1" >> beam.Map(lambda tup: (*tup, 1))
143
143
  | "SumTuple" >> beam.CombineGlobally(beam.combiners.TupleCombineFn(*([sum] * (len(metric_keys) + 1))))
144
144
  | "AverageAndMakeDict"
145
145
  >> beam.Map(
@@ -26,7 +26,7 @@ import tempfile
26
26
  import warnings
27
27
  from contextlib import ExitStack, contextmanager
28
28
  from subprocess import check_output
29
- from typing import Any, Callable, Generator, Sequence, TypeVar, cast
29
+ from typing import TYPE_CHECKING, Any, Callable, Generator, Sequence, TypeVar, cast
30
30
 
31
31
  import google.auth
32
32
  import google.auth.credentials
@@ -36,7 +36,6 @@ import requests
36
36
  import tenacity
37
37
  from asgiref.sync import sync_to_async
38
38
  from google.api_core.exceptions import Forbidden, ResourceExhausted, TooManyRequests
39
- from google.api_core.gapic_v1.client_info import ClientInfo
40
39
  from google.auth import _cloud_sdk, compute_engine
41
40
  from google.auth.environment_vars import CLOUD_SDK_CONFIG_DIR, CREDENTIALS
42
41
  from google.auth.exceptions import RefreshError
@@ -56,6 +55,9 @@ from airflow.providers.google.cloud.utils.credentials_provider import (
56
55
  from airflow.providers.google.common.consts import CLIENT_INFO
57
56
  from airflow.utils.process_utils import patch_environ
58
57
 
58
+ if TYPE_CHECKING:
59
+ from google.api_core.gapic_v1.client_info import ClientInfo
60
+
59
61
  log = logging.getLogger(__name__)
60
62
 
61
63
  # Constants used by the mechanism of repeating requests in reaction to exceeding the temporary quota.
@@ -214,6 +216,9 @@ class GoogleBaseHook(BaseHook):
214
216
  widget=BS3TextFieldWidget(),
215
217
  default=5,
216
218
  ),
219
+ "impersonation_chain": StringField(
220
+ lazy_gettext("Impersonation Chain"), widget=BS3TextFieldWidget()
221
+ ),
217
222
  }
218
223
 
219
224
  @staticmethod
@@ -260,6 +265,9 @@ class GoogleBaseHook(BaseHook):
260
265
 
261
266
  credential_config_file: str | None = self._get_field("credential_config_file", None)
262
267
 
268
+ if not self.impersonation_chain:
269
+ self.impersonation_chain = self._get_field("impersonation_chain", None)
270
+
263
271
  target_principal, delegates = _get_target_principal_and_delegates(self.impersonation_chain)
264
272
 
265
273
  credentials, project_id = get_credentials_and_project_id(
@@ -19,7 +19,6 @@ from __future__ import annotations
19
19
 
20
20
  from typing import TYPE_CHECKING
21
21
 
22
- from airflow.models import BaseOperator
23
22
  from airflow.providers.google.cloud.links.base import BaseGoogleLink
24
23
 
25
24
  BASE_LINK = "https://console.cloud.google.com"
@@ -27,6 +26,7 @@ GCS_STORAGE_LINK = BASE_LINK + "/storage/browser/{uri};tab=objects?project={proj
27
26
  GCS_FILE_DETAILS_LINK = BASE_LINK + "/storage/browser/_details/{uri};tab=live_object?project={project_id}"
28
27
 
29
28
  if TYPE_CHECKING:
29
+ from airflow.models import BaseOperator
30
30
  from airflow.utils.context import Context
31
31
 
32
32
 
@@ -32,12 +32,15 @@ from __future__ import annotations
32
32
 
33
33
  import json
34
34
  import os
35
+ from typing import TYPE_CHECKING
35
36
 
36
37
  import google.auth.transport
37
- import google.oauth2
38
38
  from google.auth import credentials as google_auth_credentials, environment_vars, exceptions
39
39
  from google.oauth2 import credentials as oauth2_credentials, service_account
40
40
 
41
+ if TYPE_CHECKING:
42
+ import google.oauth2
43
+
41
44
  # Valid types accepted for file-based credentials.
42
45
  # They are taken from "google.auth._default" and since they are all "protected" and the imports might
43
46
  # change any time and fail the whole Google provider functionality - we should inline them
@@ -29,6 +29,7 @@ def get_provider_info():
29
29
  "description": "Google services including:\n\n - `Google Ads <https://ads.google.com/>`__\n - `Google Cloud (GCP) <https://cloud.google.com/>`__\n - `Google Firebase <https://firebase.google.com/>`__\n - `Google LevelDB <https://github.com/google/leveldb/>`__\n - `Google Marketing Platform <https://marketingplatform.google.com/>`__\n - `Google Workspace <https://workspace.google.com/>`__ (formerly Google Suite)\n",
30
30
  "suspended": False,
31
31
  "versions": [
32
+ "10.8.0",
32
33
  "10.7.0",
33
34
  "10.6.0",
34
35
  "10.5.0",
@@ -1146,6 +1147,10 @@ def get_provider_info():
1146
1147
  "integration-name": "Google Data Fusion",
1147
1148
  "python-modules": ["airflow.providers.google.cloud.triggers.datafusion"],
1148
1149
  },
1150
+ {
1151
+ "integration-name": "Google Dataplex",
1152
+ "python-modules": ["airflow.providers.google.cloud.triggers.dataplex"],
1153
+ },
1149
1154
  {
1150
1155
  "integration-name": "Google Dataproc",
1151
1156
  "python-modules": ["airflow.providers.google.cloud.triggers.dataproc"],
@@ -18,14 +18,16 @@
18
18
  """This module contains Google Campaign Manager hook."""
19
19
  from __future__ import annotations
20
20
 
21
- from typing import Any, Sequence
21
+ from typing import TYPE_CHECKING, Any, Sequence
22
22
 
23
- from googleapiclient import http
24
23
  from googleapiclient.discovery import Resource, build
25
24
 
26
25
  from airflow.exceptions import AirflowException
27
26
  from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
28
27
 
28
+ if TYPE_CHECKING:
29
+ from googleapiclient import http
30
+
29
31
 
30
32
  class GoogleCampaignManagerHook(GoogleBaseHook):
31
33
  """Hook for Google Campaign Manager."""
@@ -19,7 +19,7 @@ from __future__ import annotations
19
19
 
20
20
  from typing import TYPE_CHECKING, Sequence
21
21
 
22
- from airflow import AirflowException
22
+ from airflow.exceptions import AirflowException, AirflowSkipException
23
23
  from airflow.providers.google.marketing_platform.hooks.display_video import GoogleDisplayVideo360Hook
24
24
  from airflow.sensors.base import BaseSensorOperator
25
25
 
@@ -86,9 +86,12 @@ class GoogleDisplayVideo360GetSDFDownloadOperationSensor(BaseSensorOperator):
86
86
  impersonation_chain=self.impersonation_chain,
87
87
  )
88
88
  operation = hook.get_sdf_download_operation(operation_name=self.operation_name)
89
-
90
89
  if "error" in operation:
91
- raise AirflowException(f'The operation finished in error with {operation["error"]}')
90
+ # TODO: remove this if block when min_airflow_version is set to higher than 2.7.1
91
+ message = f'The operation finished in error with {operation["error"]}'
92
+ if self.soft_fail:
93
+ raise AirflowSkipException(message)
94
+ raise AirflowException(message)
92
95
  if operation and operation.get("done"):
93
96
  return True
94
97
  return False
@@ -18,14 +18,16 @@
18
18
  """This module contains a Google Calendar API hook."""
19
19
  from __future__ import annotations
20
20
 
21
- from datetime import datetime
22
- from typing import Any, Sequence
21
+ from typing import TYPE_CHECKING, Any, Sequence
23
22
 
24
23
  from googleapiclient.discovery import build
25
24
 
26
25
  from airflow.exceptions import AirflowException
27
26
  from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
28
27
 
28
+ if TYPE_CHECKING:
29
+ from datetime import datetime
30
+
29
31
 
30
32
  class GoogleCalendarHook(GoogleBaseHook):
31
33
  """
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apache-airflow-providers-google
3
- Version: 10.7.0
3
+ Version: 10.8.0
4
4
  Summary: Provider for Apache Airflow. Implements apache-airflow-providers-google package
5
5
  Home-page: https://airflow.apache.org/
6
6
  Download-URL: https://archive.apache.org/dist/airflow/providers
7
7
  Author: Apache Software Foundation
8
8
  Author-email: dev@airflow.apache.org
9
9
  License: Apache License 2.0
10
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-google/10.7.0/
11
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-google/10.7.0/changelog.html
10
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-google/10.8.0/
11
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-google/10.8.0/changelog.html
12
12
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
13
13
  Project-URL: Source Code, https://github.com/apache/airflow
14
14
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
@@ -164,7 +164,7 @@ Requires-Dist: apache-airflow-providers-trino ; extra == 'trino'
164
164
 
165
165
  Package ``apache-airflow-providers-google``
166
166
 
167
- Release: ``10.7.0``
167
+ Release: ``10.8.0``
168
168
 
169
169
 
170
170
  Google services including:
@@ -184,7 +184,7 @@ This is a provider package for ``google`` provider. All classes for this provide
184
184
  are in ``airflow.providers.google`` python package.
185
185
 
186
186
  You can find package information and changelog for the provider
187
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-google/10.7.0/>`_.
187
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-google/10.8.0/>`_.
188
188
 
189
189
 
190
190
  Installation
@@ -297,4 +297,4 @@ Dependent package
297
297
  ======================================================================================================================== ====================
298
298
 
299
299
  The changelog for the provider package can be found in the
300
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-google/10.7.0/changelog.html>`_.
300
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-google/10.8.0/changelog.html>`_.