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.
Files changed (278) hide show
  1. airflow/providers/google/3rd-party-licenses/LICENSES.txt +14 -0
  2. airflow/providers/google/3rd-party-licenses/NOTICE +5 -0
  3. airflow/providers/google/__init__.py +3 -3
  4. airflow/providers/google/_vendor/__init__.py +0 -0
  5. airflow/providers/google/_vendor/json_merge_patch.py +91 -0
  6. airflow/providers/google/ads/hooks/ads.py +52 -43
  7. airflow/providers/google/ads/operators/ads.py +2 -2
  8. airflow/providers/google/ads/transfers/ads_to_gcs.py +3 -19
  9. airflow/providers/google/assets/gcs.py +1 -11
  10. airflow/providers/google/cloud/_internal_client/secret_manager_client.py +3 -2
  11. airflow/providers/google/cloud/bundles/gcs.py +161 -0
  12. airflow/providers/google/cloud/hooks/alloy_db.py +2 -3
  13. airflow/providers/google/cloud/hooks/bigquery.py +195 -318
  14. airflow/providers/google/cloud/hooks/bigquery_dts.py +8 -8
  15. airflow/providers/google/cloud/hooks/bigtable.py +3 -2
  16. airflow/providers/google/cloud/hooks/cloud_batch.py +8 -9
  17. airflow/providers/google/cloud/hooks/cloud_build.py +6 -65
  18. airflow/providers/google/cloud/hooks/cloud_composer.py +292 -24
  19. airflow/providers/google/cloud/hooks/cloud_logging.py +109 -0
  20. airflow/providers/google/cloud/hooks/cloud_memorystore.py +4 -3
  21. airflow/providers/google/cloud/hooks/cloud_run.py +20 -11
  22. airflow/providers/google/cloud/hooks/cloud_sql.py +136 -64
  23. airflow/providers/google/cloud/hooks/cloud_storage_transfer_service.py +35 -15
  24. airflow/providers/google/cloud/hooks/compute.py +7 -6
  25. airflow/providers/google/cloud/hooks/compute_ssh.py +7 -4
  26. airflow/providers/google/cloud/hooks/datacatalog.py +12 -3
  27. airflow/providers/google/cloud/hooks/dataflow.py +87 -242
  28. airflow/providers/google/cloud/hooks/dataform.py +9 -14
  29. airflow/providers/google/cloud/hooks/datafusion.py +7 -9
  30. airflow/providers/google/cloud/hooks/dataplex.py +13 -12
  31. airflow/providers/google/cloud/hooks/dataprep.py +2 -2
  32. airflow/providers/google/cloud/hooks/dataproc.py +76 -74
  33. airflow/providers/google/cloud/hooks/dataproc_metastore.py +4 -3
  34. airflow/providers/google/cloud/hooks/dlp.py +5 -4
  35. airflow/providers/google/cloud/hooks/gcs.py +144 -33
  36. airflow/providers/google/cloud/hooks/gen_ai.py +196 -0
  37. airflow/providers/google/cloud/hooks/kms.py +3 -2
  38. airflow/providers/google/cloud/hooks/kubernetes_engine.py +22 -17
  39. airflow/providers/google/cloud/hooks/looker.py +6 -1
  40. airflow/providers/google/cloud/hooks/managed_kafka.py +227 -3
  41. airflow/providers/google/cloud/hooks/mlengine.py +7 -8
  42. airflow/providers/google/cloud/hooks/natural_language.py +3 -2
  43. airflow/providers/google/cloud/hooks/os_login.py +3 -2
  44. airflow/providers/google/cloud/hooks/pubsub.py +6 -6
  45. airflow/providers/google/cloud/hooks/secret_manager.py +105 -12
  46. airflow/providers/google/cloud/hooks/spanner.py +75 -10
  47. airflow/providers/google/cloud/hooks/speech_to_text.py +3 -2
  48. airflow/providers/google/cloud/hooks/stackdriver.py +18 -18
  49. airflow/providers/google/cloud/hooks/tasks.py +4 -3
  50. airflow/providers/google/cloud/hooks/text_to_speech.py +3 -2
  51. airflow/providers/google/cloud/hooks/translate.py +8 -17
  52. airflow/providers/google/cloud/hooks/vertex_ai/auto_ml.py +8 -222
  53. airflow/providers/google/cloud/hooks/vertex_ai/batch_prediction_job.py +9 -15
  54. airflow/providers/google/cloud/hooks/vertex_ai/custom_job.py +33 -283
  55. airflow/providers/google/cloud/hooks/vertex_ai/dataset.py +5 -12
  56. airflow/providers/google/cloud/hooks/vertex_ai/endpoint_service.py +6 -12
  57. airflow/providers/google/cloud/hooks/vertex_ai/experiment_service.py +202 -0
  58. airflow/providers/google/cloud/hooks/vertex_ai/feature_store.py +311 -10
  59. airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py +79 -75
  60. airflow/providers/google/cloud/hooks/vertex_ai/hyperparameter_tuning_job.py +7 -13
  61. airflow/providers/google/cloud/hooks/vertex_ai/model_service.py +8 -12
  62. airflow/providers/google/cloud/hooks/vertex_ai/pipeline_job.py +6 -12
  63. airflow/providers/google/cloud/hooks/vertex_ai/prediction_service.py +3 -2
  64. airflow/providers/google/cloud/hooks/vertex_ai/ray.py +223 -0
  65. airflow/providers/google/cloud/hooks/video_intelligence.py +3 -2
  66. airflow/providers/google/cloud/hooks/vision.py +7 -7
  67. airflow/providers/google/cloud/hooks/workflows.py +4 -3
  68. airflow/providers/google/cloud/links/alloy_db.py +0 -46
  69. airflow/providers/google/cloud/links/base.py +77 -7
  70. airflow/providers/google/cloud/links/bigquery.py +0 -47
  71. airflow/providers/google/cloud/links/bigquery_dts.py +0 -20
  72. airflow/providers/google/cloud/links/bigtable.py +0 -48
  73. airflow/providers/google/cloud/links/cloud_build.py +0 -73
  74. airflow/providers/google/cloud/links/cloud_functions.py +0 -33
  75. airflow/providers/google/cloud/links/cloud_memorystore.py +0 -58
  76. airflow/providers/google/cloud/links/{life_sciences.py → cloud_run.py} +5 -27
  77. airflow/providers/google/cloud/links/cloud_sql.py +0 -33
  78. airflow/providers/google/cloud/links/cloud_storage_transfer.py +17 -46
  79. airflow/providers/google/cloud/links/cloud_tasks.py +7 -26
  80. airflow/providers/google/cloud/links/compute.py +0 -58
  81. airflow/providers/google/cloud/links/data_loss_prevention.py +0 -169
  82. airflow/providers/google/cloud/links/datacatalog.py +23 -54
  83. airflow/providers/google/cloud/links/dataflow.py +0 -34
  84. airflow/providers/google/cloud/links/dataform.py +0 -64
  85. airflow/providers/google/cloud/links/datafusion.py +1 -90
  86. airflow/providers/google/cloud/links/dataplex.py +0 -154
  87. airflow/providers/google/cloud/links/dataprep.py +0 -24
  88. airflow/providers/google/cloud/links/dataproc.py +11 -89
  89. airflow/providers/google/cloud/links/datastore.py +0 -31
  90. airflow/providers/google/cloud/links/kubernetes_engine.py +11 -61
  91. airflow/providers/google/cloud/links/managed_kafka.py +11 -51
  92. airflow/providers/google/cloud/links/mlengine.py +0 -70
  93. airflow/providers/google/cloud/links/pubsub.py +0 -32
  94. airflow/providers/google/cloud/links/spanner.py +0 -33
  95. airflow/providers/google/cloud/links/stackdriver.py +0 -30
  96. airflow/providers/google/cloud/links/translate.py +17 -187
  97. airflow/providers/google/cloud/links/vertex_ai.py +28 -195
  98. airflow/providers/google/cloud/links/workflows.py +0 -52
  99. airflow/providers/google/cloud/log/gcs_task_handler.py +166 -118
  100. airflow/providers/google/cloud/log/stackdriver_task_handler.py +14 -9
  101. airflow/providers/google/cloud/openlineage/CloudStorageTransferJobFacet.json +68 -0
  102. airflow/providers/google/cloud/openlineage/CloudStorageTransferRunFacet.json +60 -0
  103. airflow/providers/google/cloud/openlineage/DataFusionRunFacet.json +32 -0
  104. airflow/providers/google/cloud/openlineage/facets.py +141 -40
  105. airflow/providers/google/cloud/openlineage/mixins.py +14 -13
  106. airflow/providers/google/cloud/openlineage/utils.py +19 -3
  107. airflow/providers/google/cloud/operators/alloy_db.py +76 -61
  108. airflow/providers/google/cloud/operators/bigquery.py +104 -667
  109. airflow/providers/google/cloud/operators/bigquery_dts.py +12 -12
  110. airflow/providers/google/cloud/operators/bigtable.py +38 -7
  111. airflow/providers/google/cloud/operators/cloud_base.py +22 -1
  112. airflow/providers/google/cloud/operators/cloud_batch.py +18 -18
  113. airflow/providers/google/cloud/operators/cloud_build.py +80 -36
  114. airflow/providers/google/cloud/operators/cloud_composer.py +157 -71
  115. airflow/providers/google/cloud/operators/cloud_logging_sink.py +341 -0
  116. airflow/providers/google/cloud/operators/cloud_memorystore.py +74 -46
  117. airflow/providers/google/cloud/operators/cloud_run.py +39 -20
  118. airflow/providers/google/cloud/operators/cloud_sql.py +46 -61
  119. airflow/providers/google/cloud/operators/cloud_storage_transfer_service.py +92 -14
  120. airflow/providers/google/cloud/operators/compute.py +18 -50
  121. airflow/providers/google/cloud/operators/datacatalog.py +167 -29
  122. airflow/providers/google/cloud/operators/dataflow.py +38 -15
  123. airflow/providers/google/cloud/operators/dataform.py +19 -7
  124. airflow/providers/google/cloud/operators/datafusion.py +43 -43
  125. airflow/providers/google/cloud/operators/dataplex.py +212 -126
  126. airflow/providers/google/cloud/operators/dataprep.py +1 -5
  127. airflow/providers/google/cloud/operators/dataproc.py +134 -207
  128. airflow/providers/google/cloud/operators/dataproc_metastore.py +102 -84
  129. airflow/providers/google/cloud/operators/datastore.py +22 -6
  130. airflow/providers/google/cloud/operators/dlp.py +24 -45
  131. airflow/providers/google/cloud/operators/functions.py +21 -14
  132. airflow/providers/google/cloud/operators/gcs.py +15 -12
  133. airflow/providers/google/cloud/operators/gen_ai.py +389 -0
  134. airflow/providers/google/cloud/operators/kubernetes_engine.py +115 -106
  135. airflow/providers/google/cloud/operators/looker.py +1 -1
  136. airflow/providers/google/cloud/operators/managed_kafka.py +362 -40
  137. airflow/providers/google/cloud/operators/natural_language.py +5 -3
  138. airflow/providers/google/cloud/operators/pubsub.py +69 -21
  139. airflow/providers/google/cloud/operators/spanner.py +53 -45
  140. airflow/providers/google/cloud/operators/speech_to_text.py +5 -4
  141. airflow/providers/google/cloud/operators/stackdriver.py +5 -11
  142. airflow/providers/google/cloud/operators/tasks.py +6 -15
  143. airflow/providers/google/cloud/operators/text_to_speech.py +4 -3
  144. airflow/providers/google/cloud/operators/translate.py +46 -20
  145. airflow/providers/google/cloud/operators/translate_speech.py +4 -3
  146. airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py +44 -34
  147. airflow/providers/google/cloud/operators/vertex_ai/batch_prediction_job.py +34 -12
  148. airflow/providers/google/cloud/operators/vertex_ai/custom_job.py +62 -53
  149. airflow/providers/google/cloud/operators/vertex_ai/dataset.py +75 -11
  150. airflow/providers/google/cloud/operators/vertex_ai/endpoint_service.py +48 -12
  151. airflow/providers/google/cloud/operators/vertex_ai/experiment_service.py +435 -0
  152. airflow/providers/google/cloud/operators/vertex_ai/feature_store.py +532 -1
  153. airflow/providers/google/cloud/operators/vertex_ai/generative_model.py +135 -116
  154. airflow/providers/google/cloud/operators/vertex_ai/hyperparameter_tuning_job.py +16 -12
  155. airflow/providers/google/cloud/operators/vertex_ai/model_service.py +62 -14
  156. airflow/providers/google/cloud/operators/vertex_ai/pipeline_job.py +35 -10
  157. airflow/providers/google/cloud/operators/vertex_ai/ray.py +393 -0
  158. airflow/providers/google/cloud/operators/video_intelligence.py +5 -3
  159. airflow/providers/google/cloud/operators/vision.py +7 -5
  160. airflow/providers/google/cloud/operators/workflows.py +24 -19
  161. airflow/providers/google/cloud/secrets/secret_manager.py +2 -1
  162. airflow/providers/google/cloud/sensors/bigquery.py +2 -2
  163. airflow/providers/google/cloud/sensors/bigquery_dts.py +6 -4
  164. airflow/providers/google/cloud/sensors/bigtable.py +14 -6
  165. airflow/providers/google/cloud/sensors/cloud_composer.py +535 -33
  166. airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py +6 -5
  167. airflow/providers/google/cloud/sensors/dataflow.py +27 -10
  168. airflow/providers/google/cloud/sensors/dataform.py +2 -2
  169. airflow/providers/google/cloud/sensors/datafusion.py +4 -4
  170. airflow/providers/google/cloud/sensors/dataplex.py +7 -5
  171. airflow/providers/google/cloud/sensors/dataprep.py +2 -2
  172. airflow/providers/google/cloud/sensors/dataproc.py +10 -9
  173. airflow/providers/google/cloud/sensors/dataproc_metastore.py +4 -3
  174. airflow/providers/google/cloud/sensors/gcs.py +22 -21
  175. airflow/providers/google/cloud/sensors/looker.py +5 -5
  176. airflow/providers/google/cloud/sensors/pubsub.py +20 -20
  177. airflow/providers/google/cloud/sensors/tasks.py +2 -2
  178. airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py +2 -2
  179. airflow/providers/google/cloud/sensors/workflows.py +6 -4
  180. airflow/providers/google/cloud/transfers/adls_to_gcs.py +1 -1
  181. airflow/providers/google/cloud/transfers/azure_blob_to_gcs.py +2 -2
  182. airflow/providers/google/cloud/transfers/azure_fileshare_to_gcs.py +2 -2
  183. airflow/providers/google/cloud/transfers/bigquery_to_bigquery.py +11 -8
  184. airflow/providers/google/cloud/transfers/bigquery_to_gcs.py +14 -13
  185. airflow/providers/google/cloud/transfers/bigquery_to_mssql.py +7 -3
  186. airflow/providers/google/cloud/transfers/bigquery_to_mysql.py +12 -1
  187. airflow/providers/google/cloud/transfers/bigquery_to_postgres.py +24 -10
  188. airflow/providers/google/cloud/transfers/bigquery_to_sql.py +104 -5
  189. airflow/providers/google/cloud/transfers/calendar_to_gcs.py +1 -1
  190. airflow/providers/google/cloud/transfers/cassandra_to_gcs.py +18 -22
  191. airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py +4 -5
  192. airflow/providers/google/cloud/transfers/gcs_to_bigquery.py +45 -38
  193. airflow/providers/google/cloud/transfers/gcs_to_gcs.py +2 -2
  194. airflow/providers/google/cloud/transfers/gcs_to_local.py +5 -3
  195. airflow/providers/google/cloud/transfers/gcs_to_sftp.py +10 -4
  196. airflow/providers/google/cloud/transfers/gdrive_to_gcs.py +6 -2
  197. airflow/providers/google/cloud/transfers/gdrive_to_local.py +2 -2
  198. airflow/providers/google/cloud/transfers/http_to_gcs.py +193 -0
  199. airflow/providers/google/cloud/transfers/local_to_gcs.py +2 -2
  200. airflow/providers/google/cloud/transfers/mssql_to_gcs.py +1 -1
  201. airflow/providers/google/cloud/transfers/oracle_to_gcs.py +36 -11
  202. airflow/providers/google/cloud/transfers/postgres_to_gcs.py +44 -12
  203. airflow/providers/google/cloud/transfers/s3_to_gcs.py +12 -6
  204. airflow/providers/google/cloud/transfers/salesforce_to_gcs.py +2 -2
  205. airflow/providers/google/cloud/transfers/sftp_to_gcs.py +36 -14
  206. airflow/providers/google/cloud/transfers/sheets_to_gcs.py +3 -3
  207. airflow/providers/google/cloud/transfers/sql_to_gcs.py +10 -10
  208. airflow/providers/google/cloud/triggers/bigquery.py +75 -34
  209. airflow/providers/google/cloud/triggers/bigquery_dts.py +2 -1
  210. airflow/providers/google/cloud/triggers/cloud_batch.py +2 -1
  211. airflow/providers/google/cloud/triggers/cloud_build.py +3 -2
  212. airflow/providers/google/cloud/triggers/cloud_composer.py +303 -47
  213. airflow/providers/google/cloud/triggers/cloud_run.py +2 -2
  214. airflow/providers/google/cloud/triggers/cloud_storage_transfer_service.py +96 -5
  215. airflow/providers/google/cloud/triggers/dataflow.py +125 -2
  216. airflow/providers/google/cloud/triggers/datafusion.py +1 -1
  217. airflow/providers/google/cloud/triggers/dataplex.py +16 -3
  218. airflow/providers/google/cloud/triggers/dataproc.py +124 -53
  219. airflow/providers/google/cloud/triggers/kubernetes_engine.py +46 -28
  220. airflow/providers/google/cloud/triggers/mlengine.py +1 -1
  221. airflow/providers/google/cloud/triggers/pubsub.py +17 -20
  222. airflow/providers/google/cloud/triggers/vertex_ai.py +8 -7
  223. airflow/providers/google/cloud/utils/bigquery.py +5 -7
  224. airflow/providers/google/cloud/utils/bigquery_get_data.py +1 -1
  225. airflow/providers/google/cloud/utils/credentials_provider.py +4 -3
  226. airflow/providers/google/cloud/utils/dataform.py +1 -1
  227. airflow/providers/google/cloud/utils/external_token_supplier.py +0 -1
  228. airflow/providers/google/cloud/utils/field_validator.py +1 -2
  229. airflow/providers/google/cloud/utils/validators.py +43 -0
  230. airflow/providers/google/common/auth_backend/google_openid.py +26 -9
  231. airflow/providers/google/common/consts.py +2 -1
  232. airflow/providers/google/common/deprecated.py +2 -1
  233. airflow/providers/google/common/hooks/base_google.py +40 -43
  234. airflow/providers/google/common/hooks/operation_helpers.py +78 -0
  235. airflow/providers/google/common/links/storage.py +0 -22
  236. airflow/providers/google/common/utils/get_secret.py +31 -0
  237. airflow/providers/google/common/utils/id_token_credentials.py +4 -5
  238. airflow/providers/google/firebase/operators/firestore.py +2 -2
  239. airflow/providers/google/get_provider_info.py +61 -216
  240. airflow/providers/google/go_module_utils.py +35 -3
  241. airflow/providers/google/leveldb/hooks/leveldb.py +30 -6
  242. airflow/providers/google/leveldb/operators/leveldb.py +2 -2
  243. airflow/providers/google/marketing_platform/hooks/analytics_admin.py +3 -2
  244. airflow/providers/google/marketing_platform/hooks/display_video.py +3 -109
  245. airflow/providers/google/marketing_platform/hooks/search_ads.py +1 -1
  246. airflow/providers/google/marketing_platform/links/analytics_admin.py +4 -5
  247. airflow/providers/google/marketing_platform/operators/analytics_admin.py +7 -6
  248. airflow/providers/google/marketing_platform/operators/campaign_manager.py +5 -5
  249. airflow/providers/google/marketing_platform/operators/display_video.py +28 -489
  250. airflow/providers/google/marketing_platform/operators/search_ads.py +2 -2
  251. airflow/providers/google/marketing_platform/sensors/campaign_manager.py +2 -2
  252. airflow/providers/google/marketing_platform/sensors/display_video.py +4 -64
  253. airflow/providers/google/suite/hooks/calendar.py +1 -1
  254. airflow/providers/google/suite/hooks/drive.py +2 -2
  255. airflow/providers/google/suite/hooks/sheets.py +15 -1
  256. airflow/providers/google/suite/operators/sheets.py +8 -3
  257. airflow/providers/google/suite/sensors/drive.py +2 -2
  258. airflow/providers/google/suite/transfers/gcs_to_gdrive.py +2 -2
  259. airflow/providers/google/suite/transfers/gcs_to_sheets.py +1 -1
  260. airflow/providers/google/suite/transfers/local_to_drive.py +3 -3
  261. airflow/providers/google/suite/transfers/sql_to_sheets.py +5 -4
  262. airflow/providers/google/version_compat.py +15 -1
  263. {apache_airflow_providers_google-14.0.0.dist-info → apache_airflow_providers_google-19.1.0rc1.dist-info}/METADATA +117 -72
  264. apache_airflow_providers_google-19.1.0rc1.dist-info/RECORD +331 -0
  265. {apache_airflow_providers_google-14.0.0.dist-info → apache_airflow_providers_google-19.1.0rc1.dist-info}/WHEEL +1 -1
  266. apache_airflow_providers_google-19.1.0rc1.dist-info/licenses/NOTICE +5 -0
  267. airflow/providers/google/cloud/example_dags/example_cloud_task.py +0 -54
  268. airflow/providers/google/cloud/hooks/automl.py +0 -679
  269. airflow/providers/google/cloud/hooks/life_sciences.py +0 -159
  270. airflow/providers/google/cloud/links/automl.py +0 -193
  271. airflow/providers/google/cloud/operators/automl.py +0 -1360
  272. airflow/providers/google/cloud/operators/life_sciences.py +0 -119
  273. airflow/providers/google/cloud/operators/mlengine.py +0 -1515
  274. airflow/providers/google/cloud/utils/mlengine_operator_utils.py +0 -273
  275. apache_airflow_providers_google-14.0.0.dist-info/RECORD +0 -318
  276. /airflow/providers/google/cloud/{example_dags → bundles}/__init__.py +0 -0
  277. {apache_airflow_providers_google-14.0.0.dist-info → apache_airflow_providers_google-19.1.0rc1.dist-info}/entry_points.txt +0 -0
  278. {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.models import BaseOperatorLink, XCom
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.utils.context import Context
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": task_instance.region,
99
- "project_id": task_instance.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": task_instance.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.utils.context import Context
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
- @staticmethod
54
- def persist(context: Context, task_instance, cluster: dict | Cluster | None):
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
- task_instance.xcom_push(
60
+ if not cluster:
61
+ raise ValueError("Cluster must be provided for KubernetesEngineClusterLink.")
62
+
63
+ super().persist(
59
64
  context=context,
60
- key=KubernetesEngineClusterLink.key,
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
- @staticmethod
89
- def persist(
90
- context: Context,
91
- task_instance,
92
- cluster_id: str,
93
- topic_id: str,
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
- )