apache-airflow-providers-google 10.22.0__py3-none-any.whl → 10.23.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.
- airflow/providers/google/__init__.py +1 -1
- airflow/providers/google/cloud/hooks/bigquery.py +91 -54
- airflow/providers/google/cloud/hooks/cloud_build.py +3 -2
- airflow/providers/google/cloud/hooks/dataflow.py +112 -47
- airflow/providers/google/cloud/hooks/datapipeline.py +3 -3
- airflow/providers/google/cloud/hooks/kubernetes_engine.py +15 -26
- airflow/providers/google/cloud/hooks/life_sciences.py +5 -7
- airflow/providers/google/cloud/hooks/secret_manager.py +3 -3
- airflow/providers/google/cloud/hooks/vertex_ai/auto_ml.py +28 -8
- airflow/providers/google/cloud/hooks/vertex_ai/custom_job.py +11 -6
- airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py +214 -34
- airflow/providers/google/cloud/hooks/vertex_ai/model_service.py +11 -4
- airflow/providers/google/cloud/links/automl.py +13 -22
- airflow/providers/google/cloud/log/gcs_task_handler.py +1 -2
- airflow/providers/google/cloud/operators/bigquery.py +6 -4
- airflow/providers/google/cloud/operators/dataflow.py +186 -4
- airflow/providers/google/cloud/operators/datafusion.py +3 -2
- airflow/providers/google/cloud/operators/datapipeline.py +5 -6
- airflow/providers/google/cloud/operators/dataproc.py +30 -33
- airflow/providers/google/cloud/operators/gcs.py +4 -4
- airflow/providers/google/cloud/operators/kubernetes_engine.py +16 -2
- airflow/providers/google/cloud/operators/life_sciences.py +5 -7
- airflow/providers/google/cloud/operators/mlengine.py +42 -65
- airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py +18 -4
- airflow/providers/google/cloud/operators/vertex_ai/custom_job.py +5 -5
- airflow/providers/google/cloud/operators/vertex_ai/generative_model.py +280 -9
- airflow/providers/google/cloud/operators/vertex_ai/model_service.py +4 -0
- airflow/providers/google/cloud/secrets/secret_manager.py +3 -5
- airflow/providers/google/cloud/sensors/bigquery.py +8 -27
- airflow/providers/google/cloud/sensors/bigquery_dts.py +1 -4
- airflow/providers/google/cloud/sensors/cloud_composer.py +9 -14
- airflow/providers/google/cloud/sensors/dataflow.py +1 -25
- airflow/providers/google/cloud/sensors/dataform.py +1 -4
- airflow/providers/google/cloud/sensors/datafusion.py +1 -7
- airflow/providers/google/cloud/sensors/dataplex.py +1 -31
- airflow/providers/google/cloud/sensors/dataproc.py +1 -16
- airflow/providers/google/cloud/sensors/dataproc_metastore.py +1 -7
- airflow/providers/google/cloud/sensors/gcs.py +5 -27
- airflow/providers/google/cloud/sensors/looker.py +1 -13
- airflow/providers/google/cloud/sensors/pubsub.py +11 -5
- airflow/providers/google/cloud/sensors/workflows.py +1 -4
- airflow/providers/google/cloud/transfers/sftp_to_gcs.py +6 -0
- airflow/providers/google/cloud/triggers/dataflow.py +145 -1
- airflow/providers/google/cloud/triggers/kubernetes_engine.py +66 -3
- airflow/providers/google/common/deprecated.py +176 -0
- airflow/providers/google/common/hooks/base_google.py +3 -2
- airflow/providers/google/get_provider_info.py +8 -10
- airflow/providers/google/marketing_platform/hooks/analytics.py +4 -2
- airflow/providers/google/marketing_platform/hooks/search_ads.py +169 -30
- airflow/providers/google/marketing_platform/operators/analytics.py +16 -33
- airflow/providers/google/marketing_platform/operators/search_ads.py +217 -156
- airflow/providers/google/marketing_platform/sensors/display_video.py +1 -4
- {apache_airflow_providers_google-10.22.0.dist-info → apache_airflow_providers_google-10.23.0.dist-info}/METADATA +18 -16
- {apache_airflow_providers_google-10.22.0.dist-info → apache_airflow_providers_google-10.23.0.dist-info}/RECORD +56 -56
- airflow/providers/google/marketing_platform/sensors/search_ads.py +0 -92
- {apache_airflow_providers_google-10.22.0.dist-info → apache_airflow_providers_google-10.23.0.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_google-10.22.0.dist-info → apache_airflow_providers_google-10.23.0.dist-info}/entry_points.txt +0 -0
@@ -19,217 +19,278 @@
|
|
19
19
|
|
20
20
|
from __future__ import annotations
|
21
21
|
|
22
|
-
import
|
23
|
-
from tempfile import NamedTemporaryFile
|
22
|
+
from functools import cached_property
|
24
23
|
from typing import TYPE_CHECKING, Any, Sequence
|
25
24
|
|
26
|
-
from airflow.exceptions import AirflowException
|
27
25
|
from airflow.models import BaseOperator
|
28
|
-
from airflow.providers.google.
|
29
|
-
from airflow.providers.google.marketing_platform.hooks.search_ads import GoogleSearchAdsHook
|
26
|
+
from airflow.providers.google.marketing_platform.hooks.search_ads import GoogleSearchAdsReportingHook
|
30
27
|
|
31
28
|
if TYPE_CHECKING:
|
32
29
|
from airflow.utils.context import Context
|
33
30
|
|
34
31
|
|
35
|
-
class
|
32
|
+
class _GoogleSearchAdsBaseOperator(BaseOperator):
|
36
33
|
"""
|
37
|
-
|
34
|
+
Base class to use in NextGen operator.
|
35
|
+
|
36
|
+
:param api_version: The version of the API that will be requested for example 'v0'.
|
37
|
+
:param gcp_conn_id: The connection ID to use when fetching connection info.
|
38
|
+
"""
|
39
|
+
|
40
|
+
template_fields: Sequence[str] = (
|
41
|
+
"api_version",
|
42
|
+
"gcp_conn_id",
|
43
|
+
)
|
44
|
+
|
45
|
+
def __init__(
|
46
|
+
self,
|
47
|
+
*,
|
48
|
+
api_version: str = "v0",
|
49
|
+
gcp_conn_id: str = "google_search_ads_default",
|
50
|
+
**kwargs,
|
51
|
+
):
|
52
|
+
super().__init__(**kwargs)
|
53
|
+
self.api_version = api_version
|
54
|
+
self.gcp_conn_id = gcp_conn_id
|
55
|
+
|
56
|
+
@cached_property
|
57
|
+
def hook(self):
|
58
|
+
return GoogleSearchAdsReportingHook(
|
59
|
+
gcp_conn_id=self.gcp_conn_id,
|
60
|
+
api_version=self.api_version,
|
61
|
+
)
|
62
|
+
|
63
|
+
|
64
|
+
class GoogleSearchAdsSearchOperator(_GoogleSearchAdsBaseOperator):
|
65
|
+
"""
|
66
|
+
Search a report by query.
|
38
67
|
|
39
68
|
.. seealso:
|
40
69
|
For API documentation check:
|
41
|
-
https://developers.google.com/search-ads/
|
70
|
+
https://developers.google.com/search-ads/reporting/api/reference/rest/v0/customers.searchAds360/search
|
42
71
|
|
43
72
|
.. seealso::
|
44
73
|
For more information on how to use this operator, take a look at the guide:
|
45
|
-
:ref:`howto/operator:
|
74
|
+
:ref:`howto/operator:GoogleSearchAdsSearchOperator`
|
46
75
|
|
47
|
-
:param
|
48
|
-
:param
|
76
|
+
:param customer_id: The ID of the customer being queried.
|
77
|
+
:param query: The query to execute.
|
78
|
+
:param page_token: Token of the page to retrieve. If not specified, the first page of results will be
|
79
|
+
returned. Use the value obtained from `next_page_token` in the previous response
|
80
|
+
in order to request the next page of results.
|
81
|
+
:param page_size: Number of elements to retrieve in a single page. When too large a page is requested,
|
82
|
+
the server may decide to further limit the number of returned resources.
|
83
|
+
Default is 10000.
|
84
|
+
:param return_total_results_count: If true, the total number of results that match the query ignoring
|
85
|
+
the LIMIT clause will be included in the response. Default is false.
|
86
|
+
:param summary_row_setting: Determines whether a summary row will be returned. By default,
|
87
|
+
summary row is not returned. If requested, the summary row will be sent
|
88
|
+
in a response by itself after all others query results are returned.
|
89
|
+
:param validate_only: If true, the request is validated but not executed. Default is false.
|
49
90
|
:param gcp_conn_id: The connection ID to use when fetching connection info.
|
50
|
-
:param
|
51
|
-
if any. For this to work, the service account making the request must have
|
52
|
-
domain-wide delegation enabled.
|
53
|
-
:param impersonation_chain: Optional service account to impersonate using short-term
|
54
|
-
credentials, or chained list of accounts required to get the access_token
|
55
|
-
of the last account in the list, which will be impersonated in the request.
|
56
|
-
If set as a string, the account must grant the originating account
|
57
|
-
the Service Account Token Creator IAM role.
|
58
|
-
If set as a sequence, the identities from the list must grant
|
59
|
-
Service Account Token Creator IAM role to the directly preceding identity, with first
|
60
|
-
account from the list granting this role to the originating account (templated).
|
91
|
+
:param api_version: The version of the API that will be requested for example 'v0'.
|
61
92
|
"""
|
62
93
|
|
63
94
|
template_fields: Sequence[str] = (
|
64
|
-
|
65
|
-
"
|
95
|
+
*_GoogleSearchAdsBaseOperator.template_fields,
|
96
|
+
"page_token",
|
97
|
+
"page_size",
|
66
98
|
)
|
67
|
-
template_ext: Sequence[str] = (".json",)
|
68
99
|
|
69
100
|
def __init__(
|
70
101
|
self,
|
71
102
|
*,
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
103
|
+
customer_id: str,
|
104
|
+
query: str,
|
105
|
+
page_token: str | None = None,
|
106
|
+
page_size: int = 10000,
|
107
|
+
return_total_results_count: bool = False,
|
108
|
+
summary_row_setting: str | None = None,
|
109
|
+
validate_only: bool = False,
|
77
110
|
**kwargs,
|
78
111
|
) -> None:
|
79
112
|
super().__init__(**kwargs)
|
80
|
-
self.
|
81
|
-
self.
|
82
|
-
self.
|
83
|
-
self.
|
84
|
-
self.
|
85
|
-
|
86
|
-
|
87
|
-
# If .json is passed then we have to read the file
|
88
|
-
if isinstance(self.report, str) and self.report.endswith(".json"):
|
89
|
-
with open(self.report) as file:
|
90
|
-
self.report = json.load(file)
|
113
|
+
self.customer_id = customer_id
|
114
|
+
self.query = query
|
115
|
+
self.page_token = page_token
|
116
|
+
self.page_size = page_size
|
117
|
+
self.return_total_results_count = return_total_results_count
|
118
|
+
self.summary_row_setting = summary_row_setting
|
119
|
+
self.validate_only = validate_only
|
91
120
|
|
92
121
|
def execute(self, context: Context):
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
122
|
+
self.log.info("Querying Search Ads")
|
123
|
+
response = self.hook.search(
|
124
|
+
customer_id=self.customer_id,
|
125
|
+
query=self.query,
|
126
|
+
page_size=self.page_size,
|
127
|
+
page_token=self.page_token,
|
128
|
+
return_total_results_count=self.return_total_results_count,
|
129
|
+
summary_row_setting=self.summary_row_setting,
|
130
|
+
validate_only=self.validate_only,
|
98
131
|
)
|
99
|
-
self.log.info("
|
100
|
-
response
|
101
|
-
|
102
|
-
|
103
|
-
|
132
|
+
self.log.info("Query result: %s", response)
|
133
|
+
return response
|
134
|
+
|
135
|
+
|
136
|
+
class GoogleSearchAdsGetFieldOperator(_GoogleSearchAdsBaseOperator):
|
137
|
+
"""
|
138
|
+
Retrieve metadata for a resource or a field.
|
139
|
+
|
140
|
+
.. seealso:
|
141
|
+
For API documentation check:
|
142
|
+
https://developers.google.com/search-ads/reporting/api/reference/rest/v0/searchAds360Fields/get
|
143
|
+
|
144
|
+
.. seealso::
|
145
|
+
For more information on how to use this operator, take a look at the guide:
|
146
|
+
:ref:`howto/operator:GoogleSearchAdsGetFieldOperator`
|
147
|
+
|
148
|
+
:param field_name: The name of the field.
|
149
|
+
:param gcp_conn_id: The connection ID to use when fetching connection info.
|
150
|
+
:param api_version: The version of the API that will be requested for example 'v0'.
|
151
|
+
"""
|
152
|
+
|
153
|
+
def __init__(
|
154
|
+
self,
|
155
|
+
*,
|
156
|
+
field_name: str,
|
157
|
+
**kwargs,
|
158
|
+
):
|
159
|
+
super().__init__(**kwargs)
|
160
|
+
self.field_name = field_name
|
161
|
+
|
162
|
+
def execute(self, context: Context) -> Any:
|
163
|
+
self.log.info("Retrieving the metadata for the field '%s'", self.field_name)
|
164
|
+
response = self.hook.get_field(field_name=self.field_name)
|
165
|
+
self.log.info("Retrieved field: %s", response["resourceName"])
|
104
166
|
return response
|
105
167
|
|
106
168
|
|
107
|
-
class
|
169
|
+
class GoogleSearchAdsSearchFieldsOperator(_GoogleSearchAdsBaseOperator):
|
108
170
|
"""
|
109
|
-
|
171
|
+
Retrieve metadata for resource(s) or field(s) by the query syntax.
|
110
172
|
|
111
173
|
.. seealso:
|
112
174
|
For API documentation check:
|
113
|
-
https://developers.google.com/search-ads/
|
175
|
+
https://developers.google.com/search-ads/reporting/api/reference/rest/v0/searchAds360Fields/search
|
114
176
|
|
115
177
|
.. seealso::
|
116
178
|
For more information on how to use this operator, take a look at the guide:
|
117
|
-
:ref:`howto/operator:
|
118
|
-
|
119
|
-
:param
|
120
|
-
:param
|
121
|
-
|
122
|
-
|
123
|
-
:param
|
124
|
-
|
179
|
+
:ref:`howto/operator:GoogleSearchAdsSearchFieldsOperator`
|
180
|
+
|
181
|
+
:param query: The query string to execute.
|
182
|
+
:param page_token: Token of the page to retrieve. If not specified, the first page of results will be
|
183
|
+
returned. Use the value obtained from `next_page_token` in the previous response
|
184
|
+
in order to request the next page of results.
|
185
|
+
:param page_size: Number of elements to retrieve in a single page. When too large a page is requested,
|
186
|
+
the server may decide to further limit the number of returned resources.
|
187
|
+
Default 10000.
|
125
188
|
:param gcp_conn_id: The connection ID to use when fetching connection info.
|
126
|
-
:param
|
127
|
-
if any. For this to work, the service account making the request must have
|
128
|
-
domain-wide delegation enabled.
|
129
|
-
:param impersonation_chain: Optional service account to impersonate using short-term
|
130
|
-
credentials, or chained list of accounts required to get the access_token
|
131
|
-
of the last account in the list, which will be impersonated in the request.
|
132
|
-
If set as a string, the account must grant the originating account
|
133
|
-
the Service Account Token Creator IAM role.
|
134
|
-
If set as a sequence, the identities from the list must grant
|
135
|
-
Service Account Token Creator IAM role to the directly preceding identity, with first
|
136
|
-
account from the list granting this role to the originating account (templated).
|
189
|
+
:param api_version: The version of the API that will be requested for example 'v0'.
|
137
190
|
"""
|
138
191
|
|
139
192
|
template_fields: Sequence[str] = (
|
140
|
-
|
141
|
-
"
|
142
|
-
"
|
143
|
-
"impersonation_chain",
|
193
|
+
*_GoogleSearchAdsBaseOperator.template_fields,
|
194
|
+
"page_token",
|
195
|
+
"page_size",
|
144
196
|
)
|
145
197
|
|
146
198
|
def __init__(
|
147
199
|
self,
|
148
200
|
*,
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
201
|
+
query: str,
|
202
|
+
page_token: str | None = None,
|
203
|
+
page_size: int = 10000,
|
204
|
+
**kwargs,
|
205
|
+
):
|
206
|
+
super().__init__(**kwargs)
|
207
|
+
self.query = query
|
208
|
+
|
209
|
+
self.page_token = page_token
|
210
|
+
self.page_size = page_size
|
211
|
+
|
212
|
+
def execute(self, context: Context) -> Any:
|
213
|
+
self.log.info("Retrieving the metadata for %s", self.query)
|
214
|
+
response = self.hook.search_fields(
|
215
|
+
query=self.query,
|
216
|
+
page_token=self.page_token,
|
217
|
+
page_size=self.page_size,
|
218
|
+
)
|
219
|
+
self.log.info("Num of fields retrieved, #%d", len(response["results"]))
|
220
|
+
return response
|
221
|
+
|
222
|
+
|
223
|
+
class GoogleSearchAdsGetCustomColumnOperator(_GoogleSearchAdsBaseOperator):
|
224
|
+
"""
|
225
|
+
Retrieve details of a custom column for the given customer_id and campaign_id.
|
226
|
+
|
227
|
+
.. seealso:
|
228
|
+
For API documentation check:
|
229
|
+
https://developers.google.com/search-ads/reporting/api/reference/rest/v0/customers.customColumns/get
|
230
|
+
|
231
|
+
.. seealso::
|
232
|
+
For more information on how to use this operator, take a look at the guide:
|
233
|
+
:ref:`howto/operator:GoogleSearchAdsGetCustomColumnOperator`
|
234
|
+
|
235
|
+
:param customer_id: The customer ID for the custom column.
|
236
|
+
:param custom_column_id: The ID for the custom column.
|
237
|
+
:param gcp_conn_id: The connection ID to use when fetching connection info.
|
238
|
+
:param api_version: The version of the API that will be requested for example 'v0'.
|
239
|
+
"""
|
240
|
+
|
241
|
+
def __init__(
|
242
|
+
self,
|
243
|
+
*,
|
244
|
+
customer_id: str,
|
245
|
+
custom_column_id: str,
|
158
246
|
**kwargs,
|
159
247
|
) -> None:
|
160
248
|
super().__init__(**kwargs)
|
161
|
-
self.
|
162
|
-
self.
|
163
|
-
self.gcp_conn_id = gcp_conn_id
|
164
|
-
self.delegate_to = delegate_to
|
165
|
-
self.report_id = report_id
|
166
|
-
self.chunk_size = chunk_size
|
167
|
-
self.gzip = gzip
|
168
|
-
self.bucket_name = bucket_name
|
169
|
-
self.report_name = report_name
|
170
|
-
self.impersonation_chain = impersonation_chain
|
171
|
-
|
172
|
-
def _resolve_file_name(self, name: str) -> str:
|
173
|
-
csv = ".csv"
|
174
|
-
gzip = ".gz"
|
175
|
-
if not name.endswith(csv):
|
176
|
-
name += csv
|
177
|
-
if self.gzip:
|
178
|
-
name += gzip
|
179
|
-
return name
|
180
|
-
|
181
|
-
@staticmethod
|
182
|
-
def _set_bucket_name(name: str) -> str:
|
183
|
-
bucket = name if not name.startswith("gs://") else name[5:]
|
184
|
-
return bucket.strip("/")
|
185
|
-
|
186
|
-
@staticmethod
|
187
|
-
def _handle_report_fragment(fragment: bytes) -> bytes:
|
188
|
-
fragment_records = fragment.split(b"\n", 1)
|
189
|
-
if len(fragment_records) > 1:
|
190
|
-
return fragment_records[1]
|
191
|
-
return b""
|
249
|
+
self.customer_id = customer_id
|
250
|
+
self.custom_column_id = custom_column_id
|
192
251
|
|
193
252
|
def execute(self, context: Context):
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
impersonation_chain=self.impersonation_chain,
|
253
|
+
self.log.info(
|
254
|
+
"Retrieving the custom column for the customer %s with the id of %s",
|
255
|
+
self.customer_id,
|
256
|
+
self.custom_column_id,
|
199
257
|
)
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
delegate_to=self.delegate_to,
|
204
|
-
impersonation_chain=self.impersonation_chain,
|
258
|
+
response = self.hook.get_custom_column(
|
259
|
+
customer_id=self.customer_id,
|
260
|
+
custom_column_id=self.custom_column_id,
|
205
261
|
)
|
262
|
+
self.log.info("Retrieved custom column: %s", response["id"])
|
263
|
+
return response
|
264
|
+
|
265
|
+
|
266
|
+
class GoogleSearchAdsListCustomColumnsOperator(_GoogleSearchAdsBaseOperator):
|
267
|
+
"""
|
268
|
+
List all custom columns.
|
269
|
+
|
270
|
+
.. seealso:
|
271
|
+
For API documentation check:
|
272
|
+
https://developers.google.com/search-ads/reporting/api/reference/rest/v0/customers.customColumns/list
|
273
|
+
|
274
|
+
.. seealso::
|
275
|
+
For more information on how to use this operator, take a look at the guide:
|
276
|
+
:ref:`howto/operator:GoogleSearchAdsListCustomColumnsOperator`
|
206
277
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
self.
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
temp_file.flush()
|
227
|
-
|
228
|
-
bucket_name = self._set_bucket_name(self.bucket_name)
|
229
|
-
gcs_hook.upload(
|
230
|
-
bucket_name=bucket_name,
|
231
|
-
object_name=report_name,
|
232
|
-
gzip=self.gzip,
|
233
|
-
filename=temp_file.name,
|
234
|
-
)
|
235
|
-
self.xcom_push(context, key="file_name", value=report_name)
|
278
|
+
:param customer_id: The customer ID for the custom column.
|
279
|
+
:param gcp_conn_id: The connection ID to use when fetching connection info.
|
280
|
+
:param api_version: The version of the API that will be requested for example 'v0'.
|
281
|
+
"""
|
282
|
+
|
283
|
+
def __init__(
|
284
|
+
self,
|
285
|
+
*,
|
286
|
+
customer_id: str,
|
287
|
+
**kwargs,
|
288
|
+
) -> None:
|
289
|
+
super().__init__(**kwargs)
|
290
|
+
self.customer_id = customer_id
|
291
|
+
|
292
|
+
def execute(self, context: Context):
|
293
|
+
self.log.info("Listing the custom columns for %s", self.customer_id)
|
294
|
+
response = self.hook.list_custom_columns(customer_id=self.customer_id)
|
295
|
+
self.log.info("Num of retrieved custom column: %d", len(response.get("customColumns")))
|
296
|
+
return response
|
@@ -20,7 +20,7 @@ from __future__ import annotations
|
|
20
20
|
|
21
21
|
from typing import TYPE_CHECKING, Sequence
|
22
22
|
|
23
|
-
from airflow.exceptions import AirflowException
|
23
|
+
from airflow.exceptions import AirflowException
|
24
24
|
from airflow.providers.google.marketing_platform.hooks.display_video import GoogleDisplayVideo360Hook
|
25
25
|
from airflow.sensors.base import BaseSensorOperator
|
26
26
|
|
@@ -88,10 +88,7 @@ class GoogleDisplayVideo360GetSDFDownloadOperationSensor(BaseSensorOperator):
|
|
88
88
|
)
|
89
89
|
operation = hook.get_sdf_download_operation(operation_name=self.operation_name)
|
90
90
|
if "error" in operation:
|
91
|
-
# TODO: remove this if block when min_airflow_version is set to higher than 2.7.1
|
92
91
|
message = f'The operation finished in error with {operation["error"]}'
|
93
|
-
if self.soft_fail:
|
94
|
-
raise AirflowSkipException(message)
|
95
92
|
raise AirflowException(message)
|
96
93
|
if operation and operation.get("done"):
|
97
94
|
return True
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: apache-airflow-providers-google
|
3
|
-
Version: 10.
|
3
|
+
Version: 10.23.0
|
4
4
|
Summary: Provider package apache-airflow-providers-google for Apache Airflow
|
5
5
|
Keywords: airflow-provider,google,airflow,integration
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
@@ -31,17 +31,17 @@ Requires-Dist: gcloud-aio-auth>=5.2.0
|
|
31
31
|
Requires-Dist: gcloud-aio-bigquery>=6.1.2
|
32
32
|
Requires-Dist: gcloud-aio-storage>=9.0.0
|
33
33
|
Requires-Dist: gcsfs>=2023.10.0
|
34
|
-
Requires-Dist: google-ads>=
|
34
|
+
Requires-Dist: google-ads>=25.0.0
|
35
35
|
Requires-Dist: google-analytics-admin>=0.9.0
|
36
36
|
Requires-Dist: google-api-core>=2.11.0,!=2.16.0,!=2.18.0
|
37
37
|
Requires-Dist: google-api-python-client>=2.0.2
|
38
38
|
Requires-Dist: google-auth-httplib2>=0.0.1
|
39
39
|
Requires-Dist: google-auth>=2.29.0
|
40
|
-
Requires-Dist: google-cloud-aiplatform>=1.
|
40
|
+
Requires-Dist: google-cloud-aiplatform>=1.63.0
|
41
41
|
Requires-Dist: google-cloud-automl>=2.12.0
|
42
42
|
Requires-Dist: google-cloud-batch>=0.13.0
|
43
43
|
Requires-Dist: google-cloud-bigquery-datatransfer>=3.13.0
|
44
|
-
Requires-Dist: google-cloud-bigquery
|
44
|
+
Requires-Dist: google-cloud-bigquery>=3.4.0,!=3.21.*,!=3.22.0,!=3.23.*
|
45
45
|
Requires-Dist: google-cloud-bigtable>=2.17.0
|
46
46
|
Requires-Dist: google-cloud-build>=3.22.0
|
47
47
|
Requires-Dist: google-cloud-compute>=1.10.0
|
@@ -51,7 +51,7 @@ Requires-Dist: google-cloud-dataflow-client>=0.8.6
|
|
51
51
|
Requires-Dist: google-cloud-dataform>=0.5.0
|
52
52
|
Requires-Dist: google-cloud-dataplex>=1.10.0
|
53
53
|
Requires-Dist: google-cloud-dataproc-metastore>=1.12.0
|
54
|
-
Requires-Dist: google-cloud-dataproc>=5.
|
54
|
+
Requires-Dist: google-cloud-dataproc>=5.12.0
|
55
55
|
Requires-Dist: google-cloud-dlp>=3.12.0
|
56
56
|
Requires-Dist: google-cloud-kms>=2.15.0
|
57
57
|
Requires-Dist: google-cloud-language>=2.9.0
|
@@ -64,7 +64,7 @@ Requires-Dist: google-cloud-pubsub>=2.19.0
|
|
64
64
|
Requires-Dist: google-cloud-redis>=2.12.0
|
65
65
|
Requires-Dist: google-cloud-run>=0.10.0
|
66
66
|
Requires-Dist: google-cloud-secret-manager>=2.16.0
|
67
|
-
Requires-Dist: google-cloud-spanner>=3.11.1
|
67
|
+
Requires-Dist: google-cloud-spanner>=3.11.1,!=3.49.0
|
68
68
|
Requires-Dist: google-cloud-speech>=2.18.0
|
69
69
|
Requires-Dist: google-cloud-storage-transfer>=1.4.1
|
70
70
|
Requires-Dist: google-cloud-storage>=2.7.0
|
@@ -76,6 +76,7 @@ Requires-Dist: google-cloud-vision>=3.4.0
|
|
76
76
|
Requires-Dist: google-cloud-workflows>=1.10.0
|
77
77
|
Requires-Dist: grpcio-gcp>=0.2.2
|
78
78
|
Requires-Dist: httpx>=0.25.0
|
79
|
+
Requires-Dist: immutabledict>=4.2.0
|
79
80
|
Requires-Dist: json-merge-patch>=0.2
|
80
81
|
Requires-Dist: looker-sdk>=22.4.0
|
81
82
|
Requires-Dist: pandas-gbq>=0.7.0
|
@@ -107,8 +108,8 @@ Requires-Dist: apache-airflow-providers-sftp ; extra == "sftp"
|
|
107
108
|
Requires-Dist: apache-airflow-providers-ssh ; extra == "ssh"
|
108
109
|
Requires-Dist: apache-airflow-providers-trino ; extra == "trino"
|
109
110
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
110
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-google/10.
|
111
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-google/10.
|
111
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-google/10.23.0/changelog.html
|
112
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-google/10.23.0
|
112
113
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
113
114
|
Project-URL: Source Code, https://github.com/apache/airflow
|
114
115
|
Project-URL: Twitter, https://twitter.com/ApacheAirflow
|
@@ -177,7 +178,7 @@ Provides-Extra: trino
|
|
177
178
|
|
178
179
|
Package ``apache-airflow-providers-google``
|
179
180
|
|
180
|
-
Release: ``10.
|
181
|
+
Release: ``10.23.0``
|
181
182
|
|
182
183
|
|
183
184
|
Google services including:
|
@@ -197,7 +198,7 @@ This is a provider package for ``google`` provider. All classes for this provide
|
|
197
198
|
are in ``airflow.providers.google`` python package.
|
198
199
|
|
199
200
|
You can find package information and changelog for the provider
|
200
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-google/10.
|
201
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-google/10.23.0/>`_.
|
201
202
|
|
202
203
|
Installation
|
203
204
|
------------
|
@@ -223,15 +224,15 @@ PIP package Version required
|
|
223
224
|
``gcloud-aio-bigquery`` ``>=6.1.2``
|
224
225
|
``gcloud-aio-storage`` ``>=9.0.0``
|
225
226
|
``gcsfs`` ``>=2023.10.0``
|
226
|
-
``google-ads`` ``>=
|
227
|
+
``google-ads`` ``>=25.0.0``
|
227
228
|
``google-analytics-admin`` ``>=0.9.0``
|
228
229
|
``google-api-core`` ``>=2.11.0,!=2.16.0,!=2.18.0``
|
229
230
|
``google-api-python-client`` ``>=2.0.2``
|
230
231
|
``google-auth`` ``>=2.29.0``
|
231
232
|
``google-auth-httplib2`` ``>=0.0.1``
|
232
|
-
``google-cloud-aiplatform`` ``>=1.
|
233
|
+
``google-cloud-aiplatform`` ``>=1.63.0``
|
233
234
|
``google-cloud-automl`` ``>=2.12.0``
|
234
|
-
``google-cloud-bigquery``
|
235
|
+
``google-cloud-bigquery`` ``!=3.21.*,!=3.22.0,!=3.23.*,>=3.4.0``
|
235
236
|
``google-cloud-bigquery-datatransfer`` ``>=3.13.0``
|
236
237
|
``google-cloud-bigtable`` ``>=2.17.0``
|
237
238
|
``google-cloud-build`` ``>=3.22.0``
|
@@ -241,7 +242,7 @@ PIP package Version required
|
|
241
242
|
``google-cloud-dataflow-client`` ``>=0.8.6``
|
242
243
|
``google-cloud-dataform`` ``>=0.5.0``
|
243
244
|
``google-cloud-dataplex`` ``>=1.10.0``
|
244
|
-
``google-cloud-dataproc`` ``>=5.
|
245
|
+
``google-cloud-dataproc`` ``>=5.12.0``
|
245
246
|
``google-cloud-dataproc-metastore`` ``>=1.12.0``
|
246
247
|
``google-cloud-dlp`` ``>=3.12.0``
|
247
248
|
``google-cloud-kms`` ``>=2.15.0``
|
@@ -254,7 +255,7 @@ PIP package Version required
|
|
254
255
|
``google-cloud-pubsub`` ``>=2.19.0``
|
255
256
|
``google-cloud-redis`` ``>=2.12.0``
|
256
257
|
``google-cloud-secret-manager`` ``>=2.16.0``
|
257
|
-
``google-cloud-spanner`` ``>=3.11.1``
|
258
|
+
``google-cloud-spanner`` ``>=3.11.1,!=3.49.0``
|
258
259
|
``google-cloud-speech`` ``>=2.18.0``
|
259
260
|
``google-cloud-storage`` ``>=2.7.0``
|
260
261
|
``google-cloud-storage-transfer`` ``>=1.4.1``
|
@@ -279,6 +280,7 @@ PIP package Version required
|
|
279
280
|
``sqlalchemy-bigquery`` ``>=1.2.1``
|
280
281
|
``sqlalchemy-spanner`` ``>=1.6.2``
|
281
282
|
``tenacity`` ``>=8.1.0``
|
283
|
+
``immutabledict`` ``>=4.2.0``
|
282
284
|
========================================== =========================================
|
283
285
|
|
284
286
|
Cross provider package dependencies
|
@@ -318,4 +320,4 @@ Dependent package
|
|
318
320
|
======================================================================================================================== ====================
|
319
321
|
|
320
322
|
The changelog for the provider package can be found in the
|
321
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-google/10.
|
323
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-google/10.23.0/changelog.html>`_.
|