apache-airflow-providers-google 16.0.0a1__py3-none-any.whl → 16.1.0rc1__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/ads/hooks/ads.py +43 -5
- airflow/providers/google/ads/operators/ads.py +1 -1
- airflow/providers/google/ads/transfers/ads_to_gcs.py +1 -1
- airflow/providers/google/cloud/hooks/bigquery.py +63 -77
- airflow/providers/google/cloud/hooks/cloud_sql.py +8 -4
- airflow/providers/google/cloud/hooks/datacatalog.py +9 -1
- airflow/providers/google/cloud/hooks/dataflow.py +2 -2
- airflow/providers/google/cloud/hooks/dataplex.py +1 -1
- airflow/providers/google/cloud/hooks/dataprep.py +4 -1
- airflow/providers/google/cloud/hooks/gcs.py +5 -5
- airflow/providers/google/cloud/hooks/looker.py +10 -1
- airflow/providers/google/cloud/hooks/mlengine.py +2 -1
- airflow/providers/google/cloud/hooks/secret_manager.py +102 -10
- airflow/providers/google/cloud/hooks/spanner.py +2 -2
- airflow/providers/google/cloud/hooks/translate.py +1 -1
- airflow/providers/google/cloud/hooks/vertex_ai/auto_ml.py +0 -36
- airflow/providers/google/cloud/hooks/vertex_ai/feature_store.py +307 -7
- airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py +44 -80
- airflow/providers/google/cloud/hooks/vertex_ai/ray.py +11 -2
- airflow/providers/google/cloud/hooks/vision.py +2 -2
- airflow/providers/google/cloud/links/alloy_db.py +0 -46
- airflow/providers/google/cloud/links/base.py +75 -11
- airflow/providers/google/cloud/links/bigquery.py +0 -47
- airflow/providers/google/cloud/links/bigquery_dts.py +0 -20
- airflow/providers/google/cloud/links/bigtable.py +0 -48
- airflow/providers/google/cloud/links/cloud_build.py +0 -73
- airflow/providers/google/cloud/links/cloud_functions.py +0 -33
- airflow/providers/google/cloud/links/cloud_memorystore.py +0 -58
- airflow/providers/google/cloud/links/cloud_run.py +27 -0
- airflow/providers/google/cloud/links/cloud_sql.py +0 -33
- airflow/providers/google/cloud/links/cloud_storage_transfer.py +16 -43
- airflow/providers/google/cloud/links/cloud_tasks.py +6 -25
- airflow/providers/google/cloud/links/compute.py +0 -58
- airflow/providers/google/cloud/links/data_loss_prevention.py +0 -169
- airflow/providers/google/cloud/links/datacatalog.py +23 -54
- airflow/providers/google/cloud/links/dataflow.py +0 -34
- airflow/providers/google/cloud/links/dataform.py +0 -64
- airflow/providers/google/cloud/links/datafusion.py +1 -96
- airflow/providers/google/cloud/links/dataplex.py +0 -154
- airflow/providers/google/cloud/links/dataprep.py +0 -24
- airflow/providers/google/cloud/links/dataproc.py +14 -90
- airflow/providers/google/cloud/links/datastore.py +0 -31
- airflow/providers/google/cloud/links/kubernetes_engine.py +5 -59
- airflow/providers/google/cloud/links/life_sciences.py +0 -19
- airflow/providers/google/cloud/links/managed_kafka.py +0 -70
- airflow/providers/google/cloud/links/mlengine.py +0 -70
- airflow/providers/google/cloud/links/pubsub.py +0 -32
- airflow/providers/google/cloud/links/spanner.py +0 -33
- airflow/providers/google/cloud/links/stackdriver.py +0 -30
- airflow/providers/google/cloud/links/translate.py +16 -186
- airflow/providers/google/cloud/links/vertex_ai.py +8 -224
- airflow/providers/google/cloud/links/workflows.py +0 -52
- airflow/providers/google/cloud/log/gcs_task_handler.py +4 -4
- airflow/providers/google/cloud/operators/alloy_db.py +69 -54
- airflow/providers/google/cloud/operators/automl.py +16 -14
- airflow/providers/google/cloud/operators/bigquery.py +49 -25
- airflow/providers/google/cloud/operators/bigquery_dts.py +2 -4
- airflow/providers/google/cloud/operators/bigtable.py +35 -6
- airflow/providers/google/cloud/operators/cloud_base.py +21 -1
- airflow/providers/google/cloud/operators/cloud_build.py +74 -31
- airflow/providers/google/cloud/operators/cloud_composer.py +34 -35
- airflow/providers/google/cloud/operators/cloud_memorystore.py +68 -42
- airflow/providers/google/cloud/operators/cloud_run.py +9 -1
- airflow/providers/google/cloud/operators/cloud_sql.py +11 -15
- airflow/providers/google/cloud/operators/cloud_storage_transfer_service.py +0 -2
- airflow/providers/google/cloud/operators/compute.py +7 -39
- airflow/providers/google/cloud/operators/datacatalog.py +156 -20
- airflow/providers/google/cloud/operators/dataflow.py +37 -14
- airflow/providers/google/cloud/operators/dataform.py +14 -4
- airflow/providers/google/cloud/operators/datafusion.py +4 -12
- airflow/providers/google/cloud/operators/dataplex.py +180 -96
- airflow/providers/google/cloud/operators/dataprep.py +0 -4
- airflow/providers/google/cloud/operators/dataproc.py +10 -16
- airflow/providers/google/cloud/operators/dataproc_metastore.py +95 -87
- airflow/providers/google/cloud/operators/datastore.py +21 -5
- airflow/providers/google/cloud/operators/dlp.py +3 -26
- airflow/providers/google/cloud/operators/functions.py +15 -6
- airflow/providers/google/cloud/operators/gcs.py +1 -7
- airflow/providers/google/cloud/operators/kubernetes_engine.py +53 -92
- airflow/providers/google/cloud/operators/life_sciences.py +0 -1
- airflow/providers/google/cloud/operators/managed_kafka.py +106 -51
- airflow/providers/google/cloud/operators/mlengine.py +0 -1
- airflow/providers/google/cloud/operators/pubsub.py +4 -5
- airflow/providers/google/cloud/operators/spanner.py +0 -4
- airflow/providers/google/cloud/operators/speech_to_text.py +0 -1
- airflow/providers/google/cloud/operators/stackdriver.py +0 -8
- airflow/providers/google/cloud/operators/tasks.py +0 -11
- airflow/providers/google/cloud/operators/text_to_speech.py +0 -1
- airflow/providers/google/cloud/operators/translate.py +37 -13
- airflow/providers/google/cloud/operators/translate_speech.py +0 -1
- airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py +31 -18
- airflow/providers/google/cloud/operators/vertex_ai/batch_prediction_job.py +28 -8
- airflow/providers/google/cloud/operators/vertex_ai/custom_job.py +38 -25
- airflow/providers/google/cloud/operators/vertex_ai/dataset.py +69 -7
- airflow/providers/google/cloud/operators/vertex_ai/endpoint_service.py +42 -8
- airflow/providers/google/cloud/operators/vertex_ai/feature_store.py +531 -0
- airflow/providers/google/cloud/operators/vertex_ai/generative_model.py +93 -117
- airflow/providers/google/cloud/operators/vertex_ai/hyperparameter_tuning_job.py +10 -8
- airflow/providers/google/cloud/operators/vertex_ai/model_service.py +56 -10
- airflow/providers/google/cloud/operators/vertex_ai/pipeline_job.py +29 -6
- airflow/providers/google/cloud/operators/vertex_ai/ray.py +9 -6
- airflow/providers/google/cloud/operators/workflows.py +1 -9
- airflow/providers/google/cloud/sensors/bigquery.py +1 -1
- airflow/providers/google/cloud/sensors/bigquery_dts.py +6 -1
- airflow/providers/google/cloud/sensors/bigtable.py +15 -3
- airflow/providers/google/cloud/sensors/cloud_composer.py +6 -1
- airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py +6 -1
- airflow/providers/google/cloud/sensors/dataflow.py +3 -3
- airflow/providers/google/cloud/sensors/dataform.py +6 -1
- airflow/providers/google/cloud/sensors/datafusion.py +6 -1
- airflow/providers/google/cloud/sensors/dataplex.py +6 -1
- airflow/providers/google/cloud/sensors/dataprep.py +6 -1
- airflow/providers/google/cloud/sensors/dataproc.py +6 -1
- airflow/providers/google/cloud/sensors/dataproc_metastore.py +6 -1
- airflow/providers/google/cloud/sensors/gcs.py +9 -3
- airflow/providers/google/cloud/sensors/looker.py +6 -1
- airflow/providers/google/cloud/sensors/pubsub.py +8 -3
- airflow/providers/google/cloud/sensors/tasks.py +6 -1
- airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py +6 -1
- airflow/providers/google/cloud/sensors/workflows.py +6 -1
- airflow/providers/google/cloud/transfers/azure_blob_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/azure_fileshare_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/bigquery_to_bigquery.py +10 -7
- airflow/providers/google/cloud/transfers/bigquery_to_gcs.py +1 -2
- airflow/providers/google/cloud/transfers/bigquery_to_mssql.py +0 -1
- airflow/providers/google/cloud/transfers/bigquery_to_sql.py +1 -1
- airflow/providers/google/cloud/transfers/calendar_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/cassandra_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py +2 -2
- airflow/providers/google/cloud/transfers/gcs_to_bigquery.py +1 -2
- airflow/providers/google/cloud/transfers/gcs_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/gcs_to_local.py +1 -1
- airflow/providers/google/cloud/transfers/gcs_to_sftp.py +1 -1
- airflow/providers/google/cloud/transfers/gdrive_to_gcs.py +5 -1
- airflow/providers/google/cloud/transfers/gdrive_to_local.py +1 -1
- airflow/providers/google/cloud/transfers/http_to_gcs.py +193 -0
- airflow/providers/google/cloud/transfers/local_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/s3_to_gcs.py +11 -5
- airflow/providers/google/cloud/transfers/salesforce_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/sftp_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/sheets_to_gcs.py +2 -2
- airflow/providers/google/cloud/transfers/sql_to_gcs.py +1 -1
- airflow/providers/google/cloud/triggers/bigquery.py +32 -5
- airflow/providers/google/cloud/triggers/dataproc.py +62 -10
- airflow/providers/google/cloud/utils/field_validator.py +1 -2
- airflow/providers/google/common/auth_backend/google_openid.py +2 -1
- airflow/providers/google/common/deprecated.py +2 -1
- airflow/providers/google/common/hooks/base_google.py +7 -3
- airflow/providers/google/common/links/storage.py +0 -22
- airflow/providers/google/firebase/operators/firestore.py +1 -1
- airflow/providers/google/get_provider_info.py +14 -16
- airflow/providers/google/leveldb/hooks/leveldb.py +30 -1
- airflow/providers/google/leveldb/operators/leveldb.py +1 -1
- airflow/providers/google/marketing_platform/links/analytics_admin.py +3 -6
- airflow/providers/google/marketing_platform/operators/analytics_admin.py +0 -1
- airflow/providers/google/marketing_platform/operators/campaign_manager.py +4 -4
- airflow/providers/google/marketing_platform/operators/display_video.py +6 -6
- airflow/providers/google/marketing_platform/operators/search_ads.py +1 -1
- airflow/providers/google/marketing_platform/sensors/campaign_manager.py +6 -1
- airflow/providers/google/marketing_platform/sensors/display_video.py +6 -1
- airflow/providers/google/suite/operators/sheets.py +3 -3
- airflow/providers/google/suite/sensors/drive.py +6 -1
- airflow/providers/google/suite/transfers/gcs_to_gdrive.py +1 -1
- airflow/providers/google/suite/transfers/gcs_to_sheets.py +1 -1
- airflow/providers/google/suite/transfers/local_to_drive.py +1 -1
- airflow/providers/google/version_compat.py +28 -0
- {apache_airflow_providers_google-16.0.0a1.dist-info → apache_airflow_providers_google-16.1.0rc1.dist-info}/METADATA +35 -35
- {apache_airflow_providers_google-16.0.0a1.dist-info → apache_airflow_providers_google-16.1.0rc1.dist-info}/RECORD +171 -170
- airflow/providers/google/cloud/links/automl.py +0 -193
- {apache_airflow_providers_google-16.0.0a1.dist-info → apache_airflow_providers_google-16.1.0rc1.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_google-16.0.0a1.dist-info → apache_airflow_providers_google-16.1.0rc1.dist-info}/entry_points.txt +0 -0
@@ -20,12 +20,13 @@
|
|
20
20
|
from __future__ import annotations
|
21
21
|
|
22
22
|
from collections.abc import Sequence
|
23
|
-
from typing import TYPE_CHECKING
|
23
|
+
from typing import TYPE_CHECKING, Any
|
24
24
|
|
25
25
|
from google.api_core.exceptions import NotFound
|
26
26
|
from google.api_core.gapic_v1.method import DEFAULT, _MethodDefault
|
27
27
|
from google.cloud.aiplatform_v1.types import Dataset, ExportDataConfig, ImportDataConfig
|
28
28
|
|
29
|
+
from airflow.exceptions import AirflowException
|
29
30
|
from airflow.providers.google.cloud.hooks.vertex_ai.dataset import DatasetHook
|
30
31
|
from airflow.providers.google.cloud.links.vertex_ai import VertexAIDatasetLink, VertexAIDatasetListLink
|
31
32
|
from airflow.providers.google.cloud.operators.cloud_base import GoogleCloudBaseOperator
|
@@ -85,6 +86,13 @@ class CreateDatasetOperator(GoogleCloudBaseOperator):
|
|
85
86
|
self.gcp_conn_id = gcp_conn_id
|
86
87
|
self.impersonation_chain = impersonation_chain
|
87
88
|
|
89
|
+
@property
|
90
|
+
def extra_links_params(self) -> dict[str, Any]:
|
91
|
+
return {
|
92
|
+
"region": self.region,
|
93
|
+
"project_id": self.project_id,
|
94
|
+
}
|
95
|
+
|
88
96
|
def execute(self, context: Context):
|
89
97
|
hook = DatasetHook(
|
90
98
|
gcp_conn_id=self.gcp_conn_id,
|
@@ -106,8 +114,8 @@ class CreateDatasetOperator(GoogleCloudBaseOperator):
|
|
106
114
|
dataset_id = hook.extract_dataset_id(dataset)
|
107
115
|
self.log.info("Dataset was created. Dataset id: %s", dataset_id)
|
108
116
|
|
109
|
-
|
110
|
-
VertexAIDatasetLink.persist(context=context,
|
117
|
+
context["ti"].xcom_push(key="dataset_id", value=dataset_id)
|
118
|
+
VertexAIDatasetLink.persist(context=context, dataset_id=dataset_id)
|
111
119
|
return dataset
|
112
120
|
|
113
121
|
|
@@ -160,6 +168,13 @@ class GetDatasetOperator(GoogleCloudBaseOperator):
|
|
160
168
|
self.gcp_conn_id = gcp_conn_id
|
161
169
|
self.impersonation_chain = impersonation_chain
|
162
170
|
|
171
|
+
@property
|
172
|
+
def extra_links_params(self) -> dict[str, Any]:
|
173
|
+
return {
|
174
|
+
"region": self.region,
|
175
|
+
"project_id": self.project_id,
|
176
|
+
}
|
177
|
+
|
163
178
|
def execute(self, context: Context):
|
164
179
|
hook = DatasetHook(
|
165
180
|
gcp_conn_id=self.gcp_conn_id,
|
@@ -177,7 +192,7 @@ class GetDatasetOperator(GoogleCloudBaseOperator):
|
|
177
192
|
timeout=self.timeout,
|
178
193
|
metadata=self.metadata,
|
179
194
|
)
|
180
|
-
VertexAIDatasetLink.persist(context=context,
|
195
|
+
VertexAIDatasetLink.persist(context=context, dataset_id=self.dataset_id)
|
181
196
|
self.log.info("Dataset was gotten.")
|
182
197
|
return Dataset.to_dict(dataset_obj)
|
183
198
|
except NotFound:
|
@@ -321,7 +336,21 @@ class ExportDataOperator(GoogleCloudBaseOperator):
|
|
321
336
|
self.log.info("Export was done successfully")
|
322
337
|
|
323
338
|
|
324
|
-
class
|
339
|
+
class DatasetImportDataResultsCheckHelper:
|
340
|
+
"""Helper utils to verify import dataset data results."""
|
341
|
+
|
342
|
+
@staticmethod
|
343
|
+
def _get_number_of_ds_items(dataset, total_key_name):
|
344
|
+
number_of_items = type(dataset).to_dict(dataset).get(total_key_name, 0)
|
345
|
+
return number_of_items
|
346
|
+
|
347
|
+
@staticmethod
|
348
|
+
def _raise_for_empty_import_result(dataset_id, initial_size, size_after_import):
|
349
|
+
if int(size_after_import) - int(initial_size) <= 0:
|
350
|
+
raise AirflowException(f"Empty results of data import for the dataset_id {dataset_id}.")
|
351
|
+
|
352
|
+
|
353
|
+
class ImportDataOperator(GoogleCloudBaseOperator, DatasetImportDataResultsCheckHelper):
|
325
354
|
"""
|
326
355
|
Imports data into a Dataset.
|
327
356
|
|
@@ -342,6 +371,7 @@ class ImportDataOperator(GoogleCloudBaseOperator):
|
|
342
371
|
If set as a sequence, the identities from the list must grant
|
343
372
|
Service Account Token Creator IAM role to the directly preceding identity, with first
|
344
373
|
account from the list granting this role to the originating account (templated).
|
374
|
+
:param raise_for_empty_result: Raise an error if no additional data has been populated after the import.
|
345
375
|
"""
|
346
376
|
|
347
377
|
template_fields = ("region", "dataset_id", "project_id", "impersonation_chain")
|
@@ -358,6 +388,7 @@ class ImportDataOperator(GoogleCloudBaseOperator):
|
|
358
388
|
metadata: Sequence[tuple[str, str]] = (),
|
359
389
|
gcp_conn_id: str = "google_cloud_default",
|
360
390
|
impersonation_chain: str | Sequence[str] | None = None,
|
391
|
+
raise_for_empty_result: bool = False,
|
361
392
|
**kwargs,
|
362
393
|
) -> None:
|
363
394
|
super().__init__(**kwargs)
|
@@ -370,13 +401,24 @@ class ImportDataOperator(GoogleCloudBaseOperator):
|
|
370
401
|
self.metadata = metadata
|
371
402
|
self.gcp_conn_id = gcp_conn_id
|
372
403
|
self.impersonation_chain = impersonation_chain
|
404
|
+
self.raise_for_empty_result = raise_for_empty_result
|
373
405
|
|
374
406
|
def execute(self, context: Context):
|
375
407
|
hook = DatasetHook(
|
376
408
|
gcp_conn_id=self.gcp_conn_id,
|
377
409
|
impersonation_chain=self.impersonation_chain,
|
378
410
|
)
|
379
|
-
|
411
|
+
initial_dataset_size = self._get_number_of_ds_items(
|
412
|
+
dataset=hook.get_dataset(
|
413
|
+
dataset_id=self.dataset_id,
|
414
|
+
project_id=self.project_id,
|
415
|
+
region=self.region,
|
416
|
+
retry=self.retry,
|
417
|
+
timeout=self.timeout,
|
418
|
+
metadata=self.metadata,
|
419
|
+
),
|
420
|
+
total_key_name="data_item_count",
|
421
|
+
)
|
380
422
|
self.log.info("Importing data: %s", self.dataset_id)
|
381
423
|
operation = hook.import_data(
|
382
424
|
project_id=self.project_id,
|
@@ -388,7 +430,21 @@ class ImportDataOperator(GoogleCloudBaseOperator):
|
|
388
430
|
metadata=self.metadata,
|
389
431
|
)
|
390
432
|
hook.wait_for_operation(timeout=self.timeout, operation=operation)
|
433
|
+
result_dataset_size = self._get_number_of_ds_items(
|
434
|
+
dataset=hook.get_dataset(
|
435
|
+
dataset_id=self.dataset_id,
|
436
|
+
project_id=self.project_id,
|
437
|
+
region=self.region,
|
438
|
+
retry=self.retry,
|
439
|
+
timeout=self.timeout,
|
440
|
+
metadata=self.metadata,
|
441
|
+
),
|
442
|
+
total_key_name="data_item_count",
|
443
|
+
)
|
444
|
+
if self.raise_for_empty_result:
|
445
|
+
self._raise_for_empty_import_result(self.dataset_id, initial_dataset_size, result_dataset_size)
|
391
446
|
self.log.info("Import was done successfully")
|
447
|
+
return {"total_data_items_imported": int(result_dataset_size) - int(initial_dataset_size)}
|
392
448
|
|
393
449
|
|
394
450
|
class ListDatasetsOperator(GoogleCloudBaseOperator):
|
@@ -451,6 +507,12 @@ class ListDatasetsOperator(GoogleCloudBaseOperator):
|
|
451
507
|
self.gcp_conn_id = gcp_conn_id
|
452
508
|
self.impersonation_chain = impersonation_chain
|
453
509
|
|
510
|
+
@property
|
511
|
+
def extra_links_params(self) -> dict[str, Any]:
|
512
|
+
return {
|
513
|
+
"project_id": self.project_id,
|
514
|
+
}
|
515
|
+
|
454
516
|
def execute(self, context: Context):
|
455
517
|
hook = DatasetHook(
|
456
518
|
gcp_conn_id=self.gcp_conn_id,
|
@@ -468,7 +530,7 @@ class ListDatasetsOperator(GoogleCloudBaseOperator):
|
|
468
530
|
timeout=self.timeout,
|
469
531
|
metadata=self.metadata,
|
470
532
|
)
|
471
|
-
VertexAIDatasetListLink.persist(context=context
|
533
|
+
VertexAIDatasetListLink.persist(context=context)
|
472
534
|
return [Dataset.to_dict(result) for result in results]
|
473
535
|
|
474
536
|
|
@@ -21,7 +21,7 @@
|
|
21
21
|
from __future__ import annotations
|
22
22
|
|
23
23
|
from collections.abc import Sequence
|
24
|
-
from typing import TYPE_CHECKING
|
24
|
+
from typing import TYPE_CHECKING, Any
|
25
25
|
|
26
26
|
from google.api_core.exceptions import NotFound
|
27
27
|
from google.api_core.gapic_v1.method import DEFAULT, _MethodDefault
|
@@ -93,6 +93,13 @@ class CreateEndpointOperator(GoogleCloudBaseOperator):
|
|
93
93
|
self.gcp_conn_id = gcp_conn_id
|
94
94
|
self.impersonation_chain = impersonation_chain
|
95
95
|
|
96
|
+
@property
|
97
|
+
def extra_links_params(self) -> dict[str, Any]:
|
98
|
+
return {
|
99
|
+
"region": self.region,
|
100
|
+
"project_id": self.project_id,
|
101
|
+
}
|
102
|
+
|
96
103
|
def execute(self, context: Context):
|
97
104
|
hook = EndpointServiceHook(
|
98
105
|
gcp_conn_id=self.gcp_conn_id,
|
@@ -115,8 +122,8 @@ class CreateEndpointOperator(GoogleCloudBaseOperator):
|
|
115
122
|
endpoint_id = hook.extract_endpoint_id(endpoint)
|
116
123
|
self.log.info("Endpoint was created. Endpoint ID: %s", endpoint_id)
|
117
124
|
|
118
|
-
|
119
|
-
VertexAIEndpointLink.persist(context=context,
|
125
|
+
context["ti"].xcom_push(key="endpoint_id", value=endpoint_id)
|
126
|
+
VertexAIEndpointLink.persist(context=context, endpoint_id=endpoint_id)
|
120
127
|
return endpoint
|
121
128
|
|
122
129
|
|
@@ -255,6 +262,13 @@ class DeployModelOperator(GoogleCloudBaseOperator):
|
|
255
262
|
self.gcp_conn_id = gcp_conn_id
|
256
263
|
self.impersonation_chain = impersonation_chain
|
257
264
|
|
265
|
+
@property
|
266
|
+
def extra_links_params(self) -> dict[str, Any]:
|
267
|
+
return {
|
268
|
+
"region": self.region,
|
269
|
+
"project_id": self.project_id,
|
270
|
+
}
|
271
|
+
|
258
272
|
def execute(self, context: Context):
|
259
273
|
hook = EndpointServiceHook(
|
260
274
|
gcp_conn_id=self.gcp_conn_id,
|
@@ -278,8 +292,8 @@ class DeployModelOperator(GoogleCloudBaseOperator):
|
|
278
292
|
deployed_model_id = hook.extract_deployed_model_id(deploy_model)
|
279
293
|
self.log.info("Model was deployed. Deployed Model ID: %s", deployed_model_id)
|
280
294
|
|
281
|
-
|
282
|
-
VertexAIModelLink.persist(context=context,
|
295
|
+
context["ti"].xcom_push(key="deployed_model_id", value=deployed_model_id)
|
296
|
+
VertexAIModelLink.persist(context=context, model_id=deployed_model_id)
|
283
297
|
return deploy_model
|
284
298
|
|
285
299
|
|
@@ -330,6 +344,13 @@ class GetEndpointOperator(GoogleCloudBaseOperator):
|
|
330
344
|
self.gcp_conn_id = gcp_conn_id
|
331
345
|
self.impersonation_chain = impersonation_chain
|
332
346
|
|
347
|
+
@property
|
348
|
+
def extra_links_params(self) -> dict[str, Any]:
|
349
|
+
return {
|
350
|
+
"region": self.region,
|
351
|
+
"project_id": self.project_id,
|
352
|
+
}
|
353
|
+
|
333
354
|
def execute(self, context: Context):
|
334
355
|
hook = EndpointServiceHook(
|
335
356
|
gcp_conn_id=self.gcp_conn_id,
|
@@ -346,7 +367,7 @@ class GetEndpointOperator(GoogleCloudBaseOperator):
|
|
346
367
|
timeout=self.timeout,
|
347
368
|
metadata=self.metadata,
|
348
369
|
)
|
349
|
-
VertexAIEndpointLink.persist(context=context,
|
370
|
+
VertexAIEndpointLink.persist(context=context, endpoint_id=self.endpoint_id)
|
350
371
|
self.log.info("Endpoint was gotten.")
|
351
372
|
return Endpoint.to_dict(endpoint_obj)
|
352
373
|
except NotFound:
|
@@ -429,6 +450,12 @@ class ListEndpointsOperator(GoogleCloudBaseOperator):
|
|
429
450
|
self.gcp_conn_id = gcp_conn_id
|
430
451
|
self.impersonation_chain = impersonation_chain
|
431
452
|
|
453
|
+
@property
|
454
|
+
def extra_links_params(self) -> dict[str, Any]:
|
455
|
+
return {
|
456
|
+
"project_id": self.project_id,
|
457
|
+
}
|
458
|
+
|
432
459
|
def execute(self, context: Context):
|
433
460
|
hook = EndpointServiceHook(
|
434
461
|
gcp_conn_id=self.gcp_conn_id,
|
@@ -446,7 +473,7 @@ class ListEndpointsOperator(GoogleCloudBaseOperator):
|
|
446
473
|
timeout=self.timeout,
|
447
474
|
metadata=self.metadata,
|
448
475
|
)
|
449
|
-
VertexAIEndpointListLink.persist(context=context
|
476
|
+
VertexAIEndpointListLink.persist(context=context)
|
450
477
|
return [Endpoint.to_dict(result) for result in results]
|
451
478
|
|
452
479
|
|
@@ -582,6 +609,13 @@ class UpdateEndpointOperator(GoogleCloudBaseOperator):
|
|
582
609
|
self.gcp_conn_id = gcp_conn_id
|
583
610
|
self.impersonation_chain = impersonation_chain
|
584
611
|
|
612
|
+
@property
|
613
|
+
def extra_links_params(self) -> dict[str, Any]:
|
614
|
+
return {
|
615
|
+
"region": self.region,
|
616
|
+
"project_id": self.project_id,
|
617
|
+
}
|
618
|
+
|
585
619
|
def execute(self, context: Context):
|
586
620
|
hook = EndpointServiceHook(
|
587
621
|
gcp_conn_id=self.gcp_conn_id,
|
@@ -599,5 +633,5 @@ class UpdateEndpointOperator(GoogleCloudBaseOperator):
|
|
599
633
|
metadata=self.metadata,
|
600
634
|
)
|
601
635
|
self.log.info("Endpoint was updated")
|
602
|
-
VertexAIEndpointLink.persist(context=context,
|
636
|
+
VertexAIEndpointLink.persist(context=context, endpoint_id=self.endpoint_id)
|
603
637
|
return Endpoint.to_dict(result)
|