apache-airflow-providers-google 16.0.0rc1__py3-none-any.whl → 16.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. airflow/providers/google/__init__.py +1 -1
  2. airflow/providers/google/ads/hooks/ads.py +9 -5
  3. airflow/providers/google/ads/operators/ads.py +1 -1
  4. airflow/providers/google/ads/transfers/ads_to_gcs.py +1 -1
  5. airflow/providers/google/cloud/hooks/bigquery.py +2 -3
  6. airflow/providers/google/cloud/hooks/cloud_sql.py +8 -4
  7. airflow/providers/google/cloud/hooks/datacatalog.py +9 -1
  8. airflow/providers/google/cloud/hooks/dataflow.py +2 -2
  9. airflow/providers/google/cloud/hooks/dataplex.py +1 -1
  10. airflow/providers/google/cloud/hooks/dataprep.py +4 -1
  11. airflow/providers/google/cloud/hooks/gcs.py +2 -2
  12. airflow/providers/google/cloud/hooks/looker.py +5 -1
  13. airflow/providers/google/cloud/hooks/mlengine.py +2 -1
  14. airflow/providers/google/cloud/hooks/secret_manager.py +102 -10
  15. airflow/providers/google/cloud/hooks/spanner.py +2 -2
  16. airflow/providers/google/cloud/hooks/translate.py +1 -1
  17. airflow/providers/google/cloud/hooks/vertex_ai/feature_store.py +307 -7
  18. airflow/providers/google/cloud/hooks/vertex_ai/generative_model.py +43 -14
  19. airflow/providers/google/cloud/hooks/vertex_ai/ray.py +11 -2
  20. airflow/providers/google/cloud/hooks/vision.py +2 -2
  21. airflow/providers/google/cloud/links/alloy_db.py +0 -46
  22. airflow/providers/google/cloud/links/base.py +75 -11
  23. airflow/providers/google/cloud/links/bigquery.py +0 -47
  24. airflow/providers/google/cloud/links/bigquery_dts.py +0 -20
  25. airflow/providers/google/cloud/links/bigtable.py +0 -48
  26. airflow/providers/google/cloud/links/cloud_build.py +0 -73
  27. airflow/providers/google/cloud/links/cloud_functions.py +0 -33
  28. airflow/providers/google/cloud/links/cloud_memorystore.py +0 -58
  29. airflow/providers/google/cloud/links/cloud_run.py +1 -33
  30. airflow/providers/google/cloud/links/cloud_sql.py +0 -33
  31. airflow/providers/google/cloud/links/cloud_storage_transfer.py +16 -43
  32. airflow/providers/google/cloud/links/cloud_tasks.py +6 -25
  33. airflow/providers/google/cloud/links/compute.py +0 -58
  34. airflow/providers/google/cloud/links/data_loss_prevention.py +0 -169
  35. airflow/providers/google/cloud/links/datacatalog.py +23 -54
  36. airflow/providers/google/cloud/links/dataflow.py +0 -34
  37. airflow/providers/google/cloud/links/dataform.py +0 -64
  38. airflow/providers/google/cloud/links/datafusion.py +1 -96
  39. airflow/providers/google/cloud/links/dataplex.py +0 -154
  40. airflow/providers/google/cloud/links/dataprep.py +0 -24
  41. airflow/providers/google/cloud/links/dataproc.py +14 -90
  42. airflow/providers/google/cloud/links/datastore.py +0 -31
  43. airflow/providers/google/cloud/links/kubernetes_engine.py +5 -59
  44. airflow/providers/google/cloud/links/life_sciences.py +0 -19
  45. airflow/providers/google/cloud/links/managed_kafka.py +0 -70
  46. airflow/providers/google/cloud/links/mlengine.py +0 -70
  47. airflow/providers/google/cloud/links/pubsub.py +0 -32
  48. airflow/providers/google/cloud/links/spanner.py +0 -33
  49. airflow/providers/google/cloud/links/stackdriver.py +0 -30
  50. airflow/providers/google/cloud/links/translate.py +16 -186
  51. airflow/providers/google/cloud/links/vertex_ai.py +8 -224
  52. airflow/providers/google/cloud/links/workflows.py +0 -52
  53. airflow/providers/google/cloud/operators/alloy_db.py +69 -54
  54. airflow/providers/google/cloud/operators/automl.py +16 -14
  55. airflow/providers/google/cloud/operators/bigquery.py +0 -15
  56. airflow/providers/google/cloud/operators/bigquery_dts.py +2 -4
  57. airflow/providers/google/cloud/operators/bigtable.py +35 -6
  58. airflow/providers/google/cloud/operators/cloud_base.py +21 -1
  59. airflow/providers/google/cloud/operators/cloud_build.py +74 -31
  60. airflow/providers/google/cloud/operators/cloud_composer.py +34 -35
  61. airflow/providers/google/cloud/operators/cloud_memorystore.py +68 -42
  62. airflow/providers/google/cloud/operators/cloud_run.py +0 -1
  63. airflow/providers/google/cloud/operators/cloud_sql.py +11 -15
  64. airflow/providers/google/cloud/operators/cloud_storage_transfer_service.py +0 -2
  65. airflow/providers/google/cloud/operators/compute.py +7 -39
  66. airflow/providers/google/cloud/operators/datacatalog.py +156 -20
  67. airflow/providers/google/cloud/operators/dataflow.py +37 -14
  68. airflow/providers/google/cloud/operators/dataform.py +14 -4
  69. airflow/providers/google/cloud/operators/datafusion.py +4 -12
  70. airflow/providers/google/cloud/operators/dataplex.py +180 -96
  71. airflow/providers/google/cloud/operators/dataprep.py +0 -4
  72. airflow/providers/google/cloud/operators/dataproc.py +10 -16
  73. airflow/providers/google/cloud/operators/dataproc_metastore.py +95 -87
  74. airflow/providers/google/cloud/operators/datastore.py +21 -5
  75. airflow/providers/google/cloud/operators/dlp.py +3 -26
  76. airflow/providers/google/cloud/operators/functions.py +15 -6
  77. airflow/providers/google/cloud/operators/gcs.py +0 -7
  78. airflow/providers/google/cloud/operators/kubernetes_engine.py +50 -7
  79. airflow/providers/google/cloud/operators/life_sciences.py +0 -1
  80. airflow/providers/google/cloud/operators/managed_kafka.py +106 -51
  81. airflow/providers/google/cloud/operators/mlengine.py +0 -1
  82. airflow/providers/google/cloud/operators/pubsub.py +2 -4
  83. airflow/providers/google/cloud/operators/spanner.py +0 -4
  84. airflow/providers/google/cloud/operators/speech_to_text.py +0 -1
  85. airflow/providers/google/cloud/operators/stackdriver.py +0 -8
  86. airflow/providers/google/cloud/operators/tasks.py +0 -11
  87. airflow/providers/google/cloud/operators/text_to_speech.py +0 -1
  88. airflow/providers/google/cloud/operators/translate.py +37 -13
  89. airflow/providers/google/cloud/operators/translate_speech.py +0 -1
  90. airflow/providers/google/cloud/operators/vertex_ai/auto_ml.py +31 -18
  91. airflow/providers/google/cloud/operators/vertex_ai/batch_prediction_job.py +28 -8
  92. airflow/providers/google/cloud/operators/vertex_ai/custom_job.py +38 -25
  93. airflow/providers/google/cloud/operators/vertex_ai/dataset.py +69 -7
  94. airflow/providers/google/cloud/operators/vertex_ai/endpoint_service.py +42 -8
  95. airflow/providers/google/cloud/operators/vertex_ai/feature_store.py +531 -0
  96. airflow/providers/google/cloud/operators/vertex_ai/generative_model.py +93 -25
  97. airflow/providers/google/cloud/operators/vertex_ai/hyperparameter_tuning_job.py +10 -8
  98. airflow/providers/google/cloud/operators/vertex_ai/model_service.py +56 -10
  99. airflow/providers/google/cloud/operators/vertex_ai/pipeline_job.py +25 -6
  100. airflow/providers/google/cloud/operators/vertex_ai/ray.py +9 -6
  101. airflow/providers/google/cloud/operators/workflows.py +1 -9
  102. airflow/providers/google/cloud/sensors/bigquery.py +1 -1
  103. airflow/providers/google/cloud/sensors/bigquery_dts.py +6 -1
  104. airflow/providers/google/cloud/sensors/bigtable.py +15 -3
  105. airflow/providers/google/cloud/sensors/cloud_composer.py +6 -1
  106. airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py +6 -1
  107. airflow/providers/google/cloud/sensors/dataflow.py +3 -3
  108. airflow/providers/google/cloud/sensors/dataform.py +6 -1
  109. airflow/providers/google/cloud/sensors/datafusion.py +6 -1
  110. airflow/providers/google/cloud/sensors/dataplex.py +6 -1
  111. airflow/providers/google/cloud/sensors/dataprep.py +6 -1
  112. airflow/providers/google/cloud/sensors/dataproc.py +6 -1
  113. airflow/providers/google/cloud/sensors/dataproc_metastore.py +6 -1
  114. airflow/providers/google/cloud/sensors/gcs.py +9 -3
  115. airflow/providers/google/cloud/sensors/looker.py +6 -1
  116. airflow/providers/google/cloud/sensors/pubsub.py +8 -3
  117. airflow/providers/google/cloud/sensors/tasks.py +6 -1
  118. airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py +6 -1
  119. airflow/providers/google/cloud/sensors/workflows.py +6 -1
  120. airflow/providers/google/cloud/transfers/azure_blob_to_gcs.py +1 -1
  121. airflow/providers/google/cloud/transfers/azure_fileshare_to_gcs.py +1 -1
  122. airflow/providers/google/cloud/transfers/bigquery_to_bigquery.py +1 -2
  123. airflow/providers/google/cloud/transfers/bigquery_to_gcs.py +1 -2
  124. airflow/providers/google/cloud/transfers/bigquery_to_mssql.py +0 -1
  125. airflow/providers/google/cloud/transfers/bigquery_to_sql.py +1 -1
  126. airflow/providers/google/cloud/transfers/calendar_to_gcs.py +1 -1
  127. airflow/providers/google/cloud/transfers/cassandra_to_gcs.py +1 -1
  128. airflow/providers/google/cloud/transfers/facebook_ads_to_gcs.py +1 -1
  129. airflow/providers/google/cloud/transfers/gcs_to_bigquery.py +1 -2
  130. airflow/providers/google/cloud/transfers/gcs_to_gcs.py +1 -1
  131. airflow/providers/google/cloud/transfers/gcs_to_local.py +1 -1
  132. airflow/providers/google/cloud/transfers/gcs_to_sftp.py +1 -1
  133. airflow/providers/google/cloud/transfers/gdrive_to_gcs.py +5 -1
  134. airflow/providers/google/cloud/transfers/gdrive_to_local.py +1 -1
  135. airflow/providers/google/cloud/transfers/http_to_gcs.py +1 -1
  136. airflow/providers/google/cloud/transfers/local_to_gcs.py +1 -1
  137. airflow/providers/google/cloud/transfers/salesforce_to_gcs.py +1 -1
  138. airflow/providers/google/cloud/transfers/sftp_to_gcs.py +1 -1
  139. airflow/providers/google/cloud/transfers/sheets_to_gcs.py +2 -2
  140. airflow/providers/google/cloud/transfers/sql_to_gcs.py +1 -1
  141. airflow/providers/google/cloud/utils/field_validator.py +1 -2
  142. airflow/providers/google/common/auth_backend/google_openid.py +2 -1
  143. airflow/providers/google/common/deprecated.py +2 -1
  144. airflow/providers/google/common/hooks/base_google.py +7 -3
  145. airflow/providers/google/common/links/storage.py +0 -22
  146. airflow/providers/google/firebase/operators/firestore.py +1 -1
  147. airflow/providers/google/get_provider_info.py +0 -11
  148. airflow/providers/google/leveldb/hooks/leveldb.py +5 -1
  149. airflow/providers/google/leveldb/operators/leveldb.py +1 -1
  150. airflow/providers/google/marketing_platform/links/analytics_admin.py +3 -6
  151. airflow/providers/google/marketing_platform/operators/analytics_admin.py +0 -1
  152. airflow/providers/google/marketing_platform/operators/campaign_manager.py +4 -4
  153. airflow/providers/google/marketing_platform/operators/display_video.py +6 -6
  154. airflow/providers/google/marketing_platform/operators/search_ads.py +1 -1
  155. airflow/providers/google/marketing_platform/sensors/campaign_manager.py +6 -1
  156. airflow/providers/google/marketing_platform/sensors/display_video.py +6 -1
  157. airflow/providers/google/suite/operators/sheets.py +3 -3
  158. airflow/providers/google/suite/sensors/drive.py +6 -1
  159. airflow/providers/google/suite/transfers/gcs_to_gdrive.py +1 -1
  160. airflow/providers/google/suite/transfers/gcs_to_sheets.py +1 -1
  161. airflow/providers/google/suite/transfers/local_to_drive.py +1 -1
  162. airflow/providers/google/version_compat.py +28 -0
  163. {apache_airflow_providers_google-16.0.0rc1.dist-info → apache_airflow_providers_google-16.1.0.dist-info}/METADATA +27 -28
  164. {apache_airflow_providers_google-16.0.0rc1.dist-info → apache_airflow_providers_google-16.1.0.dist-info}/RECORD +166 -166
  165. {apache_airflow_providers_google-16.0.0rc1.dist-info → apache_airflow_providers_google-16.1.0.dist-info}/WHEEL +0 -0
  166. {apache_airflow_providers_google-16.0.0rc1.dist-info → apache_airflow_providers_google-16.1.0.dist-info}/entry_points.txt +0 -0
@@ -111,10 +111,9 @@ class CloudDataFusionRestartInstanceOperator(GoogleCloudBaseOperator):
111
111
  project_id = resource_path_to_dict(resource_name=instance["name"])["projects"]
112
112
  DataFusionInstanceLink.persist(
113
113
  context=context,
114
- task_instance=self,
115
114
  project_id=project_id,
116
115
  instance_name=self.instance_name,
117
- location=self.location,
116
+ region=self.location,
118
117
  )
119
118
 
120
119
 
@@ -269,10 +268,9 @@ class CloudDataFusionCreateInstanceOperator(GoogleCloudBaseOperator):
269
268
  project_id = resource_path_to_dict(resource_name=instance["name"])["projects"]
270
269
  DataFusionInstanceLink.persist(
271
270
  context=context,
272
- task_instance=self,
273
271
  project_id=project_id,
274
272
  instance_name=self.instance_name,
275
- location=self.location,
273
+ region=self.location,
276
274
  )
277
275
  return instance
278
276
 
@@ -358,10 +356,9 @@ class CloudDataFusionUpdateInstanceOperator(GoogleCloudBaseOperator):
358
356
  project_id = resource_path_to_dict(resource_name=instance["name"])["projects"]
359
357
  DataFusionInstanceLink.persist(
360
358
  context=context,
361
- task_instance=self,
362
359
  project_id=project_id,
363
360
  instance_name=self.instance_name,
364
- location=self.location,
361
+ region=self.location,
365
362
  )
366
363
 
367
364
 
@@ -429,10 +426,9 @@ class CloudDataFusionGetInstanceOperator(GoogleCloudBaseOperator):
429
426
  project_id = resource_path_to_dict(resource_name=instance["name"])["projects"]
430
427
  DataFusionInstanceLink.persist(
431
428
  context=context,
432
- task_instance=self,
433
429
  project_id=project_id,
434
430
  instance_name=self.instance_name,
435
- location=self.location,
431
+ region=self.location,
436
432
  )
437
433
  return instance
438
434
 
@@ -519,7 +515,6 @@ class CloudDataFusionCreatePipelineOperator(GoogleCloudBaseOperator):
519
515
  )
520
516
  DataFusionPipelineLink.persist(
521
517
  context=context,
522
- task_instance=self,
523
518
  uri=instance["serviceEndpoint"],
524
519
  pipeline_name=self.pipeline_name,
525
520
  namespace=self.namespace,
@@ -693,7 +688,6 @@ class CloudDataFusionListPipelinesOperator(GoogleCloudBaseOperator):
693
688
 
694
689
  DataFusionPipelinesLink.persist(
695
690
  context=context,
696
- task_instance=self,
697
691
  uri=service_endpoint,
698
692
  namespace=self.namespace,
699
693
  )
@@ -813,7 +807,6 @@ class CloudDataFusionStartPipelineOperator(GoogleCloudBaseOperator):
813
807
 
814
808
  DataFusionPipelineLink.persist(
815
809
  context=context,
816
- task_instance=self,
817
810
  uri=instance["serviceEndpoint"],
818
811
  pipeline_name=self.pipeline_name,
819
812
  namespace=self.namespace,
@@ -943,7 +936,6 @@ class CloudDataFusionStopPipelineOperator(GoogleCloudBaseOperator):
943
936
 
944
937
  DataFusionPipelineLink.persist(
945
938
  context=context,
946
- task_instance=self,
947
939
  uri=instance["serviceEndpoint"],
948
940
  pipeline_name=self.pipeline_name,
949
941
  namespace=self.namespace,
@@ -150,6 +150,15 @@ class DataplexCreateTaskOperator(GoogleCloudBaseOperator):
150
150
  self.impersonation_chain = impersonation_chain
151
151
  self.asynchronous = asynchronous
152
152
 
153
+ @property
154
+ def extra_links_params(self) -> dict[str, Any]:
155
+ return {
156
+ "lake_id": self.lake_id,
157
+ "task_id": self.dataplex_task_id,
158
+ "region": self.region,
159
+ "project_id": self.project_id,
160
+ }
161
+
153
162
  def execute(self, context: Context) -> dict:
154
163
  hook = DataplexHook(
155
164
  gcp_conn_id=self.gcp_conn_id,
@@ -157,7 +166,7 @@ class DataplexCreateTaskOperator(GoogleCloudBaseOperator):
157
166
  impersonation_chain=self.impersonation_chain,
158
167
  )
159
168
  self.log.info("Creating Dataplex task %s", self.dataplex_task_id)
160
- DataplexTaskLink.persist(context=context, task_instance=self)
169
+ DataplexTaskLink.persist(context=context)
161
170
 
162
171
  try:
163
172
  operation = hook.create_task(
@@ -351,6 +360,14 @@ class DataplexListTasksOperator(GoogleCloudBaseOperator):
351
360
  self.gcp_conn_id = gcp_conn_id
352
361
  self.impersonation_chain = impersonation_chain
353
362
 
363
+ @property
364
+ def extra_links_params(self) -> dict[str, Any]:
365
+ return {
366
+ "project_id": self.project_id,
367
+ "lake_id": self.lake_id,
368
+ "region": self.region,
369
+ }
370
+
354
371
  def execute(self, context: Context) -> list[dict]:
355
372
  hook = DataplexHook(
356
373
  gcp_conn_id=self.gcp_conn_id,
@@ -358,7 +375,7 @@ class DataplexListTasksOperator(GoogleCloudBaseOperator):
358
375
  impersonation_chain=self.impersonation_chain,
359
376
  )
360
377
  self.log.info("Listing Dataplex tasks from lake %s", self.lake_id)
361
- DataplexTasksLink.persist(context=context, task_instance=self)
378
+ DataplexTasksLink.persist(context=context)
362
379
 
363
380
  tasks = hook.list_tasks(
364
381
  project_id=self.project_id,
@@ -430,6 +447,15 @@ class DataplexGetTaskOperator(GoogleCloudBaseOperator):
430
447
  self.gcp_conn_id = gcp_conn_id
431
448
  self.impersonation_chain = impersonation_chain
432
449
 
450
+ @property
451
+ def extra_links_params(self) -> dict[str, Any]:
452
+ return {
453
+ "lake_id": self.lake_id,
454
+ "task_id": self.dataplex_task_id,
455
+ "region": self.region,
456
+ "project_id": self.project_id,
457
+ }
458
+
433
459
  def execute(self, context: Context) -> dict:
434
460
  hook = DataplexHook(
435
461
  gcp_conn_id=self.gcp_conn_id,
@@ -437,7 +463,7 @@ class DataplexGetTaskOperator(GoogleCloudBaseOperator):
437
463
  impersonation_chain=self.impersonation_chain,
438
464
  )
439
465
  self.log.info("Retrieving Dataplex task %s", self.dataplex_task_id)
440
- DataplexTaskLink.persist(context=context, task_instance=self)
466
+ DataplexTaskLink.persist(context=context)
441
467
 
442
468
  task = hook.get_task(
443
469
  project_id=self.project_id,
@@ -448,7 +474,7 @@ class DataplexGetTaskOperator(GoogleCloudBaseOperator):
448
474
  timeout=self.timeout,
449
475
  metadata=self.metadata,
450
476
  )
451
- DataplexTasksLink.persist(context=context, task_instance=self)
477
+ DataplexTasksLink.persist(context=context)
452
478
  return Task.to_dict(task)
453
479
 
454
480
 
@@ -522,6 +548,14 @@ class DataplexCreateLakeOperator(GoogleCloudBaseOperator):
522
548
  self.impersonation_chain = impersonation_chain
523
549
  self.asynchronous = asynchronous
524
550
 
551
+ @property
552
+ def extra_links_params(self) -> dict[str, Any]:
553
+ return {
554
+ "lake_id": self.lake_id,
555
+ "region": self.region,
556
+ "project_id": self.project_id,
557
+ }
558
+
525
559
  def execute(self, context: Context) -> dict:
526
560
  hook = DataplexHook(
527
561
  gcp_conn_id=self.gcp_conn_id,
@@ -566,10 +600,7 @@ class DataplexCreateLakeOperator(GoogleCloudBaseOperator):
566
600
  if lake["state"] != "CREATING":
567
601
  break
568
602
  time.sleep(time_to_wait)
569
- DataplexLakeLink.persist(
570
- context=context,
571
- task_instance=self,
572
- )
603
+ DataplexLakeLink.persist(context=context)
573
604
  return Lake.to_dict(lake)
574
605
 
575
606
 
@@ -625,6 +656,14 @@ class DataplexDeleteLakeOperator(GoogleCloudBaseOperator):
625
656
  self.gcp_conn_id = gcp_conn_id
626
657
  self.impersonation_chain = impersonation_chain
627
658
 
659
+ @property
660
+ def extra_links_params(self) -> dict[str, Any]:
661
+ return {
662
+ "lake_id": self.lake_id,
663
+ "region": self.region,
664
+ "project_id": self.project_id,
665
+ }
666
+
628
667
  def execute(self, context: Context) -> None:
629
668
  hook = DataplexHook(
630
669
  gcp_conn_id=self.gcp_conn_id,
@@ -642,7 +681,7 @@ class DataplexDeleteLakeOperator(GoogleCloudBaseOperator):
642
681
  timeout=self.timeout,
643
682
  metadata=self.metadata,
644
683
  )
645
- DataplexLakeLink.persist(context=context, task_instance=self)
684
+ DataplexLakeLink.persist(context=context)
646
685
  hook.wait_for_operation(timeout=self.timeout, operation=operation)
647
686
  self.log.info("Dataplex lake %s deleted successfully!", self.lake_id)
648
687
 
@@ -2179,6 +2218,13 @@ class DataplexCatalogBaseOperator(GoogleCloudBaseOperator):
2179
2218
  impersonation_chain=self.impersonation_chain,
2180
2219
  )
2181
2220
 
2221
+ @property
2222
+ def extra_links_params(self) -> dict[str, Any]:
2223
+ return {
2224
+ "location": self.location,
2225
+ "project_id": self.project_id,
2226
+ }
2227
+
2182
2228
 
2183
2229
  class DataplexCatalogCreateEntryGroupOperator(DataplexCatalogBaseOperator):
2184
2230
  """
@@ -2230,12 +2276,15 @@ class DataplexCatalogCreateEntryGroupOperator(DataplexCatalogBaseOperator):
2230
2276
  self.entry_group_configuration = entry_group_configuration
2231
2277
  self.validate_request = validate_request
2232
2278
 
2233
- def execute(self, context: Context):
2234
- DataplexCatalogEntryGroupLink.persist(
2235
- context=context,
2236
- task_instance=self,
2237
- )
2279
+ @property
2280
+ def extra_links_params(self) -> dict[str, Any]:
2281
+ return {
2282
+ **super().extra_links_params,
2283
+ "entry_group_id": self.entry_group_id,
2284
+ }
2238
2285
 
2286
+ def execute(self, context: Context):
2287
+ DataplexCatalogEntryGroupLink.persist(context=context)
2239
2288
  if self.validate_request:
2240
2289
  self.log.info("Validating a Create Dataplex Catalog EntryGroup request.")
2241
2290
  else:
@@ -2316,11 +2365,15 @@ class DataplexCatalogGetEntryGroupOperator(DataplexCatalogBaseOperator):
2316
2365
  super().__init__(*args, **kwargs)
2317
2366
  self.entry_group_id = entry_group_id
2318
2367
 
2368
+ @property
2369
+ def extra_links_params(self) -> dict[str, Any]:
2370
+ return {
2371
+ **super().extra_links_params,
2372
+ "entry_group_id": self.entry_group_id,
2373
+ }
2374
+
2319
2375
  def execute(self, context: Context):
2320
- DataplexCatalogEntryGroupLink.persist(
2321
- context=context,
2322
- task_instance=self,
2323
- )
2376
+ DataplexCatalogEntryGroupLink.persist(context=context)
2324
2377
  self.log.info(
2325
2378
  "Retrieving Dataplex Catalog EntryGroup %s.",
2326
2379
  self.entry_group_id,
@@ -2462,10 +2515,7 @@ class DataplexCatalogListEntryGroupsOperator(DataplexCatalogBaseOperator):
2462
2515
  self.order_by = order_by
2463
2516
 
2464
2517
  def execute(self, context: Context):
2465
- DataplexCatalogEntryGroupsLink.persist(
2466
- context=context,
2467
- task_instance=self,
2468
- )
2518
+ DataplexCatalogEntryGroupsLink.persist(context=context)
2469
2519
  self.log.info(
2470
2520
  "Listing Dataplex Catalog EntryGroup from location %s.",
2471
2521
  self.location,
@@ -2483,8 +2533,7 @@ class DataplexCatalogListEntryGroupsOperator(DataplexCatalogBaseOperator):
2483
2533
  metadata=self.metadata,
2484
2534
  )
2485
2535
  self.log.info("EntryGroup on page: %s", entry_group_on_page)
2486
- self.xcom_push(
2487
- context=context,
2536
+ context["ti"].xcom_push(
2488
2537
  key="entry_group_page",
2489
2538
  value=ListEntryGroupsResponse.to_dict(entry_group_on_page._response),
2490
2539
  )
@@ -2554,12 +2603,15 @@ class DataplexCatalogUpdateEntryGroupOperator(DataplexCatalogBaseOperator):
2554
2603
  self.update_mask = update_mask
2555
2604
  self.validate_request = validate_request
2556
2605
 
2557
- def execute(self, context: Context):
2558
- DataplexCatalogEntryGroupLink.persist(
2559
- context=context,
2560
- task_instance=self,
2561
- )
2606
+ @property
2607
+ def extra_links_params(self) -> dict[str, Any]:
2608
+ return {
2609
+ **super().extra_links_params,
2610
+ "entry_group_id": self.entry_group_id,
2611
+ }
2562
2612
 
2613
+ def execute(self, context: Context):
2614
+ DataplexCatalogEntryGroupLink.persist(context=context)
2563
2615
  if self.validate_request:
2564
2616
  self.log.info("Validating an Update Dataplex Catalog EntryGroup request.")
2565
2617
  else:
@@ -2644,12 +2696,15 @@ class DataplexCatalogCreateEntryTypeOperator(DataplexCatalogBaseOperator):
2644
2696
  self.entry_type_configuration = entry_type_configuration
2645
2697
  self.validate_request = validate_request
2646
2698
 
2647
- def execute(self, context: Context):
2648
- DataplexCatalogEntryTypeLink.persist(
2649
- context=context,
2650
- task_instance=self,
2651
- )
2699
+ @property
2700
+ def extra_links_params(self) -> dict[str, Any]:
2701
+ return {
2702
+ **super().extra_links_params,
2703
+ "entry_type_id": self.entry_type_id,
2704
+ }
2652
2705
 
2706
+ def execute(self, context: Context):
2707
+ DataplexCatalogEntryTypeLink.persist(context=context)
2653
2708
  if self.validate_request:
2654
2709
  self.log.info("Validating a Create Dataplex Catalog EntryType request.")
2655
2710
  else:
@@ -2730,11 +2785,15 @@ class DataplexCatalogGetEntryTypeOperator(DataplexCatalogBaseOperator):
2730
2785
  super().__init__(*args, **kwargs)
2731
2786
  self.entry_type_id = entry_type_id
2732
2787
 
2788
+ @property
2789
+ def extra_links_params(self) -> dict[str, Any]:
2790
+ return {
2791
+ **super().extra_links_params,
2792
+ "entry_type_id": self.entry_type_id,
2793
+ }
2794
+
2733
2795
  def execute(self, context: Context):
2734
- DataplexCatalogEntryTypeLink.persist(
2735
- context=context,
2736
- task_instance=self,
2737
- )
2796
+ DataplexCatalogEntryTypeLink.persist(context=context)
2738
2797
  self.log.info(
2739
2798
  "Retrieving Dataplex Catalog EntryType %s.",
2740
2799
  self.entry_type_id,
@@ -2876,10 +2935,7 @@ class DataplexCatalogListEntryTypesOperator(DataplexCatalogBaseOperator):
2876
2935
  self.order_by = order_by
2877
2936
 
2878
2937
  def execute(self, context: Context):
2879
- DataplexCatalogEntryTypesLink.persist(
2880
- context=context,
2881
- task_instance=self,
2882
- )
2938
+ DataplexCatalogEntryTypesLink.persist(context=context)
2883
2939
  self.log.info(
2884
2940
  "Listing Dataplex Catalog EntryType from location %s.",
2885
2941
  self.location,
@@ -2897,8 +2953,7 @@ class DataplexCatalogListEntryTypesOperator(DataplexCatalogBaseOperator):
2897
2953
  metadata=self.metadata,
2898
2954
  )
2899
2955
  self.log.info("EntryType on page: %s", entry_type_on_page)
2900
- self.xcom_push(
2901
- context=context,
2956
+ context["ti"].xcom_push(
2902
2957
  key="entry_type_page",
2903
2958
  value=ListEntryTypesResponse.to_dict(entry_type_on_page._response),
2904
2959
  )
@@ -2968,12 +3023,15 @@ class DataplexCatalogUpdateEntryTypeOperator(DataplexCatalogBaseOperator):
2968
3023
  self.update_mask = update_mask
2969
3024
  self.validate_request = validate_request
2970
3025
 
2971
- def execute(self, context: Context):
2972
- DataplexCatalogEntryTypeLink.persist(
2973
- context=context,
2974
- task_instance=self,
2975
- )
3026
+ @property
3027
+ def extra_links_params(self) -> dict[str, Any]:
3028
+ return {
3029
+ **super().extra_links_params,
3030
+ "entry_type_id": self.entry_type_id,
3031
+ }
2976
3032
 
3033
+ def execute(self, context: Context):
3034
+ DataplexCatalogEntryTypeLink.persist(context=context)
2977
3035
  if self.validate_request:
2978
3036
  self.log.info("Validating an Update Dataplex Catalog EntryType request.")
2979
3037
  else:
@@ -3058,12 +3116,15 @@ class DataplexCatalogCreateAspectTypeOperator(DataplexCatalogBaseOperator):
3058
3116
  self.aspect_type_configuration = aspect_type_configuration
3059
3117
  self.validate_request = validate_request
3060
3118
 
3061
- def execute(self, context: Context):
3062
- DataplexCatalogAspectTypeLink.persist(
3063
- context=context,
3064
- task_instance=self,
3065
- )
3119
+ @property
3120
+ def extra_links_params(self) -> dict[str, Any]:
3121
+ return {
3122
+ **super().extra_links_params,
3123
+ "aspect_type_id": self.aspect_type_id,
3124
+ }
3066
3125
 
3126
+ def execute(self, context: Context):
3127
+ DataplexCatalogAspectTypeLink.persist(context=context)
3067
3128
  if self.validate_request:
3068
3129
  self.log.info("Validating a Create Dataplex Catalog AspectType request.")
3069
3130
  else:
@@ -3144,11 +3205,15 @@ class DataplexCatalogGetAspectTypeOperator(DataplexCatalogBaseOperator):
3144
3205
  super().__init__(*args, **kwargs)
3145
3206
  self.aspect_type_id = aspect_type_id
3146
3207
 
3208
+ @property
3209
+ def extra_links_params(self) -> dict[str, Any]:
3210
+ return {
3211
+ **super().extra_links_params,
3212
+ "aspect_type_id": self.aspect_type_id,
3213
+ }
3214
+
3147
3215
  def execute(self, context: Context):
3148
- DataplexCatalogAspectTypeLink.persist(
3149
- context=context,
3150
- task_instance=self,
3151
- )
3216
+ DataplexCatalogAspectTypeLink.persist(context=context)
3152
3217
  self.log.info(
3153
3218
  "Retrieving Dataplex Catalog AspectType %s.",
3154
3219
  self.aspect_type_id,
@@ -3223,10 +3288,7 @@ class DataplexCatalogListAspectTypesOperator(DataplexCatalogBaseOperator):
3223
3288
  self.order_by = order_by
3224
3289
 
3225
3290
  def execute(self, context: Context):
3226
- DataplexCatalogAspectTypesLink.persist(
3227
- context=context,
3228
- task_instance=self,
3229
- )
3291
+ DataplexCatalogAspectTypesLink.persist(context=context)
3230
3292
  self.log.info(
3231
3293
  "Listing Dataplex Catalog AspectType from location %s.",
3232
3294
  self.location,
@@ -3244,8 +3306,7 @@ class DataplexCatalogListAspectTypesOperator(DataplexCatalogBaseOperator):
3244
3306
  metadata=self.metadata,
3245
3307
  )
3246
3308
  self.log.info("AspectType on page: %s", aspect_type_on_page)
3247
- self.xcom_push(
3248
- context=context,
3309
+ context["ti"].xcom_push(
3249
3310
  key="aspect_type_page",
3250
3311
  value=ListAspectTypesResponse.to_dict(aspect_type_on_page._response),
3251
3312
  )
@@ -3315,12 +3376,15 @@ class DataplexCatalogUpdateAspectTypeOperator(DataplexCatalogBaseOperator):
3315
3376
  self.update_mask = update_mask
3316
3377
  self.validate_request = validate_request
3317
3378
 
3318
- def execute(self, context: Context):
3319
- DataplexCatalogAspectTypeLink.persist(
3320
- context=context,
3321
- task_instance=self,
3322
- )
3379
+ @property
3380
+ def extra_links_params(self) -> dict[str, Any]:
3381
+ return {
3382
+ **super().extra_links_params,
3383
+ "aspect_type_id": self.aspect_type_id,
3384
+ }
3323
3385
 
3386
+ def execute(self, context: Context):
3387
+ DataplexCatalogAspectTypeLink.persist(context=context)
3324
3388
  if self.validate_request:
3325
3389
  self.log.info("Validating an Update Dataplex Catalog AspectType request.")
3326
3390
  else:
@@ -3493,12 +3557,16 @@ class DataplexCatalogCreateEntryOperator(DataplexCatalogBaseOperator):
3493
3557
  f"Missing required fields in Entry configuration: {', '.join(missing_fields)}. "
3494
3558
  )
3495
3559
 
3496
- def execute(self, context: Context):
3497
- DataplexCatalogEntryLink.persist(
3498
- context=context,
3499
- task_instance=self,
3500
- )
3560
+ @property
3561
+ def extra_links_params(self) -> dict[str, Any]:
3562
+ return {
3563
+ **super().extra_links_params,
3564
+ "entry_id": self.entry_id,
3565
+ "entry_group_id": self.entry_group_id,
3566
+ }
3501
3567
 
3568
+ def execute(self, context: Context):
3569
+ DataplexCatalogEntryLink.persist(context=context)
3502
3570
  self._validate_fields(self.entry_configuration)
3503
3571
  try:
3504
3572
  entry = self.hook.create_entry(
@@ -3599,11 +3667,16 @@ class DataplexCatalogGetEntryOperator(DataplexCatalogBaseOperator):
3599
3667
  self.aspect_types = aspect_types
3600
3668
  self.paths = paths
3601
3669
 
3670
+ @property
3671
+ def extra_links_params(self) -> dict[str, Any]:
3672
+ return {
3673
+ **super().extra_links_params,
3674
+ "entry_id": self.entry_id,
3675
+ "entry_group_id": self.entry_group_id,
3676
+ }
3677
+
3602
3678
  def execute(self, context: Context):
3603
- DataplexCatalogEntryLink.persist(
3604
- context=context,
3605
- task_instance=self,
3606
- )
3679
+ DataplexCatalogEntryLink.persist(context=context)
3607
3680
  self.log.info(
3608
3681
  "Retrieving Dataplex Catalog Entry %s.",
3609
3682
  self.entry_id,
@@ -3701,11 +3774,15 @@ class DataplexCatalogListEntriesOperator(DataplexCatalogBaseOperator):
3701
3774
  self.page_token = page_token
3702
3775
  self.filter_by = filter_by
3703
3776
 
3777
+ @property
3778
+ def extra_links_params(self) -> dict[str, Any]:
3779
+ return {
3780
+ **super().extra_links_params,
3781
+ "entry_group_id": self.entry_group_id,
3782
+ }
3783
+
3704
3784
  def execute(self, context: Context):
3705
- DataplexCatalogEntryGroupLink.persist(
3706
- context=context,
3707
- task_instance=self,
3708
- )
3785
+ DataplexCatalogEntryGroupLink.persist(context=context)
3709
3786
  self.log.info(
3710
3787
  "Listing Dataplex Catalog Entry from location %s.",
3711
3788
  self.location,
@@ -3723,8 +3800,7 @@ class DataplexCatalogListEntriesOperator(DataplexCatalogBaseOperator):
3723
3800
  metadata=self.metadata,
3724
3801
  )
3725
3802
  self.log.info("Entries on page: %s", entries_on_page)
3726
- self.xcom_push(
3727
- context=context,
3803
+ context["ti"].xcom_push(
3728
3804
  key="entry_page",
3729
3805
  value=ListEntriesResponse.to_dict(entries_on_page._response),
3730
3806
  )
@@ -3821,8 +3897,7 @@ class DataplexCatalogSearchEntriesOperator(DataplexCatalogBaseOperator):
3821
3897
  metadata=self.metadata,
3822
3898
  )
3823
3899
  self.log.info("Entries on page: %s", entries_on_page)
3824
- self.xcom_push(
3825
- context=context,
3900
+ context["ti"].xcom_push(
3826
3901
  key="entry_page",
3827
3902
  value=SearchEntriesResponse.to_dict(entries_on_page._response),
3828
3903
  )
@@ -3903,11 +3978,16 @@ class DataplexCatalogLookupEntryOperator(DataplexCatalogBaseOperator):
3903
3978
  self.aspect_types = aspect_types
3904
3979
  self.paths = paths
3905
3980
 
3981
+ @property
3982
+ def extra_links_params(self) -> dict[str, Any]:
3983
+ return {
3984
+ **super().extra_links_params,
3985
+ "entry_id": self.entry_id,
3986
+ "entry_group_id": self.entry_group_id,
3987
+ }
3988
+
3906
3989
  def execute(self, context: Context):
3907
- DataplexCatalogEntryLink.persist(
3908
- context=context,
3909
- task_instance=self,
3910
- )
3990
+ DataplexCatalogEntryLink.persist(context=context)
3911
3991
  self.log.info(
3912
3992
  "Looking for Dataplex Catalog Entry %s.",
3913
3993
  self.entry_id,
@@ -3963,7 +4043,7 @@ class DataplexCatalogUpdateEntryOperator(DataplexCatalogBaseOperator):
3963
4043
  :param entry_configuration: Required. The updated configuration body of the Entry.
3964
4044
  :param allow_missing: Optional. If set to true and entry doesn't exist, the service will create it.
3965
4045
  :param delete_missing_aspects: Optional. If set to true and the aspect_keys specify aspect
3966
- ranges, the service deletes any existing aspects from that range that weren't provided
4046
+ ranges, the service deletes any existing aspects from that range that were not provided
3967
4047
  in the request.
3968
4048
  :param aspect_keys: Optional. The map keys of the Aspects which the service should modify.
3969
4049
  It supports the following syntax:
@@ -4022,12 +4102,16 @@ class DataplexCatalogUpdateEntryOperator(DataplexCatalogBaseOperator):
4022
4102
  self.delete_missing_aspects = delete_missing_aspects
4023
4103
  self.aspect_keys = aspect_keys
4024
4104
 
4025
- def execute(self, context: Context):
4026
- DataplexCatalogEntryLink.persist(
4027
- context=context,
4028
- task_instance=self,
4029
- )
4105
+ @property
4106
+ def extra_links_params(self) -> dict[str, Any]:
4107
+ return {
4108
+ **super().extra_links_params,
4109
+ "entry_id": self.entry_id,
4110
+ "entry_group_id": self.entry_group_id,
4111
+ }
4030
4112
 
4113
+ def execute(self, context: Context):
4114
+ DataplexCatalogEntryLink.persist(context=context)
4031
4115
  try:
4032
4116
  entry = self.hook.update_entry(
4033
4117
  location=self.location,
@@ -113,7 +113,6 @@ class DataprepGetJobGroupOperator(GoogleCloudBaseOperator):
113
113
  if self.project_id:
114
114
  DataprepJobGroupLink.persist(
115
115
  context=context,
116
- task_instance=self,
117
116
  project_id=self.project_id,
118
117
  job_group_id=int(self.job_group_id),
119
118
  )
@@ -170,7 +169,6 @@ class DataprepRunJobGroupOperator(GoogleCloudBaseOperator):
170
169
  if self.project_id and job_group_id:
171
170
  DataprepJobGroupLink.persist(
172
171
  context=context,
173
- task_instance=self,
174
172
  project_id=self.project_id,
175
173
  job_group_id=int(job_group_id),
176
174
  )
@@ -230,7 +228,6 @@ class DataprepCopyFlowOperator(GoogleCloudBaseOperator):
230
228
  if self.project_id and copied_flow_id:
231
229
  DataprepFlowLink.persist(
232
230
  context=context,
233
- task_instance=self,
234
231
  project_id=self.project_id,
235
232
  flow_id=int(copied_flow_id),
236
233
  )
@@ -303,7 +300,6 @@ class DataprepRunFlowOperator(GoogleCloudBaseOperator):
303
300
  job_group_id = response["data"][0]["id"]
304
301
  DataprepJobGroupLink.persist(
305
302
  context=context,
306
- task_instance=self,
307
303
  project_id=self.project_id,
308
304
  job_group_id=int(job_group_id),
309
305
  )