apache-airflow-providers-google 14.0.0__py3-none-any.whl → 19.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/3rd-party-licenses/LICENSES.txt +14 -0
- airflow/providers/google/3rd-party-licenses/NOTICE +5 -0
- airflow/providers/google/__init__.py +3 -3
- airflow/providers/google/_vendor/__init__.py +0 -0
- airflow/providers/google/_vendor/json_merge_patch.py +91 -0
- airflow/providers/google/ads/hooks/ads.py +52 -43
- airflow/providers/google/ads/operators/ads.py +2 -2
- airflow/providers/google/ads/transfers/ads_to_gcs.py +3 -19
- airflow/providers/google/assets/gcs.py +1 -11
- airflow/providers/google/cloud/_internal_client/secret_manager_client.py +3 -2
- airflow/providers/google/cloud/bundles/gcs.py +161 -0
- airflow/providers/google/cloud/hooks/alloy_db.py +2 -3
- airflow/providers/google/cloud/hooks/bigquery.py +195 -318
- airflow/providers/google/cloud/hooks/bigquery_dts.py +8 -8
- airflow/providers/google/cloud/hooks/bigtable.py +3 -2
- airflow/providers/google/cloud/hooks/cloud_batch.py +8 -9
- airflow/providers/google/cloud/hooks/cloud_build.py +6 -65
- airflow/providers/google/cloud/hooks/cloud_composer.py +292 -24
- airflow/providers/google/cloud/hooks/cloud_logging.py +109 -0
- airflow/providers/google/cloud/hooks/cloud_memorystore.py +4 -3
- airflow/providers/google/cloud/hooks/cloud_run.py +20 -11
- airflow/providers/google/cloud/hooks/cloud_sql.py +136 -64
- airflow/providers/google/cloud/hooks/cloud_storage_transfer_service.py +35 -15
- airflow/providers/google/cloud/hooks/compute.py +7 -6
- airflow/providers/google/cloud/hooks/compute_ssh.py +7 -4
- airflow/providers/google/cloud/hooks/datacatalog.py +12 -3
- airflow/providers/google/cloud/hooks/dataflow.py +87 -242
- airflow/providers/google/cloud/hooks/dataform.py +9 -14
- airflow/providers/google/cloud/hooks/datafusion.py +7 -9
- airflow/providers/google/cloud/hooks/dataplex.py +13 -12
- airflow/providers/google/cloud/hooks/dataprep.py +2 -2
- airflow/providers/google/cloud/hooks/dataproc.py +76 -74
- airflow/providers/google/cloud/hooks/dataproc_metastore.py +4 -3
- airflow/providers/google/cloud/hooks/dlp.py +5 -4
- airflow/providers/google/cloud/hooks/gcs.py +144 -33
- airflow/providers/google/cloud/hooks/gen_ai.py +196 -0
- airflow/providers/google/cloud/hooks/kms.py +3 -2
- airflow/providers/google/cloud/hooks/kubernetes_engine.py +22 -17
- airflow/providers/google/cloud/hooks/looker.py +6 -1
- airflow/providers/google/cloud/hooks/managed_kafka.py +227 -3
- airflow/providers/google/cloud/hooks/mlengine.py +7 -8
- airflow/providers/google/cloud/hooks/natural_language.py +3 -2
- airflow/providers/google/cloud/hooks/os_login.py +3 -2
- airflow/providers/google/cloud/hooks/pubsub.py +6 -6
- airflow/providers/google/cloud/hooks/secret_manager.py +105 -12
- airflow/providers/google/cloud/hooks/spanner.py +75 -10
- airflow/providers/google/cloud/hooks/speech_to_text.py +3 -2
- airflow/providers/google/cloud/hooks/stackdriver.py +18 -18
- airflow/providers/google/cloud/hooks/tasks.py +4 -3
- airflow/providers/google/cloud/hooks/text_to_speech.py +3 -2
- airflow/providers/google/cloud/hooks/translate.py +8 -17
- airflow/providers/google/cloud/hooks/vertex_ai/auto_ml.py +8 -222
- airflow/providers/google/cloud/hooks/vertex_ai/batch_prediction_job.py +9 -15
- airflow/providers/google/cloud/hooks/vertex_ai/custom_job.py +33 -283
- airflow/providers/google/cloud/hooks/vertex_ai/dataset.py +5 -12
- airflow/providers/google/cloud/hooks/vertex_ai/endpoint_service.py +6 -12
- airflow/providers/google/cloud/hooks/vertex_ai/experiment_service.py +202 -0
- airflow/providers/google/cloud/hooks/vertex_ai/feature_store.py +311 -10
- airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py +79 -75
- airflow/providers/google/cloud/hooks/vertex_ai/hyperparameter_tuning_job.py +7 -13
- airflow/providers/google/cloud/hooks/vertex_ai/model_service.py +8 -12
- airflow/providers/google/cloud/hooks/vertex_ai/pipeline_job.py +6 -12
- airflow/providers/google/cloud/hooks/vertex_ai/prediction_service.py +3 -2
- airflow/providers/google/cloud/hooks/vertex_ai/ray.py +223 -0
- airflow/providers/google/cloud/hooks/video_intelligence.py +3 -2
- airflow/providers/google/cloud/hooks/vision.py +7 -7
- airflow/providers/google/cloud/hooks/workflows.py +4 -3
- airflow/providers/google/cloud/links/alloy_db.py +0 -46
- airflow/providers/google/cloud/links/base.py +77 -7
- 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/{life_sciences.py → cloud_run.py} +5 -27
- airflow/providers/google/cloud/links/cloud_sql.py +0 -33
- airflow/providers/google/cloud/links/cloud_storage_transfer.py +17 -46
- airflow/providers/google/cloud/links/cloud_tasks.py +7 -26
- 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 -90
- 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 +11 -89
- airflow/providers/google/cloud/links/datastore.py +0 -31
- airflow/providers/google/cloud/links/kubernetes_engine.py +11 -61
- airflow/providers/google/cloud/links/managed_kafka.py +11 -51
- 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 +17 -187
- airflow/providers/google/cloud/links/vertex_ai.py +28 -195
- airflow/providers/google/cloud/links/workflows.py +0 -52
- airflow/providers/google/cloud/log/gcs_task_handler.py +166 -118
- airflow/providers/google/cloud/log/stackdriver_task_handler.py +14 -9
- airflow/providers/google/cloud/openlineage/CloudStorageTransferJobFacet.json +68 -0
- airflow/providers/google/cloud/openlineage/CloudStorageTransferRunFacet.json +60 -0
- airflow/providers/google/cloud/openlineage/DataFusionRunFacet.json +32 -0
- airflow/providers/google/cloud/openlineage/facets.py +141 -40
- airflow/providers/google/cloud/openlineage/mixins.py +14 -13
- airflow/providers/google/cloud/openlineage/utils.py +19 -3
- airflow/providers/google/cloud/operators/alloy_db.py +76 -61
- airflow/providers/google/cloud/operators/bigquery.py +104 -667
- airflow/providers/google/cloud/operators/bigquery_dts.py +12 -12
- airflow/providers/google/cloud/operators/bigtable.py +38 -7
- airflow/providers/google/cloud/operators/cloud_base.py +22 -1
- airflow/providers/google/cloud/operators/cloud_batch.py +18 -18
- airflow/providers/google/cloud/operators/cloud_build.py +80 -36
- airflow/providers/google/cloud/operators/cloud_composer.py +157 -71
- airflow/providers/google/cloud/operators/cloud_logging_sink.py +341 -0
- airflow/providers/google/cloud/operators/cloud_memorystore.py +74 -46
- airflow/providers/google/cloud/operators/cloud_run.py +39 -20
- airflow/providers/google/cloud/operators/cloud_sql.py +46 -61
- airflow/providers/google/cloud/operators/cloud_storage_transfer_service.py +92 -14
- airflow/providers/google/cloud/operators/compute.py +18 -50
- airflow/providers/google/cloud/operators/datacatalog.py +167 -29
- airflow/providers/google/cloud/operators/dataflow.py +38 -15
- airflow/providers/google/cloud/operators/dataform.py +19 -7
- airflow/providers/google/cloud/operators/datafusion.py +43 -43
- airflow/providers/google/cloud/operators/dataplex.py +212 -126
- airflow/providers/google/cloud/operators/dataprep.py +1 -5
- airflow/providers/google/cloud/operators/dataproc.py +134 -207
- airflow/providers/google/cloud/operators/dataproc_metastore.py +102 -84
- airflow/providers/google/cloud/operators/datastore.py +22 -6
- airflow/providers/google/cloud/operators/dlp.py +24 -45
- airflow/providers/google/cloud/operators/functions.py +21 -14
- airflow/providers/google/cloud/operators/gcs.py +15 -12
- airflow/providers/google/cloud/operators/gen_ai.py +389 -0
- airflow/providers/google/cloud/operators/kubernetes_engine.py +115 -106
- airflow/providers/google/cloud/operators/looker.py +1 -1
- airflow/providers/google/cloud/operators/managed_kafka.py +362 -40
- airflow/providers/google/cloud/operators/natural_language.py +5 -3
- airflow/providers/google/cloud/operators/pubsub.py +69 -21
- airflow/providers/google/cloud/operators/spanner.py +53 -45
- airflow/providers/google/cloud/operators/speech_to_text.py +5 -4
- airflow/providers/google/cloud/operators/stackdriver.py +5 -11
- airflow/providers/google/cloud/operators/tasks.py +6 -15
- airflow/providers/google/cloud/operators/text_to_speech.py +4 -3
- airflow/providers/google/cloud/operators/translate.py +46 -20
- airflow/providers/google/cloud/operators/translate_speech.py +4 -3
- airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py +44 -34
- airflow/providers/google/cloud/operators/vertex_ai/batch_prediction_job.py +34 -12
- airflow/providers/google/cloud/operators/vertex_ai/custom_job.py +62 -53
- airflow/providers/google/cloud/operators/vertex_ai/dataset.py +75 -11
- airflow/providers/google/cloud/operators/vertex_ai/endpoint_service.py +48 -12
- airflow/providers/google/cloud/operators/vertex_ai/experiment_service.py +435 -0
- airflow/providers/google/cloud/operators/vertex_ai/feature_store.py +532 -1
- airflow/providers/google/cloud/operators/vertex_ai/generative_model.py +135 -116
- airflow/providers/google/cloud/operators/vertex_ai/hyperparameter_tuning_job.py +16 -12
- airflow/providers/google/cloud/operators/vertex_ai/model_service.py +62 -14
- airflow/providers/google/cloud/operators/vertex_ai/pipeline_job.py +35 -10
- airflow/providers/google/cloud/operators/vertex_ai/ray.py +393 -0
- airflow/providers/google/cloud/operators/video_intelligence.py +5 -3
- airflow/providers/google/cloud/operators/vision.py +7 -5
- airflow/providers/google/cloud/operators/workflows.py +24 -19
- airflow/providers/google/cloud/secrets/secret_manager.py +2 -1
- airflow/providers/google/cloud/sensors/bigquery.py +2 -2
- airflow/providers/google/cloud/sensors/bigquery_dts.py +6 -4
- airflow/providers/google/cloud/sensors/bigtable.py +14 -6
- airflow/providers/google/cloud/sensors/cloud_composer.py +535 -33
- airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py +6 -5
- airflow/providers/google/cloud/sensors/dataflow.py +27 -10
- airflow/providers/google/cloud/sensors/dataform.py +2 -2
- airflow/providers/google/cloud/sensors/datafusion.py +4 -4
- airflow/providers/google/cloud/sensors/dataplex.py +7 -5
- airflow/providers/google/cloud/sensors/dataprep.py +2 -2
- airflow/providers/google/cloud/sensors/dataproc.py +10 -9
- airflow/providers/google/cloud/sensors/dataproc_metastore.py +4 -3
- airflow/providers/google/cloud/sensors/gcs.py +22 -21
- airflow/providers/google/cloud/sensors/looker.py +5 -5
- airflow/providers/google/cloud/sensors/pubsub.py +20 -20
- airflow/providers/google/cloud/sensors/tasks.py +2 -2
- airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py +2 -2
- airflow/providers/google/cloud/sensors/workflows.py +6 -4
- airflow/providers/google/cloud/transfers/adls_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/azure_blob_to_gcs.py +2 -2
- airflow/providers/google/cloud/transfers/azure_fileshare_to_gcs.py +2 -2
- airflow/providers/google/cloud/transfers/bigquery_to_bigquery.py +11 -8
- airflow/providers/google/cloud/transfers/bigquery_to_gcs.py +14 -13
- airflow/providers/google/cloud/transfers/bigquery_to_mssql.py +7 -3
- airflow/providers/google/cloud/transfers/bigquery_to_mysql.py +12 -1
- airflow/providers/google/cloud/transfers/bigquery_to_postgres.py +24 -10
- airflow/providers/google/cloud/transfers/bigquery_to_sql.py +104 -5
- airflow/providers/google/cloud/transfers/calendar_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/cassandra_to_gcs.py +18 -22
- airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py +4 -5
- airflow/providers/google/cloud/transfers/gcs_to_bigquery.py +45 -38
- airflow/providers/google/cloud/transfers/gcs_to_gcs.py +2 -2
- airflow/providers/google/cloud/transfers/gcs_to_local.py +5 -3
- airflow/providers/google/cloud/transfers/gcs_to_sftp.py +10 -4
- airflow/providers/google/cloud/transfers/gdrive_to_gcs.py +6 -2
- airflow/providers/google/cloud/transfers/gdrive_to_local.py +2 -2
- airflow/providers/google/cloud/transfers/http_to_gcs.py +193 -0
- airflow/providers/google/cloud/transfers/local_to_gcs.py +2 -2
- airflow/providers/google/cloud/transfers/mssql_to_gcs.py +1 -1
- airflow/providers/google/cloud/transfers/oracle_to_gcs.py +36 -11
- airflow/providers/google/cloud/transfers/postgres_to_gcs.py +44 -12
- airflow/providers/google/cloud/transfers/s3_to_gcs.py +12 -6
- airflow/providers/google/cloud/transfers/salesforce_to_gcs.py +2 -2
- airflow/providers/google/cloud/transfers/sftp_to_gcs.py +36 -14
- airflow/providers/google/cloud/transfers/sheets_to_gcs.py +3 -3
- airflow/providers/google/cloud/transfers/sql_to_gcs.py +10 -10
- airflow/providers/google/cloud/triggers/bigquery.py +75 -34
- airflow/providers/google/cloud/triggers/bigquery_dts.py +2 -1
- airflow/providers/google/cloud/triggers/cloud_batch.py +2 -1
- airflow/providers/google/cloud/triggers/cloud_build.py +3 -2
- airflow/providers/google/cloud/triggers/cloud_composer.py +303 -47
- airflow/providers/google/cloud/triggers/cloud_run.py +2 -2
- airflow/providers/google/cloud/triggers/cloud_storage_transfer_service.py +96 -5
- airflow/providers/google/cloud/triggers/dataflow.py +125 -2
- airflow/providers/google/cloud/triggers/datafusion.py +1 -1
- airflow/providers/google/cloud/triggers/dataplex.py +16 -3
- airflow/providers/google/cloud/triggers/dataproc.py +124 -53
- airflow/providers/google/cloud/triggers/kubernetes_engine.py +46 -28
- airflow/providers/google/cloud/triggers/mlengine.py +1 -1
- airflow/providers/google/cloud/triggers/pubsub.py +17 -20
- airflow/providers/google/cloud/triggers/vertex_ai.py +8 -7
- airflow/providers/google/cloud/utils/bigquery.py +5 -7
- airflow/providers/google/cloud/utils/bigquery_get_data.py +1 -1
- airflow/providers/google/cloud/utils/credentials_provider.py +4 -3
- airflow/providers/google/cloud/utils/dataform.py +1 -1
- airflow/providers/google/cloud/utils/external_token_supplier.py +0 -1
- airflow/providers/google/cloud/utils/field_validator.py +1 -2
- airflow/providers/google/cloud/utils/validators.py +43 -0
- airflow/providers/google/common/auth_backend/google_openid.py +26 -9
- airflow/providers/google/common/consts.py +2 -1
- airflow/providers/google/common/deprecated.py +2 -1
- airflow/providers/google/common/hooks/base_google.py +40 -43
- airflow/providers/google/common/hooks/operation_helpers.py +78 -0
- airflow/providers/google/common/links/storage.py +0 -22
- airflow/providers/google/common/utils/get_secret.py +31 -0
- airflow/providers/google/common/utils/id_token_credentials.py +4 -5
- airflow/providers/google/firebase/operators/firestore.py +2 -2
- airflow/providers/google/get_provider_info.py +61 -216
- airflow/providers/google/go_module_utils.py +35 -3
- airflow/providers/google/leveldb/hooks/leveldb.py +30 -6
- airflow/providers/google/leveldb/operators/leveldb.py +2 -2
- airflow/providers/google/marketing_platform/hooks/analytics_admin.py +3 -2
- airflow/providers/google/marketing_platform/hooks/display_video.py +3 -109
- airflow/providers/google/marketing_platform/hooks/search_ads.py +1 -1
- airflow/providers/google/marketing_platform/links/analytics_admin.py +4 -5
- airflow/providers/google/marketing_platform/operators/analytics_admin.py +7 -6
- airflow/providers/google/marketing_platform/operators/campaign_manager.py +5 -5
- airflow/providers/google/marketing_platform/operators/display_video.py +28 -489
- airflow/providers/google/marketing_platform/operators/search_ads.py +2 -2
- airflow/providers/google/marketing_platform/sensors/campaign_manager.py +2 -2
- airflow/providers/google/marketing_platform/sensors/display_video.py +4 -64
- airflow/providers/google/suite/hooks/calendar.py +1 -1
- airflow/providers/google/suite/hooks/drive.py +2 -2
- airflow/providers/google/suite/hooks/sheets.py +15 -1
- airflow/providers/google/suite/operators/sheets.py +8 -3
- airflow/providers/google/suite/sensors/drive.py +2 -2
- airflow/providers/google/suite/transfers/gcs_to_gdrive.py +2 -2
- airflow/providers/google/suite/transfers/gcs_to_sheets.py +1 -1
- airflow/providers/google/suite/transfers/local_to_drive.py +3 -3
- airflow/providers/google/suite/transfers/sql_to_sheets.py +5 -4
- airflow/providers/google/version_compat.py +15 -1
- {apache_airflow_providers_google-14.0.0.dist-info → apache_airflow_providers_google-19.1.0rc1.dist-info}/METADATA +117 -72
- apache_airflow_providers_google-19.1.0rc1.dist-info/RECORD +331 -0
- {apache_airflow_providers_google-14.0.0.dist-info → apache_airflow_providers_google-19.1.0rc1.dist-info}/WHEEL +1 -1
- apache_airflow_providers_google-19.1.0rc1.dist-info/licenses/NOTICE +5 -0
- airflow/providers/google/cloud/example_dags/example_cloud_task.py +0 -54
- airflow/providers/google/cloud/hooks/automl.py +0 -679
- airflow/providers/google/cloud/hooks/life_sciences.py +0 -159
- airflow/providers/google/cloud/links/automl.py +0 -193
- airflow/providers/google/cloud/operators/automl.py +0 -1360
- airflow/providers/google/cloud/operators/life_sciences.py +0 -119
- airflow/providers/google/cloud/operators/mlengine.py +0 -1515
- airflow/providers/google/cloud/utils/mlengine_operator_utils.py +0 -273
- apache_airflow_providers_google-14.0.0.dist-info/RECORD +0 -318
- /airflow/providers/google/cloud/{example_dags → bundles}/__init__.py +0 -0
- {apache_airflow_providers_google-14.0.0.dist-info → apache_airflow_providers_google-19.1.0rc1.dist-info}/entry_points.txt +0 -0
- {airflow/providers/google → apache_airflow_providers_google-19.1.0rc1.dist-info/licenses}/LICENSE +0 -0
|
@@ -25,13 +25,13 @@ from typing import TYPE_CHECKING, Any
|
|
|
25
25
|
import attr
|
|
26
26
|
|
|
27
27
|
from airflow.exceptions import AirflowProviderDeprecationWarning
|
|
28
|
-
from airflow.
|
|
28
|
+
from airflow.providers.common.compat.sdk import BaseOperatorLink, XCom
|
|
29
29
|
from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink
|
|
30
30
|
|
|
31
31
|
if TYPE_CHECKING:
|
|
32
|
-
from airflow.models import BaseOperator
|
|
33
32
|
from airflow.models.taskinstancekey import TaskInstanceKey
|
|
34
|
-
from airflow.
|
|
33
|
+
from airflow.providers.common.compat.sdk import Context
|
|
34
|
+
from airflow.providers.google.version_compat import BaseOperator
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
def __getattr__(name: str) -> Any:
|
|
@@ -87,16 +87,16 @@ class DataprocLink(BaseOperatorLink):
|
|
|
87
87
|
@staticmethod
|
|
88
88
|
def persist(
|
|
89
89
|
context: Context,
|
|
90
|
-
task_instance,
|
|
91
90
|
url: str,
|
|
92
91
|
resource: str,
|
|
92
|
+
region: str,
|
|
93
|
+
project_id: str,
|
|
93
94
|
):
|
|
94
|
-
task_instance.xcom_push(
|
|
95
|
-
context=context,
|
|
95
|
+
context["task_instance"].xcom_push(
|
|
96
96
|
key=DataprocLink.key,
|
|
97
97
|
value={
|
|
98
|
-
"region":
|
|
99
|
-
"project_id":
|
|
98
|
+
"region": region,
|
|
99
|
+
"project_id": project_id,
|
|
100
100
|
"url": url,
|
|
101
101
|
"resource": resource,
|
|
102
102
|
},
|
|
@@ -119,7 +119,6 @@ class DataprocLink(BaseOperatorLink):
|
|
|
119
119
|
|
|
120
120
|
def __attrs_post_init__(self):
|
|
121
121
|
# This link is still used into the selected operators
|
|
122
|
-
# - airflow.providers.google.cloud.operators.dataproc.DataprocScaleClusterOperator
|
|
123
122
|
# - airflow.providers.google.cloud.operators.dataproc.DataprocJobBaseOperator
|
|
124
123
|
# As soon as we remove reference to this link we might deprecate it by add warning message
|
|
125
124
|
# with `stacklevel=3` below in this method.
|
|
@@ -141,14 +140,13 @@ class DataprocListLink(BaseOperatorLink):
|
|
|
141
140
|
@staticmethod
|
|
142
141
|
def persist(
|
|
143
142
|
context: Context,
|
|
144
|
-
task_instance,
|
|
145
143
|
url: str,
|
|
144
|
+
project_id: str,
|
|
146
145
|
):
|
|
147
|
-
task_instance.xcom_push(
|
|
148
|
-
context=context,
|
|
146
|
+
context["task_instance"].xcom_push(
|
|
149
147
|
key=DataprocListLink.key,
|
|
150
148
|
value={
|
|
151
|
-
"project_id":
|
|
149
|
+
"project_id": project_id,
|
|
152
150
|
"url": url,
|
|
153
151
|
},
|
|
154
152
|
)
|
|
@@ -183,20 +181,6 @@ class DataprocClusterLink(BaseGoogleLink):
|
|
|
183
181
|
key = "dataproc_cluster"
|
|
184
182
|
format_str = DATAPROC_CLUSTER_LINK
|
|
185
183
|
|
|
186
|
-
@staticmethod
|
|
187
|
-
def persist(
|
|
188
|
-
context: Context,
|
|
189
|
-
operator: BaseOperator,
|
|
190
|
-
cluster_id: str,
|
|
191
|
-
region: str,
|
|
192
|
-
project_id: str,
|
|
193
|
-
):
|
|
194
|
-
operator.xcom_push(
|
|
195
|
-
context,
|
|
196
|
-
key=DataprocClusterLink.key,
|
|
197
|
-
value={"cluster_id": cluster_id, "region": region, "project_id": project_id},
|
|
198
|
-
)
|
|
199
|
-
|
|
200
184
|
|
|
201
185
|
class DataprocJobLink(BaseGoogleLink):
|
|
202
186
|
"""Helper class for constructing Dataproc Job Link."""
|
|
@@ -205,20 +189,6 @@ class DataprocJobLink(BaseGoogleLink):
|
|
|
205
189
|
key = "dataproc_job"
|
|
206
190
|
format_str = DATAPROC_JOB_LINK
|
|
207
191
|
|
|
208
|
-
@staticmethod
|
|
209
|
-
def persist(
|
|
210
|
-
context: Context,
|
|
211
|
-
operator: BaseOperator,
|
|
212
|
-
job_id: str,
|
|
213
|
-
region: str,
|
|
214
|
-
project_id: str,
|
|
215
|
-
):
|
|
216
|
-
operator.xcom_push(
|
|
217
|
-
context,
|
|
218
|
-
key=DataprocJobLink.key,
|
|
219
|
-
value={"job_id": job_id, "region": region, "project_id": project_id},
|
|
220
|
-
)
|
|
221
|
-
|
|
222
192
|
|
|
223
193
|
class DataprocWorkflowLink(BaseGoogleLink):
|
|
224
194
|
"""Helper class for constructing Dataproc Workflow Link."""
|
|
@@ -227,14 +197,6 @@ class DataprocWorkflowLink(BaseGoogleLink):
|
|
|
227
197
|
key = "dataproc_workflow"
|
|
228
198
|
format_str = DATAPROC_WORKFLOW_LINK
|
|
229
199
|
|
|
230
|
-
@staticmethod
|
|
231
|
-
def persist(context: Context, operator: BaseOperator, workflow_id: str, project_id: str, region: str):
|
|
232
|
-
operator.xcom_push(
|
|
233
|
-
context,
|
|
234
|
-
key=DataprocWorkflowLink.key,
|
|
235
|
-
value={"workflow_id": workflow_id, "region": region, "project_id": project_id},
|
|
236
|
-
)
|
|
237
|
-
|
|
238
200
|
|
|
239
201
|
class DataprocWorkflowTemplateLink(BaseGoogleLink):
|
|
240
202
|
"""Helper class for constructing Dataproc Workflow Template Link."""
|
|
@@ -243,20 +205,6 @@ class DataprocWorkflowTemplateLink(BaseGoogleLink):
|
|
|
243
205
|
key = "dataproc_workflow_template"
|
|
244
206
|
format_str = DATAPROC_WORKFLOW_TEMPLATE_LINK
|
|
245
207
|
|
|
246
|
-
@staticmethod
|
|
247
|
-
def persist(
|
|
248
|
-
context: Context,
|
|
249
|
-
operator: BaseOperator,
|
|
250
|
-
workflow_template_id: str,
|
|
251
|
-
project_id: str,
|
|
252
|
-
region: str,
|
|
253
|
-
):
|
|
254
|
-
operator.xcom_push(
|
|
255
|
-
context,
|
|
256
|
-
key=DataprocWorkflowTemplateLink.key,
|
|
257
|
-
value={"workflow_template_id": workflow_template_id, "region": region, "project_id": project_id},
|
|
258
|
-
)
|
|
259
|
-
|
|
260
208
|
|
|
261
209
|
class DataprocBatchLink(BaseGoogleLink):
|
|
262
210
|
"""Helper class for constructing Dataproc Batch Link."""
|
|
@@ -265,20 +213,6 @@ class DataprocBatchLink(BaseGoogleLink):
|
|
|
265
213
|
key = "dataproc_batch"
|
|
266
214
|
format_str = DATAPROC_BATCH_LINK
|
|
267
215
|
|
|
268
|
-
@staticmethod
|
|
269
|
-
def persist(
|
|
270
|
-
context: Context,
|
|
271
|
-
operator: BaseOperator,
|
|
272
|
-
batch_id: str,
|
|
273
|
-
project_id: str,
|
|
274
|
-
region: str,
|
|
275
|
-
):
|
|
276
|
-
operator.xcom_push(
|
|
277
|
-
context,
|
|
278
|
-
key=DataprocBatchLink.key,
|
|
279
|
-
value={"batch_id": batch_id, "region": region, "project_id": project_id},
|
|
280
|
-
)
|
|
281
|
-
|
|
282
216
|
|
|
283
217
|
class DataprocBatchesListLink(BaseGoogleLink):
|
|
284
218
|
"""Helper class for constructing Dataproc Batches List Link."""
|
|
@@ -286,15 +220,3 @@ class DataprocBatchesListLink(BaseGoogleLink):
|
|
|
286
220
|
name = "Dataproc Batches List"
|
|
287
221
|
key = "dataproc_batches_list"
|
|
288
222
|
format_str = DATAPROC_BATCHES_LINK
|
|
289
|
-
|
|
290
|
-
@staticmethod
|
|
291
|
-
def persist(
|
|
292
|
-
context: Context,
|
|
293
|
-
operator: BaseOperator,
|
|
294
|
-
project_id: str,
|
|
295
|
-
):
|
|
296
|
-
operator.xcom_push(
|
|
297
|
-
context,
|
|
298
|
-
key=DataprocBatchesListLink.key,
|
|
299
|
-
value={"project_id": project_id},
|
|
300
|
-
)
|
|
@@ -16,13 +16,8 @@
|
|
|
16
16
|
# under the License.
|
|
17
17
|
from __future__ import annotations
|
|
18
18
|
|
|
19
|
-
from typing import TYPE_CHECKING
|
|
20
|
-
|
|
21
19
|
from airflow.providers.google.cloud.links.base import BaseGoogleLink
|
|
22
20
|
|
|
23
|
-
if TYPE_CHECKING:
|
|
24
|
-
from airflow.utils.context import Context
|
|
25
|
-
|
|
26
21
|
DATASTORE_BASE_LINK = "/datastore"
|
|
27
22
|
DATASTORE_IMPORT_EXPORT_LINK = DATASTORE_BASE_LINK + "/import-export?project={project_id}"
|
|
28
23
|
DATASTORE_EXPORT_ENTITIES_LINK = "/storage/browser/{bucket_name}/{export_name}?project={project_id}"
|
|
@@ -36,19 +31,6 @@ class CloudDatastoreImportExportLink(BaseGoogleLink):
|
|
|
36
31
|
key = "import_export_conf"
|
|
37
32
|
format_str = DATASTORE_IMPORT_EXPORT_LINK
|
|
38
33
|
|
|
39
|
-
@staticmethod
|
|
40
|
-
def persist(
|
|
41
|
-
context: Context,
|
|
42
|
-
task_instance,
|
|
43
|
-
):
|
|
44
|
-
task_instance.xcom_push(
|
|
45
|
-
context=context,
|
|
46
|
-
key=CloudDatastoreImportExportLink.key,
|
|
47
|
-
value={
|
|
48
|
-
"project_id": task_instance.project_id,
|
|
49
|
-
},
|
|
50
|
-
)
|
|
51
|
-
|
|
52
34
|
|
|
53
35
|
class CloudDatastoreEntitiesLink(BaseGoogleLink):
|
|
54
36
|
"""Helper class for constructing Cloud Datastore Entities Link."""
|
|
@@ -56,16 +38,3 @@ class CloudDatastoreEntitiesLink(BaseGoogleLink):
|
|
|
56
38
|
name = "Entities"
|
|
57
39
|
key = "entities_conf"
|
|
58
40
|
format_str = DATASTORE_ENTITIES_LINK
|
|
59
|
-
|
|
60
|
-
@staticmethod
|
|
61
|
-
def persist(
|
|
62
|
-
context: Context,
|
|
63
|
-
task_instance,
|
|
64
|
-
):
|
|
65
|
-
task_instance.xcom_push(
|
|
66
|
-
context=context,
|
|
67
|
-
key=CloudDatastoreEntitiesLink.key,
|
|
68
|
-
value={
|
|
69
|
-
"project_id": task_instance.project_id,
|
|
70
|
-
},
|
|
71
|
-
)
|
|
@@ -19,11 +19,12 @@ from __future__ import annotations
|
|
|
19
19
|
import json
|
|
20
20
|
from typing import TYPE_CHECKING
|
|
21
21
|
|
|
22
|
-
from airflow.providers.google.cloud.links.base import BaseGoogleLink
|
|
23
22
|
from google.cloud.container_v1.types import Cluster
|
|
24
23
|
|
|
24
|
+
from airflow.providers.google.cloud.links.base import BaseGoogleLink
|
|
25
|
+
|
|
25
26
|
if TYPE_CHECKING:
|
|
26
|
-
from airflow.
|
|
27
|
+
from airflow.providers.common.compat.sdk import Context
|
|
27
28
|
|
|
28
29
|
KUBERNETES_BASE_LINK = "/kubernetes"
|
|
29
30
|
KUBERNETES_CLUSTER_LINK = (
|
|
@@ -50,19 +51,18 @@ class KubernetesEngineClusterLink(BaseGoogleLink):
|
|
|
50
51
|
key = "kubernetes_cluster_conf"
|
|
51
52
|
format_str = KUBERNETES_CLUSTER_LINK
|
|
52
53
|
|
|
53
|
-
@
|
|
54
|
-
def persist(context: Context,
|
|
54
|
+
@classmethod
|
|
55
|
+
def persist(cls, context: Context, **value):
|
|
56
|
+
cluster = value.get("cluster")
|
|
55
57
|
if isinstance(cluster, dict):
|
|
56
58
|
cluster = Cluster.from_json(json.dumps(cluster))
|
|
57
59
|
|
|
58
|
-
|
|
60
|
+
if not cluster:
|
|
61
|
+
raise ValueError("Cluster must be provided for KubernetesEngineClusterLink.")
|
|
62
|
+
|
|
63
|
+
super().persist(
|
|
59
64
|
context=context,
|
|
60
|
-
|
|
61
|
-
value={
|
|
62
|
-
"location": task_instance.location,
|
|
63
|
-
"cluster_name": cluster.name, # type: ignore
|
|
64
|
-
"project_id": task_instance.project_id,
|
|
65
|
-
},
|
|
65
|
+
cluster_name=cluster.name,
|
|
66
66
|
)
|
|
67
67
|
|
|
68
68
|
|
|
@@ -73,23 +73,6 @@ class KubernetesEnginePodLink(BaseGoogleLink):
|
|
|
73
73
|
key = "kubernetes_pod_conf"
|
|
74
74
|
format_str = KUBERNETES_POD_LINK
|
|
75
75
|
|
|
76
|
-
@staticmethod
|
|
77
|
-
def persist(
|
|
78
|
-
context: Context,
|
|
79
|
-
task_instance,
|
|
80
|
-
):
|
|
81
|
-
task_instance.xcom_push(
|
|
82
|
-
context=context,
|
|
83
|
-
key=KubernetesEnginePodLink.key,
|
|
84
|
-
value={
|
|
85
|
-
"location": task_instance.location,
|
|
86
|
-
"cluster_name": task_instance.cluster_name,
|
|
87
|
-
"namespace": task_instance.pod.metadata.namespace,
|
|
88
|
-
"pod_name": task_instance.pod.metadata.name,
|
|
89
|
-
"project_id": task_instance.project_id,
|
|
90
|
-
},
|
|
91
|
-
)
|
|
92
|
-
|
|
93
76
|
|
|
94
77
|
class KubernetesEngineJobLink(BaseGoogleLink):
|
|
95
78
|
"""Helper class for constructing Kubernetes Engine Job Link."""
|
|
@@ -98,23 +81,6 @@ class KubernetesEngineJobLink(BaseGoogleLink):
|
|
|
98
81
|
key = "kubernetes_job_conf"
|
|
99
82
|
format_str = KUBERNETES_JOB_LINK
|
|
100
83
|
|
|
101
|
-
@staticmethod
|
|
102
|
-
def persist(
|
|
103
|
-
context: Context,
|
|
104
|
-
task_instance,
|
|
105
|
-
):
|
|
106
|
-
task_instance.xcom_push(
|
|
107
|
-
context=context,
|
|
108
|
-
key=KubernetesEngineJobLink.key,
|
|
109
|
-
value={
|
|
110
|
-
"location": task_instance.location,
|
|
111
|
-
"cluster_name": task_instance.cluster_name,
|
|
112
|
-
"namespace": task_instance.job.metadata.namespace,
|
|
113
|
-
"job_name": task_instance.job.metadata.name,
|
|
114
|
-
"project_id": task_instance.project_id,
|
|
115
|
-
},
|
|
116
|
-
)
|
|
117
|
-
|
|
118
84
|
|
|
119
85
|
class KubernetesEngineWorkloadsLink(BaseGoogleLink):
|
|
120
86
|
"""Helper class for constructing Kubernetes Engine Workloads Link."""
|
|
@@ -122,19 +88,3 @@ class KubernetesEngineWorkloadsLink(BaseGoogleLink):
|
|
|
122
88
|
name = "Kubernetes Workloads"
|
|
123
89
|
key = "kubernetes_workloads_conf"
|
|
124
90
|
format_str = KUBERNETES_WORKLOADS_LINK
|
|
125
|
-
|
|
126
|
-
@staticmethod
|
|
127
|
-
def persist(
|
|
128
|
-
context: Context,
|
|
129
|
-
task_instance,
|
|
130
|
-
):
|
|
131
|
-
task_instance.xcom_push(
|
|
132
|
-
context=context,
|
|
133
|
-
key=KubernetesEngineWorkloadsLink.key,
|
|
134
|
-
value={
|
|
135
|
-
"location": task_instance.location,
|
|
136
|
-
"cluster_name": task_instance.cluster_name,
|
|
137
|
-
"namespace": task_instance.namespace,
|
|
138
|
-
"project_id": task_instance.project_id,
|
|
139
|
-
},
|
|
140
|
-
)
|
|
@@ -16,13 +16,8 @@
|
|
|
16
16
|
# under the License.
|
|
17
17
|
from __future__ import annotations
|
|
18
18
|
|
|
19
|
-
from typing import TYPE_CHECKING
|
|
20
|
-
|
|
21
19
|
from airflow.providers.google.cloud.links.base import BaseGoogleLink
|
|
22
20
|
|
|
23
|
-
if TYPE_CHECKING:
|
|
24
|
-
from airflow.utils.context import Context
|
|
25
|
-
|
|
26
21
|
MANAGED_KAFKA_BASE_LINK = "/managedkafka"
|
|
27
22
|
MANAGED_KAFKA_CLUSTER_LINK = (
|
|
28
23
|
MANAGED_KAFKA_BASE_LINK + "/{location}/clusters/{cluster_id}?project={project_id}"
|
|
@@ -31,6 +26,10 @@ MANAGED_KAFKA_CLUSTER_LIST_LINK = MANAGED_KAFKA_BASE_LINK + "/clusters?project={
|
|
|
31
26
|
MANAGED_KAFKA_TOPIC_LINK = (
|
|
32
27
|
MANAGED_KAFKA_BASE_LINK + "/{location}/clusters/{cluster_id}/topics/{topic_id}?project={project_id}"
|
|
33
28
|
)
|
|
29
|
+
MANAGED_KAFKA_CONSUMER_GROUP_LINK = (
|
|
30
|
+
MANAGED_KAFKA_BASE_LINK
|
|
31
|
+
+ "/{location}/clusters/{cluster_id}/consumer_groups/{consumer_group_id}?project={project_id}"
|
|
32
|
+
)
|
|
34
33
|
|
|
35
34
|
|
|
36
35
|
class ApacheKafkaClusterLink(BaseGoogleLink):
|
|
@@ -40,22 +39,6 @@ class ApacheKafkaClusterLink(BaseGoogleLink):
|
|
|
40
39
|
key = "cluster_conf"
|
|
41
40
|
format_str = MANAGED_KAFKA_CLUSTER_LINK
|
|
42
41
|
|
|
43
|
-
@staticmethod
|
|
44
|
-
def persist(
|
|
45
|
-
context: Context,
|
|
46
|
-
task_instance,
|
|
47
|
-
cluster_id: str,
|
|
48
|
-
):
|
|
49
|
-
task_instance.xcom_push(
|
|
50
|
-
context=context,
|
|
51
|
-
key=ApacheKafkaClusterLink.key,
|
|
52
|
-
value={
|
|
53
|
-
"location": task_instance.location,
|
|
54
|
-
"cluster_id": cluster_id,
|
|
55
|
-
"project_id": task_instance.project_id,
|
|
56
|
-
},
|
|
57
|
-
)
|
|
58
|
-
|
|
59
42
|
|
|
60
43
|
class ApacheKafkaClusterListLink(BaseGoogleLink):
|
|
61
44
|
"""Helper class for constructing Apache Kafka Clusters link."""
|
|
@@ -64,19 +47,6 @@ class ApacheKafkaClusterListLink(BaseGoogleLink):
|
|
|
64
47
|
key = "cluster_list_conf"
|
|
65
48
|
format_str = MANAGED_KAFKA_CLUSTER_LIST_LINK
|
|
66
49
|
|
|
67
|
-
@staticmethod
|
|
68
|
-
def persist(
|
|
69
|
-
context: Context,
|
|
70
|
-
task_instance,
|
|
71
|
-
):
|
|
72
|
-
task_instance.xcom_push(
|
|
73
|
-
context=context,
|
|
74
|
-
key=ApacheKafkaClusterListLink.key,
|
|
75
|
-
value={
|
|
76
|
-
"project_id": task_instance.project_id,
|
|
77
|
-
},
|
|
78
|
-
)
|
|
79
|
-
|
|
80
50
|
|
|
81
51
|
class ApacheKafkaTopicLink(BaseGoogleLink):
|
|
82
52
|
"""Helper class for constructing Apache Kafka Topic link."""
|
|
@@ -85,20 +55,10 @@ class ApacheKafkaTopicLink(BaseGoogleLink):
|
|
|
85
55
|
key = "topic_conf"
|
|
86
56
|
format_str = MANAGED_KAFKA_TOPIC_LINK
|
|
87
57
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
task_instance.xcom_push(
|
|
96
|
-
context=context,
|
|
97
|
-
key=ApacheKafkaTopicLink.key,
|
|
98
|
-
value={
|
|
99
|
-
"location": task_instance.location,
|
|
100
|
-
"cluster_id": cluster_id,
|
|
101
|
-
"topic_id": topic_id,
|
|
102
|
-
"project_id": task_instance.project_id,
|
|
103
|
-
},
|
|
104
|
-
)
|
|
58
|
+
|
|
59
|
+
class ApacheKafkaConsumerGroupLink(BaseGoogleLink):
|
|
60
|
+
"""Helper class for constructing Apache Kafka Consumer Group link."""
|
|
61
|
+
|
|
62
|
+
name = "Apache Kafka Consumer Group"
|
|
63
|
+
key = "consumer_group_conf"
|
|
64
|
+
format_str = MANAGED_KAFKA_CONSUMER_GROUP_LINK
|
|
@@ -19,14 +19,8 @@
|
|
|
19
19
|
|
|
20
20
|
from __future__ import annotations
|
|
21
21
|
|
|
22
|
-
from typing import TYPE_CHECKING
|
|
23
|
-
|
|
24
22
|
from airflow.providers.google.cloud.links.base import BaseGoogleLink
|
|
25
23
|
|
|
26
|
-
if TYPE_CHECKING:
|
|
27
|
-
from airflow.utils.context import Context
|
|
28
|
-
|
|
29
|
-
|
|
30
24
|
MLENGINE_BASE_LINK = "https://console.cloud.google.com/ai-platform"
|
|
31
25
|
MLENGINE_MODEL_DETAILS_LINK = MLENGINE_BASE_LINK + "/models/{model_id}/versions?project={project_id}"
|
|
32
26
|
MLENGINE_MODEL_VERSION_DETAILS_LINK = (
|
|
@@ -44,19 +38,6 @@ class MLEngineModelLink(BaseGoogleLink):
|
|
|
44
38
|
key = "ml_engine_model"
|
|
45
39
|
format_str = MLENGINE_MODEL_DETAILS_LINK
|
|
46
40
|
|
|
47
|
-
@staticmethod
|
|
48
|
-
def persist(
|
|
49
|
-
context: Context,
|
|
50
|
-
task_instance,
|
|
51
|
-
model_id: str,
|
|
52
|
-
project_id: str,
|
|
53
|
-
):
|
|
54
|
-
task_instance.xcom_push(
|
|
55
|
-
context,
|
|
56
|
-
key=MLEngineModelLink.key,
|
|
57
|
-
value={"model_id": model_id, "project_id": project_id},
|
|
58
|
-
)
|
|
59
|
-
|
|
60
41
|
|
|
61
42
|
class MLEngineModelsListLink(BaseGoogleLink):
|
|
62
43
|
"""Helper class for constructing ML Engine link."""
|
|
@@ -65,18 +46,6 @@ class MLEngineModelsListLink(BaseGoogleLink):
|
|
|
65
46
|
key = "ml_engine_models_list"
|
|
66
47
|
format_str = MLENGINE_MODELS_LIST_LINK
|
|
67
48
|
|
|
68
|
-
@staticmethod
|
|
69
|
-
def persist(
|
|
70
|
-
context: Context,
|
|
71
|
-
task_instance,
|
|
72
|
-
project_id: str,
|
|
73
|
-
):
|
|
74
|
-
task_instance.xcom_push(
|
|
75
|
-
context,
|
|
76
|
-
key=MLEngineModelsListLink.key,
|
|
77
|
-
value={"project_id": project_id},
|
|
78
|
-
)
|
|
79
|
-
|
|
80
49
|
|
|
81
50
|
class MLEngineJobDetailsLink(BaseGoogleLink):
|
|
82
51
|
"""Helper class for constructing ML Engine link."""
|
|
@@ -85,19 +54,6 @@ class MLEngineJobDetailsLink(BaseGoogleLink):
|
|
|
85
54
|
key = "ml_engine_job_details"
|
|
86
55
|
format_str = MLENGINE_JOB_DETAILS_LINK
|
|
87
56
|
|
|
88
|
-
@staticmethod
|
|
89
|
-
def persist(
|
|
90
|
-
context: Context,
|
|
91
|
-
task_instance,
|
|
92
|
-
job_id: str,
|
|
93
|
-
project_id: str,
|
|
94
|
-
):
|
|
95
|
-
task_instance.xcom_push(
|
|
96
|
-
context,
|
|
97
|
-
key=MLEngineJobDetailsLink.key,
|
|
98
|
-
value={"job_id": job_id, "project_id": project_id},
|
|
99
|
-
)
|
|
100
|
-
|
|
101
57
|
|
|
102
58
|
class MLEngineModelVersionDetailsLink(BaseGoogleLink):
|
|
103
59
|
"""Helper class for constructing ML Engine link."""
|
|
@@ -106,20 +62,6 @@ class MLEngineModelVersionDetailsLink(BaseGoogleLink):
|
|
|
106
62
|
key = "ml_engine_version_details"
|
|
107
63
|
format_str = MLENGINE_MODEL_VERSION_DETAILS_LINK
|
|
108
64
|
|
|
109
|
-
@staticmethod
|
|
110
|
-
def persist(
|
|
111
|
-
context: Context,
|
|
112
|
-
task_instance,
|
|
113
|
-
model_id: str,
|
|
114
|
-
project_id: str,
|
|
115
|
-
version_id: str,
|
|
116
|
-
):
|
|
117
|
-
task_instance.xcom_push(
|
|
118
|
-
context,
|
|
119
|
-
key=MLEngineModelVersionDetailsLink.key,
|
|
120
|
-
value={"model_id": model_id, "project_id": project_id, "version_id": version_id},
|
|
121
|
-
)
|
|
122
|
-
|
|
123
65
|
|
|
124
66
|
class MLEngineJobSListLink(BaseGoogleLink):
|
|
125
67
|
"""Helper class for constructing ML Engine link."""
|
|
@@ -127,15 +69,3 @@ class MLEngineJobSListLink(BaseGoogleLink):
|
|
|
127
69
|
name = "MLEngine Jobs List"
|
|
128
70
|
key = "ml_engine_jobs_list"
|
|
129
71
|
format_str = MLENGINE_JOBS_LIST_LINK
|
|
130
|
-
|
|
131
|
-
@staticmethod
|
|
132
|
-
def persist(
|
|
133
|
-
context: Context,
|
|
134
|
-
task_instance,
|
|
135
|
-
project_id: str,
|
|
136
|
-
):
|
|
137
|
-
task_instance.xcom_push(
|
|
138
|
-
context,
|
|
139
|
-
key=MLEngineJobSListLink.key,
|
|
140
|
-
value={"project_id": project_id},
|
|
141
|
-
)
|
|
@@ -19,14 +19,8 @@
|
|
|
19
19
|
|
|
20
20
|
from __future__ import annotations
|
|
21
21
|
|
|
22
|
-
from typing import TYPE_CHECKING
|
|
23
|
-
|
|
24
22
|
from airflow.providers.google.cloud.links.base import BaseGoogleLink
|
|
25
23
|
|
|
26
|
-
if TYPE_CHECKING:
|
|
27
|
-
from airflow.models import BaseOperator
|
|
28
|
-
from airflow.utils.context import Context
|
|
29
|
-
|
|
30
24
|
PUBSUB_BASE_LINK = "/cloudpubsub"
|
|
31
25
|
PUBSUB_TOPIC_LINK = PUBSUB_BASE_LINK + "/topic/detail/{topic_id}?project={project_id}"
|
|
32
26
|
PUBSUB_SUBSCRIPTION_LINK = PUBSUB_BASE_LINK + "/subscription/detail/{subscription_id}?project={project_id}"
|
|
@@ -39,19 +33,6 @@ class PubSubTopicLink(BaseGoogleLink):
|
|
|
39
33
|
key = "pubsub_topic"
|
|
40
34
|
format_str = PUBSUB_TOPIC_LINK
|
|
41
35
|
|
|
42
|
-
@staticmethod
|
|
43
|
-
def persist(
|
|
44
|
-
context: Context,
|
|
45
|
-
task_instance: BaseOperator,
|
|
46
|
-
topic_id: str,
|
|
47
|
-
project_id: str | None,
|
|
48
|
-
):
|
|
49
|
-
task_instance.xcom_push(
|
|
50
|
-
context,
|
|
51
|
-
key=PubSubTopicLink.key,
|
|
52
|
-
value={"topic_id": topic_id, "project_id": project_id},
|
|
53
|
-
)
|
|
54
|
-
|
|
55
36
|
|
|
56
37
|
class PubSubSubscriptionLink(BaseGoogleLink):
|
|
57
38
|
"""Helper class for constructing Pub/Sub Subscription Link."""
|
|
@@ -59,16 +40,3 @@ class PubSubSubscriptionLink(BaseGoogleLink):
|
|
|
59
40
|
name = "Pub/Sub Subscription"
|
|
60
41
|
key = "pubsub_subscription"
|
|
61
42
|
format_str = PUBSUB_SUBSCRIPTION_LINK
|
|
62
|
-
|
|
63
|
-
@staticmethod
|
|
64
|
-
def persist(
|
|
65
|
-
context: Context,
|
|
66
|
-
task_instance: BaseOperator,
|
|
67
|
-
subscription_id: str | None,
|
|
68
|
-
project_id: str | None,
|
|
69
|
-
):
|
|
70
|
-
task_instance.xcom_push(
|
|
71
|
-
context,
|
|
72
|
-
key=PubSubSubscriptionLink.key,
|
|
73
|
-
value={"subscription_id": subscription_id, "project_id": project_id},
|
|
74
|
-
)
|
|
@@ -19,14 +19,8 @@
|
|
|
19
19
|
|
|
20
20
|
from __future__ import annotations
|
|
21
21
|
|
|
22
|
-
from typing import TYPE_CHECKING
|
|
23
|
-
|
|
24
22
|
from airflow.providers.google.cloud.links.base import BaseGoogleLink
|
|
25
23
|
|
|
26
|
-
if TYPE_CHECKING:
|
|
27
|
-
from airflow.models import BaseOperator
|
|
28
|
-
from airflow.utils.context import Context
|
|
29
|
-
|
|
30
24
|
SPANNER_BASE_LINK = "/spanner/instances"
|
|
31
25
|
SPANNER_INSTANCE_LINK = SPANNER_BASE_LINK + "/{instance_id}/details/databases?project={project_id}"
|
|
32
26
|
SPANNER_DATABASE_LINK = (
|
|
@@ -41,19 +35,6 @@ class SpannerInstanceLink(BaseGoogleLink):
|
|
|
41
35
|
key = "spanner_instance"
|
|
42
36
|
format_str = SPANNER_INSTANCE_LINK
|
|
43
37
|
|
|
44
|
-
@staticmethod
|
|
45
|
-
def persist(
|
|
46
|
-
context: Context,
|
|
47
|
-
task_instance: BaseOperator,
|
|
48
|
-
instance_id: str,
|
|
49
|
-
project_id: str | None,
|
|
50
|
-
):
|
|
51
|
-
task_instance.xcom_push(
|
|
52
|
-
context,
|
|
53
|
-
key=SpannerInstanceLink.key,
|
|
54
|
-
value={"instance_id": instance_id, "project_id": project_id},
|
|
55
|
-
)
|
|
56
|
-
|
|
57
38
|
|
|
58
39
|
class SpannerDatabaseLink(BaseGoogleLink):
|
|
59
40
|
"""Helper class for constructing Spanner Database Link."""
|
|
@@ -61,17 +42,3 @@ class SpannerDatabaseLink(BaseGoogleLink):
|
|
|
61
42
|
name = "Spanner Database"
|
|
62
43
|
key = "spanner_database"
|
|
63
44
|
format_str = SPANNER_DATABASE_LINK
|
|
64
|
-
|
|
65
|
-
@staticmethod
|
|
66
|
-
def persist(
|
|
67
|
-
context: Context,
|
|
68
|
-
task_instance: BaseOperator,
|
|
69
|
-
instance_id: str,
|
|
70
|
-
database_id: str,
|
|
71
|
-
project_id: str | None,
|
|
72
|
-
):
|
|
73
|
-
task_instance.xcom_push(
|
|
74
|
-
context,
|
|
75
|
-
key=SpannerDatabaseLink.key,
|
|
76
|
-
value={"instance_id": instance_id, "database_id": database_id, "project_id": project_id},
|
|
77
|
-
)
|
|
@@ -19,14 +19,8 @@
|
|
|
19
19
|
|
|
20
20
|
from __future__ import annotations
|
|
21
21
|
|
|
22
|
-
from typing import TYPE_CHECKING
|
|
23
|
-
|
|
24
22
|
from airflow.providers.google.cloud.links.base import BaseGoogleLink
|
|
25
23
|
|
|
26
|
-
if TYPE_CHECKING:
|
|
27
|
-
from airflow.models import BaseOperator
|
|
28
|
-
from airflow.utils.context import Context
|
|
29
|
-
|
|
30
24
|
STACKDRIVER_BASE_LINK = "/monitoring/alerting"
|
|
31
25
|
STACKDRIVER_NOTIFICATIONS_LINK = STACKDRIVER_BASE_LINK + "/notifications?project={project_id}"
|
|
32
26
|
STACKDRIVER_POLICIES_LINK = STACKDRIVER_BASE_LINK + "/policies?project={project_id}"
|
|
@@ -39,18 +33,6 @@ class StackdriverNotificationsLink(BaseGoogleLink):
|
|
|
39
33
|
key = "stackdriver_notifications"
|
|
40
34
|
format_str = STACKDRIVER_NOTIFICATIONS_LINK
|
|
41
35
|
|
|
42
|
-
@staticmethod
|
|
43
|
-
def persist(
|
|
44
|
-
operator_instance: BaseOperator,
|
|
45
|
-
context: Context,
|
|
46
|
-
project_id: str | None,
|
|
47
|
-
):
|
|
48
|
-
operator_instance.xcom_push(
|
|
49
|
-
context,
|
|
50
|
-
key=StackdriverNotificationsLink.key,
|
|
51
|
-
value={"project_id": project_id},
|
|
52
|
-
)
|
|
53
|
-
|
|
54
36
|
|
|
55
37
|
class StackdriverPoliciesLink(BaseGoogleLink):
|
|
56
38
|
"""Helper class for constructing Stackdriver Policies Link."""
|
|
@@ -58,15 +40,3 @@ class StackdriverPoliciesLink(BaseGoogleLink):
|
|
|
58
40
|
name = "Cloud Monitoring Policies"
|
|
59
41
|
key = "stackdriver_policies"
|
|
60
42
|
format_str = STACKDRIVER_POLICIES_LINK
|
|
61
|
-
|
|
62
|
-
@staticmethod
|
|
63
|
-
def persist(
|
|
64
|
-
operator_instance: BaseOperator,
|
|
65
|
-
context: Context,
|
|
66
|
-
project_id: str | None,
|
|
67
|
-
):
|
|
68
|
-
operator_instance.xcom_push(
|
|
69
|
-
context,
|
|
70
|
-
key=StackdriverPoliciesLink.key,
|
|
71
|
-
value={"project_id": project_id},
|
|
72
|
-
)
|