databricks-sdk 0.56.0__py3-none-any.whl → 0.58.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.

Potentially problematic release.


This version of databricks-sdk might be problematic. Click here for more details.

Files changed (31) hide show
  1. databricks/sdk/__init__.py +38 -11
  2. databricks/sdk/service/aibuilder.py +122 -17
  3. databricks/sdk/service/apps.py +15 -45
  4. databricks/sdk/service/billing.py +70 -74
  5. databricks/sdk/service/catalog.py +1898 -557
  6. databricks/sdk/service/cleanrooms.py +14 -55
  7. databricks/sdk/service/compute.py +305 -508
  8. databricks/sdk/service/dashboards.py +148 -223
  9. databricks/sdk/service/database.py +657 -127
  10. databricks/sdk/service/files.py +18 -54
  11. databricks/sdk/service/iam.py +55 -165
  12. databricks/sdk/service/jobs.py +238 -214
  13. databricks/sdk/service/marketplace.py +47 -146
  14. databricks/sdk/service/ml.py +1137 -447
  15. databricks/sdk/service/oauth2.py +17 -46
  16. databricks/sdk/service/pipelines.py +93 -69
  17. databricks/sdk/service/provisioning.py +34 -212
  18. databricks/sdk/service/qualitymonitorv2.py +5 -33
  19. databricks/sdk/service/serving.py +69 -55
  20. databricks/sdk/service/settings.py +106 -434
  21. databricks/sdk/service/sharing.py +33 -95
  22. databricks/sdk/service/sql.py +164 -254
  23. databricks/sdk/service/vectorsearch.py +13 -62
  24. databricks/sdk/service/workspace.py +36 -110
  25. databricks/sdk/version.py +1 -1
  26. {databricks_sdk-0.56.0.dist-info → databricks_sdk-0.58.0.dist-info}/METADATA +1 -1
  27. {databricks_sdk-0.56.0.dist-info → databricks_sdk-0.58.0.dist-info}/RECORD +31 -31
  28. {databricks_sdk-0.56.0.dist-info → databricks_sdk-0.58.0.dist-info}/WHEEL +0 -0
  29. {databricks_sdk-0.56.0.dist-info → databricks_sdk-0.58.0.dist-info}/licenses/LICENSE +0 -0
  30. {databricks_sdk-0.56.0.dist-info → databricks_sdk-0.58.0.dist-info}/licenses/NOTICE +0 -0
  31. {databricks_sdk-0.56.0.dist-info → databricks_sdk-0.58.0.dist-info}/top_level.txt +0 -0
@@ -520,8 +520,10 @@ class AwsIamRole:
520
520
 
521
521
  @dataclass
522
522
  class AwsIamRoleRequest:
523
+ """The AWS IAM role configuration"""
524
+
523
525
  role_arn: str
524
- """The Amazon Resource Name (ARN) of the AWS IAM role for S3 data access."""
526
+ """The Amazon Resource Name (ARN) of the AWS IAM role used to vend temporary credentials."""
525
527
 
526
528
  def as_dict(self) -> dict:
527
529
  """Serializes the AwsIamRoleRequest into a dictionary suitable for use as a JSON request body."""
@@ -545,11 +547,13 @@ class AwsIamRoleRequest:
545
547
 
546
548
  @dataclass
547
549
  class AwsIamRoleResponse:
550
+ """The AWS IAM role configuration"""
551
+
548
552
  role_arn: str
549
- """The Amazon Resource Name (ARN) of the AWS IAM role for S3 data access."""
553
+ """The Amazon Resource Name (ARN) of the AWS IAM role used to vend temporary credentials."""
550
554
 
551
555
  external_id: Optional[str] = None
552
- """The external ID used in role assumption to prevent confused deputy problem.."""
556
+ """The external ID used in role assumption to prevent the confused deputy problem."""
553
557
 
554
558
  unity_catalog_iam_arn: Optional[str] = None
555
559
  """The Amazon Resource Name (ARN) of the AWS IAM user managed by Databricks. This is the identity
@@ -594,7 +598,7 @@ class AwsSqsQueue:
594
598
 
595
599
  queue_url: Optional[str] = None
596
600
  """The AQS queue url in the format https://sqs.{region}.amazonaws.com/{account id}/{queue name}
597
- REQUIRED for provided_sqs."""
601
+ Required for provided_sqs."""
598
602
 
599
603
  def as_dict(self) -> dict:
600
604
  """Serializes the AwsSqsQueue into a dictionary suitable for use as a JSON request body."""
@@ -659,9 +663,7 @@ class AzureManagedIdentity:
659
663
  `/subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.Databricks/accessConnectors/{connector-name}`."""
660
664
 
661
665
  credential_id: Optional[str] = None
662
- """The Databricks internal ID that represents this managed identity. This field is only used to
663
- persist the credential_id once it is fetched from the credentials manager - as we only use the
664
- protobuf serializer to store credentials, this ID gets persisted to the database. ."""
666
+ """The Databricks internal ID that represents this managed identity."""
665
667
 
666
668
  managed_identity_id: Optional[str] = None
667
669
  """The Azure resource ID of the managed identity. Use the format,
@@ -704,16 +706,18 @@ class AzureManagedIdentity:
704
706
 
705
707
  @dataclass
706
708
  class AzureManagedIdentityRequest:
709
+ """The Azure managed identity configuration."""
710
+
707
711
  access_connector_id: str
708
712
  """The Azure resource ID of the Azure Databricks Access Connector. Use the format
709
- /subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.Databricks/accessConnectors/{connector-name}."""
713
+ `/subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.Databricks/accessConnectors/{connector-name}`."""
710
714
 
711
715
  managed_identity_id: Optional[str] = None
712
- """The Azure resource ID of the managed identity. Use the format
713
- /subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identity-name}.
716
+ """The Azure resource ID of the managed identity. Use the format,
717
+ `/subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identity-name}`
714
718
  This is only available for user-assgined identities. For system-assigned identities, the
715
719
  access_connector_id is used to identify the identity. If this field is not provided, then we
716
- assume the AzureManagedIdentity is for a system-assigned identity."""
720
+ assume the AzureManagedIdentity is using the system-assigned identity."""
717
721
 
718
722
  def as_dict(self) -> dict:
719
723
  """Serializes the AzureManagedIdentityRequest into a dictionary suitable for use as a JSON request body."""
@@ -744,19 +748,21 @@ class AzureManagedIdentityRequest:
744
748
 
745
749
  @dataclass
746
750
  class AzureManagedIdentityResponse:
751
+ """The Azure managed identity configuration."""
752
+
747
753
  access_connector_id: str
748
754
  """The Azure resource ID of the Azure Databricks Access Connector. Use the format
749
- /subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.Databricks/accessConnectors/{connector-name}."""
755
+ `/subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.Databricks/accessConnectors/{connector-name}`."""
750
756
 
751
757
  credential_id: Optional[str] = None
752
758
  """The Databricks internal ID that represents this managed identity."""
753
759
 
754
760
  managed_identity_id: Optional[str] = None
755
- """The Azure resource ID of the managed identity. Use the format
756
- /subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identity-name}.
761
+ """The Azure resource ID of the managed identity. Use the format,
762
+ `/subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identity-name}`
757
763
  This is only available for user-assgined identities. For system-assigned identities, the
758
764
  access_connector_id is used to identify the identity. If this field is not provided, then we
759
- assume the AzureManagedIdentity is for a system-assigned identity."""
765
+ assume the AzureManagedIdentity is using the system-assigned identity."""
760
766
 
761
767
  def as_dict(self) -> dict:
762
768
  """Serializes the AzureManagedIdentityResponse into a dictionary suitable for use as a JSON request body."""
@@ -797,15 +803,15 @@ class AzureQueueStorage:
797
803
 
798
804
  queue_url: Optional[str] = None
799
805
  """The AQS queue url in the format https://{storage account}.queue.core.windows.net/{queue name}
800
- REQUIRED for provided_aqs."""
806
+ Required for provided_aqs."""
801
807
 
802
808
  resource_group: Optional[str] = None
803
809
  """The resource group for the queue, event grid subscription, and external location storage
804
- account. ONLY REQUIRED for locations with a service principal storage credential"""
810
+ account. Only required for locations with a service principal storage credential"""
805
811
 
806
812
  subscription_id: Optional[str] = None
807
- """OPTIONAL: The subscription id for the queue, event grid subscription, and external location
808
- storage account. REQUIRED for locations with a service principal storage credential"""
813
+ """Optional subscription id for the queue, event grid subscription, and external location storage
814
+ account. Required for locations with a service principal storage credential"""
809
815
 
810
816
  def as_dict(self) -> dict:
811
817
  """Serializes the AzureQueueStorage into a dictionary suitable for use as a JSON request body."""
@@ -942,7 +948,6 @@ class CatalogInfo:
942
948
  through the BROWSE privilege when include_browse is enabled in the request."""
943
949
 
944
950
  catalog_type: Optional[CatalogType] = None
945
- """The type of the catalog."""
946
951
 
947
952
  comment: Optional[str] = None
948
953
  """User-provided free-form text description."""
@@ -988,10 +993,8 @@ class CatalogInfo:
988
993
  A Delta Sharing catalog is a catalog that is based on a Delta share on a remote sharing server."""
989
994
 
990
995
  provisioning_info: Optional[ProvisioningInfo] = None
991
- """Status of an asynchronously provisioned resource."""
992
996
 
993
997
  securable_type: Optional[SecurableType] = None
994
- """The type of Unity Catalog securable."""
995
998
 
996
999
  share_name: Optional[str] = None
997
1000
  """The name of the share under the share provider."""
@@ -1157,19 +1160,21 @@ class CatalogType(Enum):
1157
1160
  MANAGED_CATALOG = "MANAGED_CATALOG"
1158
1161
  MANAGED_ONLINE_CATALOG = "MANAGED_ONLINE_CATALOG"
1159
1162
  SYSTEM_CATALOG = "SYSTEM_CATALOG"
1160
- UNKNOWN_CATALOG_TYPE = "UNKNOWN_CATALOG_TYPE"
1161
1163
 
1162
1164
 
1163
1165
  @dataclass
1164
1166
  class CloudflareApiToken:
1167
+ """The Cloudflare API token configuration. Read more at
1168
+ https://developers.cloudflare.com/r2/api/s3/tokens/"""
1169
+
1165
1170
  access_key_id: str
1166
- """The Cloudflare access key id of the token."""
1171
+ """The access key ID associated with the API token."""
1167
1172
 
1168
1173
  secret_access_key: str
1169
- """The secret access token generated for the access key id"""
1174
+ """The secret access token generated for the above access key ID."""
1170
1175
 
1171
1176
  account_id: str
1172
- """The account id associated with the API token."""
1177
+ """The ID of the account associated with the API token."""
1173
1178
 
1174
1179
  def as_dict(self) -> dict:
1175
1180
  """Serializes the CloudflareApiToken into a dictionary suitable for use as a JSON request body."""
@@ -1350,6 +1355,36 @@ class ColumnMask:
1350
1355
  return cls(function_name=d.get("function_name", None), using_column_names=d.get("using_column_names", None))
1351
1356
 
1352
1357
 
1358
+ @dataclass
1359
+ class ColumnRelationship:
1360
+ source: Optional[str] = None
1361
+
1362
+ target: Optional[str] = None
1363
+
1364
+ def as_dict(self) -> dict:
1365
+ """Serializes the ColumnRelationship into a dictionary suitable for use as a JSON request body."""
1366
+ body = {}
1367
+ if self.source is not None:
1368
+ body["source"] = self.source
1369
+ if self.target is not None:
1370
+ body["target"] = self.target
1371
+ return body
1372
+
1373
+ def as_shallow_dict(self) -> dict:
1374
+ """Serializes the ColumnRelationship into a shallow dictionary of its immediate attributes."""
1375
+ body = {}
1376
+ if self.source is not None:
1377
+ body["source"] = self.source
1378
+ if self.target is not None:
1379
+ body["target"] = self.target
1380
+ return body
1381
+
1382
+ @classmethod
1383
+ def from_dict(cls, d: Dict[str, Any]) -> ColumnRelationship:
1384
+ """Deserializes the ColumnRelationship from a dictionary."""
1385
+ return cls(source=d.get("source", None), target=d.get("target", None))
1386
+
1387
+
1353
1388
  class ColumnTypeName(Enum):
1354
1389
 
1355
1390
  ARRAY = "ARRAY"
@@ -1378,6 +1413,33 @@ class ColumnTypeName(Enum):
1378
1413
  VARIANT = "VARIANT"
1379
1414
 
1380
1415
 
1416
+ @dataclass
1417
+ class ConnectionDependency:
1418
+ """A connection that is dependent on a SQL object."""
1419
+
1420
+ connection_name: Optional[str] = None
1421
+ """Full name of the dependent connection, in the form of __connection_name__."""
1422
+
1423
+ def as_dict(self) -> dict:
1424
+ """Serializes the ConnectionDependency into a dictionary suitable for use as a JSON request body."""
1425
+ body = {}
1426
+ if self.connection_name is not None:
1427
+ body["connection_name"] = self.connection_name
1428
+ return body
1429
+
1430
+ def as_shallow_dict(self) -> dict:
1431
+ """Serializes the ConnectionDependency into a shallow dictionary of its immediate attributes."""
1432
+ body = {}
1433
+ if self.connection_name is not None:
1434
+ body["connection_name"] = self.connection_name
1435
+ return body
1436
+
1437
+ @classmethod
1438
+ def from_dict(cls, d: Dict[str, Any]) -> ConnectionDependency:
1439
+ """Deserializes the ConnectionDependency from a dictionary."""
1440
+ return cls(connection_name=d.get("connection_name", None))
1441
+
1442
+
1381
1443
  @dataclass
1382
1444
  class ConnectionInfo:
1383
1445
  comment: Optional[str] = None
@@ -1417,13 +1479,11 @@ class ConnectionInfo:
1417
1479
  """A map of key-value properties attached to the securable."""
1418
1480
 
1419
1481
  provisioning_info: Optional[ProvisioningInfo] = None
1420
- """Status of an asynchronously provisioned resource."""
1421
1482
 
1422
1483
  read_only: Optional[bool] = None
1423
1484
  """If the connection is read only."""
1424
1485
 
1425
1486
  securable_type: Optional[SecurableType] = None
1426
- """The type of Unity Catalog securable."""
1427
1487
 
1428
1488
  updated_at: Optional[int] = None
1429
1489
  """Time at which this connection was updated, in epoch milliseconds."""
@@ -1542,7 +1602,7 @@ class ConnectionInfo:
1542
1602
 
1543
1603
 
1544
1604
  class ConnectionType(Enum):
1545
- """Next Id: 31"""
1605
+ """Next Id: 36"""
1546
1606
 
1547
1607
  BIGQUERY = "BIGQUERY"
1548
1608
  DATABRICKS = "DATABRICKS"
@@ -1773,19 +1833,19 @@ class CreateCredentialRequest:
1773
1833
  metastore."""
1774
1834
 
1775
1835
  aws_iam_role: Optional[AwsIamRole] = None
1776
- """The AWS IAM role configuration"""
1836
+ """The AWS IAM role configuration."""
1777
1837
 
1778
1838
  azure_managed_identity: Optional[AzureManagedIdentity] = None
1779
1839
  """The Azure managed identity configuration."""
1780
1840
 
1781
1841
  azure_service_principal: Optional[AzureServicePrincipal] = None
1782
- """The Azure service principal configuration. Only applicable when purpose is **STORAGE**."""
1842
+ """The Azure service principal configuration."""
1783
1843
 
1784
1844
  comment: Optional[str] = None
1785
1845
  """Comment associated with the credential."""
1786
1846
 
1787
1847
  databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None
1788
- """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
1848
+ """The Databricks managed GCP service account configuration."""
1789
1849
 
1790
1850
  purpose: Optional[CredentialPurpose] = None
1791
1851
  """Indicates the purpose of the credential."""
@@ -1874,10 +1934,9 @@ class CreateExternalLocation:
1874
1934
  """User-provided free-form text description."""
1875
1935
 
1876
1936
  enable_file_events: Optional[bool] = None
1877
- """[Create:OPT Update:OPT] Whether to enable file events on this external location."""
1937
+ """Whether to enable file events on this external location."""
1878
1938
 
1879
1939
  encryption_details: Optional[EncryptionDetails] = None
1880
- """Encryption options that apply to clients connecting to cloud storage."""
1881
1940
 
1882
1941
  fallback: Optional[bool] = None
1883
1942
  """Indicates whether fallback mode is enabled for this external location. When fallback mode is
@@ -1885,7 +1944,7 @@ class CreateExternalLocation:
1885
1944
  sufficient."""
1886
1945
 
1887
1946
  file_event_queue: Optional[FileEventQueue] = None
1888
- """[Create:OPT Update:OPT] File event queue settings."""
1947
+ """File event queue settings."""
1889
1948
 
1890
1949
  read_only: Optional[bool] = None
1891
1950
  """Indicates whether the external location is read-only."""
@@ -2483,6 +2542,65 @@ class CreateRegisteredModelRequest:
2483
2542
  )
2484
2543
 
2485
2544
 
2545
+ @dataclass
2546
+ class CreateRequestExternalLineage:
2547
+ source: ExternalLineageObject
2548
+ """Source object of the external lineage relationship."""
2549
+
2550
+ target: ExternalLineageObject
2551
+ """Target object of the external lineage relationship."""
2552
+
2553
+ columns: Optional[List[ColumnRelationship]] = None
2554
+ """List of column relationships between source and target objects."""
2555
+
2556
+ id: Optional[str] = None
2557
+ """Unique identifier of the external lineage relationship."""
2558
+
2559
+ properties: Optional[Dict[str, str]] = None
2560
+ """Key-value properties associated with the external lineage relationship."""
2561
+
2562
+ def as_dict(self) -> dict:
2563
+ """Serializes the CreateRequestExternalLineage into a dictionary suitable for use as a JSON request body."""
2564
+ body = {}
2565
+ if self.columns:
2566
+ body["columns"] = [v.as_dict() for v in self.columns]
2567
+ if self.id is not None:
2568
+ body["id"] = self.id
2569
+ if self.properties:
2570
+ body["properties"] = self.properties
2571
+ if self.source:
2572
+ body["source"] = self.source.as_dict()
2573
+ if self.target:
2574
+ body["target"] = self.target.as_dict()
2575
+ return body
2576
+
2577
+ def as_shallow_dict(self) -> dict:
2578
+ """Serializes the CreateRequestExternalLineage into a shallow dictionary of its immediate attributes."""
2579
+ body = {}
2580
+ if self.columns:
2581
+ body["columns"] = self.columns
2582
+ if self.id is not None:
2583
+ body["id"] = self.id
2584
+ if self.properties:
2585
+ body["properties"] = self.properties
2586
+ if self.source:
2587
+ body["source"] = self.source
2588
+ if self.target:
2589
+ body["target"] = self.target
2590
+ return body
2591
+
2592
+ @classmethod
2593
+ def from_dict(cls, d: Dict[str, Any]) -> CreateRequestExternalLineage:
2594
+ """Deserializes the CreateRequestExternalLineage from a dictionary."""
2595
+ return cls(
2596
+ columns=_repeated_dict(d, "columns", ColumnRelationship),
2597
+ id=d.get("id", None),
2598
+ properties=d.get("properties", None),
2599
+ source=_from_dict(d, "source", ExternalLineageObject),
2600
+ target=_from_dict(d, "target", ExternalLineageObject),
2601
+ )
2602
+
2603
+
2486
2604
  @dataclass
2487
2605
  class CreateResponse:
2488
2606
  def as_dict(self) -> dict:
@@ -2563,7 +2681,8 @@ class CreateSchema:
2563
2681
  @dataclass
2564
2682
  class CreateStorageCredential:
2565
2683
  name: str
2566
- """The credential name. The name must be unique within the metastore."""
2684
+ """The credential name. The name must be unique among storage and service credentials within the
2685
+ metastore."""
2567
2686
 
2568
2687
  aws_iam_role: Optional[AwsIamRoleRequest] = None
2569
2688
  """The AWS IAM role configuration."""
@@ -2584,7 +2703,8 @@ class CreateStorageCredential:
2584
2703
  """The Databricks managed GCP service account configuration."""
2585
2704
 
2586
2705
  read_only: Optional[bool] = None
2587
- """Whether the storage credential is only usable for read operations."""
2706
+ """Whether the credential is usable only for read operations. Only applicable when purpose is
2707
+ **STORAGE**."""
2588
2708
 
2589
2709
  skip_validation: Optional[bool] = None
2590
2710
  """Supplying true to this argument skips validation of the created credential."""
@@ -2659,8 +2779,6 @@ class CreateTableConstraint:
2659
2779
  """The full name of the table referenced by the constraint."""
2660
2780
 
2661
2781
  constraint: TableConstraint
2662
- """A table constraint, as defined by *one* of the following fields being set:
2663
- __primary_key_constraint__, __foreign_key_constraint__, __named_table_constraint__."""
2664
2782
 
2665
2783
  def as_dict(self) -> dict:
2666
2784
  """Serializes the CreateTableConstraint into a dictionary suitable for use as a JSON request body."""
@@ -2698,11 +2816,6 @@ class CreateVolumeRequestContent:
2698
2816
  """The name of the volume"""
2699
2817
 
2700
2818
  volume_type: VolumeType
2701
- """The type of the volume. An external volume is located in the specified external location. A
2702
- managed volume is located in the default location which is specified by the parent schema, or
2703
- the parent catalog, or the Metastore. [Learn more]
2704
-
2705
- [Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external"""
2706
2819
 
2707
2820
  comment: Optional[str] = None
2708
2821
  """The comment attached to the volume"""
@@ -2757,16 +2870,43 @@ class CreateVolumeRequestContent:
2757
2870
  )
2758
2871
 
2759
2872
 
2873
+ @dataclass
2874
+ class CredentialDependency:
2875
+ """A credential that is dependent on a SQL object."""
2876
+
2877
+ credential_name: Optional[str] = None
2878
+ """Full name of the dependent credential, in the form of __credential_name__."""
2879
+
2880
+ def as_dict(self) -> dict:
2881
+ """Serializes the CredentialDependency into a dictionary suitable for use as a JSON request body."""
2882
+ body = {}
2883
+ if self.credential_name is not None:
2884
+ body["credential_name"] = self.credential_name
2885
+ return body
2886
+
2887
+ def as_shallow_dict(self) -> dict:
2888
+ """Serializes the CredentialDependency into a shallow dictionary of its immediate attributes."""
2889
+ body = {}
2890
+ if self.credential_name is not None:
2891
+ body["credential_name"] = self.credential_name
2892
+ return body
2893
+
2894
+ @classmethod
2895
+ def from_dict(cls, d: Dict[str, Any]) -> CredentialDependency:
2896
+ """Deserializes the CredentialDependency from a dictionary."""
2897
+ return cls(credential_name=d.get("credential_name", None))
2898
+
2899
+
2760
2900
  @dataclass
2761
2901
  class CredentialInfo:
2762
2902
  aws_iam_role: Optional[AwsIamRole] = None
2763
- """The AWS IAM role configuration"""
2903
+ """The AWS IAM role configuration."""
2764
2904
 
2765
2905
  azure_managed_identity: Optional[AzureManagedIdentity] = None
2766
2906
  """The Azure managed identity configuration."""
2767
2907
 
2768
2908
  azure_service_principal: Optional[AzureServicePrincipal] = None
2769
- """The Azure service principal configuration. Only applicable when purpose is **STORAGE**."""
2909
+ """The Azure service principal configuration."""
2770
2910
 
2771
2911
  comment: Optional[str] = None
2772
2912
  """Comment associated with the credential."""
@@ -2778,7 +2918,7 @@ class CredentialInfo:
2778
2918
  """Username of credential creator."""
2779
2919
 
2780
2920
  databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None
2781
- """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
2921
+ """The Databricks managed GCP service account configuration."""
2782
2922
 
2783
2923
  full_name: Optional[str] = None
2784
2924
  """The full name of the credential."""
@@ -2930,8 +3070,9 @@ class CredentialPurpose(Enum):
2930
3070
 
2931
3071
 
2932
3072
  class CredentialType(Enum):
2933
- """Next Id: 12"""
3073
+ """Next Id: 13"""
2934
3074
 
3075
+ ANY_STATIC_CREDENTIAL = "ANY_STATIC_CREDENTIAL"
2935
3076
  BEARER_TOKEN = "BEARER_TOKEN"
2936
3077
  OAUTH_ACCESS_TOKEN = "OAUTH_ACCESS_TOKEN"
2937
3078
  OAUTH_M2M = "OAUTH_M2M"
@@ -2985,21 +3126,28 @@ class DataSourceFormat(Enum):
2985
3126
  BIGQUERY_FORMAT = "BIGQUERY_FORMAT"
2986
3127
  CSV = "CSV"
2987
3128
  DATABRICKS_FORMAT = "DATABRICKS_FORMAT"
3129
+ DATABRICKS_ROW_STORE_FORMAT = "DATABRICKS_ROW_STORE_FORMAT"
2988
3130
  DELTA = "DELTA"
2989
3131
  DELTASHARING = "DELTASHARING"
2990
- HIVE_CUSTOM = "HIVE_CUSTOM"
2991
- HIVE_SERDE = "HIVE_SERDE"
3132
+ DELTA_UNIFORM_HUDI = "DELTA_UNIFORM_HUDI"
3133
+ DELTA_UNIFORM_ICEBERG = "DELTA_UNIFORM_ICEBERG"
3134
+ HIVE = "HIVE"
3135
+ ICEBERG = "ICEBERG"
2992
3136
  JSON = "JSON"
3137
+ MONGODB_FORMAT = "MONGODB_FORMAT"
2993
3138
  MYSQL_FORMAT = "MYSQL_FORMAT"
2994
3139
  NETSUITE_FORMAT = "NETSUITE_FORMAT"
3140
+ ORACLE_FORMAT = "ORACLE_FORMAT"
2995
3141
  ORC = "ORC"
2996
3142
  PARQUET = "PARQUET"
2997
3143
  POSTGRESQL_FORMAT = "POSTGRESQL_FORMAT"
2998
3144
  REDSHIFT_FORMAT = "REDSHIFT_FORMAT"
3145
+ SALESFORCE_DATA_CLOUD_FORMAT = "SALESFORCE_DATA_CLOUD_FORMAT"
2999
3146
  SALESFORCE_FORMAT = "SALESFORCE_FORMAT"
3000
3147
  SNOWFLAKE_FORMAT = "SNOWFLAKE_FORMAT"
3001
3148
  SQLDW_FORMAT = "SQLDW_FORMAT"
3002
3149
  SQLSERVER_FORMAT = "SQLSERVER_FORMAT"
3150
+ TERADATA_FORMAT = "TERADATA_FORMAT"
3003
3151
  TEXT = "TEXT"
3004
3152
  UNITY_CATALOG = "UNITY_CATALOG"
3005
3153
  VECTOR_INDEX_FORMAT = "VECTOR_INDEX_FORMAT"
@@ -3011,9 +3159,7 @@ class DatabricksGcpServiceAccount:
3011
3159
  """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
3012
3160
 
3013
3161
  credential_id: Optional[str] = None
3014
- """The Databricks internal ID that represents this managed identity. This field is only used to
3015
- persist the credential_id once it is fetched from the credentials manager - as we only use the
3016
- protobuf serializer to store credentials, this ID gets persisted to the database"""
3162
+ """The Databricks internal ID that represents this managed identity."""
3017
3163
 
3018
3164
  email: Optional[str] = None
3019
3165
  """The email of the service account."""
@@ -3055,6 +3201,8 @@ class DatabricksGcpServiceAccount:
3055
3201
 
3056
3202
  @dataclass
3057
3203
  class DatabricksGcpServiceAccountRequest:
3204
+ """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
3205
+
3058
3206
  def as_dict(self) -> dict:
3059
3207
  """Serializes the DatabricksGcpServiceAccountRequest into a dictionary suitable for use as a JSON request body."""
3060
3208
  body = {}
@@ -3073,11 +3221,13 @@ class DatabricksGcpServiceAccountRequest:
3073
3221
 
3074
3222
  @dataclass
3075
3223
  class DatabricksGcpServiceAccountResponse:
3224
+ """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
3225
+
3076
3226
  credential_id: Optional[str] = None
3077
- """The Databricks internal ID that represents this service account. This is an output-only field."""
3227
+ """The Databricks internal ID that represents this managed identity."""
3078
3228
 
3079
3229
  email: Optional[str] = None
3080
- """The email of the service account. This is an output-only field."""
3230
+ """The email of the service account."""
3081
3231
 
3082
3232
  def as_dict(self) -> dict:
3083
3233
  """Serializes the DatabricksGcpServiceAccountResponse into a dictionary suitable for use as a JSON request body."""
@@ -3139,6 +3289,49 @@ class DeleteCredentialResponse:
3139
3289
  return cls()
3140
3290
 
3141
3291
 
3292
+ @dataclass
3293
+ class DeleteRequestExternalLineage:
3294
+ source: ExternalLineageObject
3295
+ """Source object of the external lineage relationship."""
3296
+
3297
+ target: ExternalLineageObject
3298
+ """Target object of the external lineage relationship."""
3299
+
3300
+ id: Optional[str] = None
3301
+ """Unique identifier of the external lineage relationship."""
3302
+
3303
+ def as_dict(self) -> dict:
3304
+ """Serializes the DeleteRequestExternalLineage into a dictionary suitable for use as a JSON request body."""
3305
+ body = {}
3306
+ if self.id is not None:
3307
+ body["id"] = self.id
3308
+ if self.source:
3309
+ body["source"] = self.source.as_dict()
3310
+ if self.target:
3311
+ body["target"] = self.target.as_dict()
3312
+ return body
3313
+
3314
+ def as_shallow_dict(self) -> dict:
3315
+ """Serializes the DeleteRequestExternalLineage into a shallow dictionary of its immediate attributes."""
3316
+ body = {}
3317
+ if self.id is not None:
3318
+ body["id"] = self.id
3319
+ if self.source:
3320
+ body["source"] = self.source
3321
+ if self.target:
3322
+ body["target"] = self.target
3323
+ return body
3324
+
3325
+ @classmethod
3326
+ def from_dict(cls, d: Dict[str, Any]) -> DeleteRequestExternalLineage:
3327
+ """Deserializes the DeleteRequestExternalLineage from a dictionary."""
3328
+ return cls(
3329
+ id=d.get("id", None),
3330
+ source=_from_dict(d, "source", ExternalLineageObject),
3331
+ target=_from_dict(d, "target", ExternalLineageObject),
3332
+ )
3333
+
3334
+
3142
3335
  @dataclass
3143
3336
  class DeleteResponse:
3144
3337
  def as_dict(self) -> dict:
@@ -3193,18 +3386,24 @@ class DeltaSharingScopeEnum(Enum):
3193
3386
 
3194
3387
  @dataclass
3195
3388
  class Dependency:
3196
- """A dependency of a SQL object. Either the __table__ field or the __function__ field must be
3197
- defined."""
3389
+ """A dependency of a SQL object. One of the following fields must be defined: __table__,
3390
+ __function__, __connection__, or __credential__."""
3391
+
3392
+ connection: Optional[ConnectionDependency] = None
3393
+
3394
+ credential: Optional[CredentialDependency] = None
3198
3395
 
3199
3396
  function: Optional[FunctionDependency] = None
3200
- """A function that is dependent on a SQL object."""
3201
3397
 
3202
3398
  table: Optional[TableDependency] = None
3203
- """A table that is dependent on a SQL object."""
3204
3399
 
3205
3400
  def as_dict(self) -> dict:
3206
3401
  """Serializes the Dependency into a dictionary suitable for use as a JSON request body."""
3207
3402
  body = {}
3403
+ if self.connection:
3404
+ body["connection"] = self.connection.as_dict()
3405
+ if self.credential:
3406
+ body["credential"] = self.credential.as_dict()
3208
3407
  if self.function:
3209
3408
  body["function"] = self.function.as_dict()
3210
3409
  if self.table:
@@ -3214,6 +3413,10 @@ class Dependency:
3214
3413
  def as_shallow_dict(self) -> dict:
3215
3414
  """Serializes the Dependency into a shallow dictionary of its immediate attributes."""
3216
3415
  body = {}
3416
+ if self.connection:
3417
+ body["connection"] = self.connection
3418
+ if self.credential:
3419
+ body["credential"] = self.credential
3217
3420
  if self.function:
3218
3421
  body["function"] = self.function
3219
3422
  if self.table:
@@ -3224,7 +3427,10 @@ class Dependency:
3224
3427
  def from_dict(cls, d: Dict[str, Any]) -> Dependency:
3225
3428
  """Deserializes the Dependency from a dictionary."""
3226
3429
  return cls(
3227
- function=_from_dict(d, "function", FunctionDependency), table=_from_dict(d, "table", TableDependency)
3430
+ connection=_from_dict(d, "connection", ConnectionDependency),
3431
+ credential=_from_dict(d, "credential", CredentialDependency),
3432
+ function=_from_dict(d, "function", FunctionDependency),
3433
+ table=_from_dict(d, "table", TableDependency),
3228
3434
  )
3229
3435
 
3230
3436
 
@@ -3535,70 +3741,607 @@ class EncryptionDetails:
3535
3741
 
3536
3742
 
3537
3743
  @dataclass
3538
- class ExternalLocationInfo:
3539
- browse_only: Optional[bool] = None
3540
- """Indicates whether the principal is limited to retrieving metadata for the associated object
3541
- through the BROWSE privilege when include_browse is enabled in the request."""
3744
+ class ExternalLineageExternalMetadata:
3745
+ name: Optional[str] = None
3542
3746
 
3543
- comment: Optional[str] = None
3544
- """User-provided free-form text description."""
3747
+ def as_dict(self) -> dict:
3748
+ """Serializes the ExternalLineageExternalMetadata into a dictionary suitable for use as a JSON request body."""
3749
+ body = {}
3750
+ if self.name is not None:
3751
+ body["name"] = self.name
3752
+ return body
3545
3753
 
3546
- created_at: Optional[int] = None
3547
- """Time at which this external location was created, in epoch milliseconds."""
3754
+ def as_shallow_dict(self) -> dict:
3755
+ """Serializes the ExternalLineageExternalMetadata into a shallow dictionary of its immediate attributes."""
3756
+ body = {}
3757
+ if self.name is not None:
3758
+ body["name"] = self.name
3759
+ return body
3548
3760
 
3549
- created_by: Optional[str] = None
3550
- """Username of external location creator."""
3761
+ @classmethod
3762
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageExternalMetadata:
3763
+ """Deserializes the ExternalLineageExternalMetadata from a dictionary."""
3764
+ return cls(name=d.get("name", None))
3551
3765
 
3552
- credential_id: Optional[str] = None
3553
- """Unique ID of the location's storage credential."""
3554
3766
 
3555
- credential_name: Optional[str] = None
3556
- """Name of the storage credential used with this location."""
3767
+ @dataclass
3768
+ class ExternalLineageExternalMetadataInfo:
3769
+ """Represents the external metadata object in the lineage event."""
3557
3770
 
3558
- enable_file_events: Optional[bool] = None
3559
- """[Create:OPT Update:OPT] Whether to enable file events on this external location."""
3771
+ entity_type: Optional[str] = None
3772
+ """Type of entity represented by the external metadata object."""
3560
3773
 
3561
- encryption_details: Optional[EncryptionDetails] = None
3562
- """Encryption options that apply to clients connecting to cloud storage."""
3774
+ event_time: Optional[str] = None
3775
+ """Timestamp of the lineage event."""
3563
3776
 
3564
- fallback: Optional[bool] = None
3565
- """Indicates whether fallback mode is enabled for this external location. When fallback mode is
3566
- enabled, the access to the location falls back to cluster credentials if UC credentials are not
3567
- sufficient."""
3777
+ name: Optional[str] = None
3778
+ """Name of the external metadata object."""
3568
3779
 
3569
- file_event_queue: Optional[FileEventQueue] = None
3570
- """[Create:OPT Update:OPT] File event queue settings."""
3780
+ system_type: Optional[SystemType] = None
3781
+ """Type of external system."""
3571
3782
 
3572
- isolation_mode: Optional[IsolationMode] = None
3783
+ def as_dict(self) -> dict:
3784
+ """Serializes the ExternalLineageExternalMetadataInfo into a dictionary suitable for use as a JSON request body."""
3785
+ body = {}
3786
+ if self.entity_type is not None:
3787
+ body["entity_type"] = self.entity_type
3788
+ if self.event_time is not None:
3789
+ body["event_time"] = self.event_time
3790
+ if self.name is not None:
3791
+ body["name"] = self.name
3792
+ if self.system_type is not None:
3793
+ body["system_type"] = self.system_type.value
3794
+ return body
3573
3795
 
3574
- metastore_id: Optional[str] = None
3575
- """Unique identifier of metastore hosting the external location."""
3796
+ def as_shallow_dict(self) -> dict:
3797
+ """Serializes the ExternalLineageExternalMetadataInfo into a shallow dictionary of its immediate attributes."""
3798
+ body = {}
3799
+ if self.entity_type is not None:
3800
+ body["entity_type"] = self.entity_type
3801
+ if self.event_time is not None:
3802
+ body["event_time"] = self.event_time
3803
+ if self.name is not None:
3804
+ body["name"] = self.name
3805
+ if self.system_type is not None:
3806
+ body["system_type"] = self.system_type
3807
+ return body
3576
3808
 
3577
- name: Optional[str] = None
3578
- """Name of the external location."""
3809
+ @classmethod
3810
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageExternalMetadataInfo:
3811
+ """Deserializes the ExternalLineageExternalMetadataInfo from a dictionary."""
3812
+ return cls(
3813
+ entity_type=d.get("entity_type", None),
3814
+ event_time=d.get("event_time", None),
3815
+ name=d.get("name", None),
3816
+ system_type=_enum(d, "system_type", SystemType),
3817
+ )
3579
3818
 
3580
- owner: Optional[str] = None
3581
- """The owner of the external location."""
3582
3819
 
3583
- read_only: Optional[bool] = None
3584
- """Indicates whether the external location is read-only."""
3820
+ @dataclass
3821
+ class ExternalLineageFileInfo:
3822
+ """Represents the path information in the lineage event."""
3585
3823
 
3586
- updated_at: Optional[int] = None
3587
- """Time at which external location this was last modified, in epoch milliseconds."""
3824
+ event_time: Optional[str] = None
3825
+ """Timestamp of the lineage event."""
3588
3826
 
3589
- updated_by: Optional[str] = None
3590
- """Username of user who last modified the external location."""
3827
+ path: Optional[str] = None
3828
+ """URL of the path."""
3591
3829
 
3592
- url: Optional[str] = None
3593
- """Path URL of the external location."""
3830
+ securable_name: Optional[str] = None
3831
+ """The full name of the securable on the path."""
3832
+
3833
+ securable_type: Optional[str] = None
3834
+ """The securable type of the securable on the path."""
3835
+
3836
+ storage_location: Optional[str] = None
3837
+ """The storage location associated with securable on the path."""
3594
3838
 
3595
3839
  def as_dict(self) -> dict:
3596
- """Serializes the ExternalLocationInfo into a dictionary suitable for use as a JSON request body."""
3840
+ """Serializes the ExternalLineageFileInfo into a dictionary suitable for use as a JSON request body."""
3597
3841
  body = {}
3598
- if self.browse_only is not None:
3599
- body["browse_only"] = self.browse_only
3600
- if self.comment is not None:
3601
- body["comment"] = self.comment
3842
+ if self.event_time is not None:
3843
+ body["event_time"] = self.event_time
3844
+ if self.path is not None:
3845
+ body["path"] = self.path
3846
+ if self.securable_name is not None:
3847
+ body["securable_name"] = self.securable_name
3848
+ if self.securable_type is not None:
3849
+ body["securable_type"] = self.securable_type
3850
+ if self.storage_location is not None:
3851
+ body["storage_location"] = self.storage_location
3852
+ return body
3853
+
3854
+ def as_shallow_dict(self) -> dict:
3855
+ """Serializes the ExternalLineageFileInfo into a shallow dictionary of its immediate attributes."""
3856
+ body = {}
3857
+ if self.event_time is not None:
3858
+ body["event_time"] = self.event_time
3859
+ if self.path is not None:
3860
+ body["path"] = self.path
3861
+ if self.securable_name is not None:
3862
+ body["securable_name"] = self.securable_name
3863
+ if self.securable_type is not None:
3864
+ body["securable_type"] = self.securable_type
3865
+ if self.storage_location is not None:
3866
+ body["storage_location"] = self.storage_location
3867
+ return body
3868
+
3869
+ @classmethod
3870
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageFileInfo:
3871
+ """Deserializes the ExternalLineageFileInfo from a dictionary."""
3872
+ return cls(
3873
+ event_time=d.get("event_time", None),
3874
+ path=d.get("path", None),
3875
+ securable_name=d.get("securable_name", None),
3876
+ securable_type=d.get("securable_type", None),
3877
+ storage_location=d.get("storage_location", None),
3878
+ )
3879
+
3880
+
3881
+ @dataclass
3882
+ class ExternalLineageInfo:
3883
+ """Lineage response containing lineage information of a data asset."""
3884
+
3885
+ external_lineage_info: Optional[ExternalLineageRelationshipInfo] = None
3886
+ """Information about the edge metadata of the external lineage relationship."""
3887
+
3888
+ external_metadata_info: Optional[ExternalLineageExternalMetadataInfo] = None
3889
+ """Information about external metadata involved in the lineage relationship."""
3890
+
3891
+ file_info: Optional[ExternalLineageFileInfo] = None
3892
+ """Information about the file involved in the lineage relationship."""
3893
+
3894
+ model_info: Optional[ExternalLineageModelVersionInfo] = None
3895
+ """Information about the model version involved in the lineage relationship."""
3896
+
3897
+ table_info: Optional[ExternalLineageTableInfo] = None
3898
+ """Information about the table involved in the lineage relationship."""
3899
+
3900
+ def as_dict(self) -> dict:
3901
+ """Serializes the ExternalLineageInfo into a dictionary suitable for use as a JSON request body."""
3902
+ body = {}
3903
+ if self.external_lineage_info:
3904
+ body["external_lineage_info"] = self.external_lineage_info.as_dict()
3905
+ if self.external_metadata_info:
3906
+ body["external_metadata_info"] = self.external_metadata_info.as_dict()
3907
+ if self.file_info:
3908
+ body["file_info"] = self.file_info.as_dict()
3909
+ if self.model_info:
3910
+ body["model_info"] = self.model_info.as_dict()
3911
+ if self.table_info:
3912
+ body["table_info"] = self.table_info.as_dict()
3913
+ return body
3914
+
3915
+ def as_shallow_dict(self) -> dict:
3916
+ """Serializes the ExternalLineageInfo into a shallow dictionary of its immediate attributes."""
3917
+ body = {}
3918
+ if self.external_lineage_info:
3919
+ body["external_lineage_info"] = self.external_lineage_info
3920
+ if self.external_metadata_info:
3921
+ body["external_metadata_info"] = self.external_metadata_info
3922
+ if self.file_info:
3923
+ body["file_info"] = self.file_info
3924
+ if self.model_info:
3925
+ body["model_info"] = self.model_info
3926
+ if self.table_info:
3927
+ body["table_info"] = self.table_info
3928
+ return body
3929
+
3930
+ @classmethod
3931
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageInfo:
3932
+ """Deserializes the ExternalLineageInfo from a dictionary."""
3933
+ return cls(
3934
+ external_lineage_info=_from_dict(d, "external_lineage_info", ExternalLineageRelationshipInfo),
3935
+ external_metadata_info=_from_dict(d, "external_metadata_info", ExternalLineageExternalMetadataInfo),
3936
+ file_info=_from_dict(d, "file_info", ExternalLineageFileInfo),
3937
+ model_info=_from_dict(d, "model_info", ExternalLineageModelVersionInfo),
3938
+ table_info=_from_dict(d, "table_info", ExternalLineageTableInfo),
3939
+ )
3940
+
3941
+
3942
+ @dataclass
3943
+ class ExternalLineageModelVersion:
3944
+ name: Optional[str] = None
3945
+
3946
+ version: Optional[str] = None
3947
+
3948
+ def as_dict(self) -> dict:
3949
+ """Serializes the ExternalLineageModelVersion into a dictionary suitable for use as a JSON request body."""
3950
+ body = {}
3951
+ if self.name is not None:
3952
+ body["name"] = self.name
3953
+ if self.version is not None:
3954
+ body["version"] = self.version
3955
+ return body
3956
+
3957
+ def as_shallow_dict(self) -> dict:
3958
+ """Serializes the ExternalLineageModelVersion into a shallow dictionary of its immediate attributes."""
3959
+ body = {}
3960
+ if self.name is not None:
3961
+ body["name"] = self.name
3962
+ if self.version is not None:
3963
+ body["version"] = self.version
3964
+ return body
3965
+
3966
+ @classmethod
3967
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageModelVersion:
3968
+ """Deserializes the ExternalLineageModelVersion from a dictionary."""
3969
+ return cls(name=d.get("name", None), version=d.get("version", None))
3970
+
3971
+
3972
+ @dataclass
3973
+ class ExternalLineageModelVersionInfo:
3974
+ """Represents the model version information in the lineage event."""
3975
+
3976
+ event_time: Optional[str] = None
3977
+ """Timestamp of the lineage event."""
3978
+
3979
+ model_name: Optional[str] = None
3980
+ """Name of the model."""
3981
+
3982
+ version: Optional[int] = None
3983
+ """Version number of the model."""
3984
+
3985
+ def as_dict(self) -> dict:
3986
+ """Serializes the ExternalLineageModelVersionInfo into a dictionary suitable for use as a JSON request body."""
3987
+ body = {}
3988
+ if self.event_time is not None:
3989
+ body["event_time"] = self.event_time
3990
+ if self.model_name is not None:
3991
+ body["model_name"] = self.model_name
3992
+ if self.version is not None:
3993
+ body["version"] = self.version
3994
+ return body
3995
+
3996
+ def as_shallow_dict(self) -> dict:
3997
+ """Serializes the ExternalLineageModelVersionInfo into a shallow dictionary of its immediate attributes."""
3998
+ body = {}
3999
+ if self.event_time is not None:
4000
+ body["event_time"] = self.event_time
4001
+ if self.model_name is not None:
4002
+ body["model_name"] = self.model_name
4003
+ if self.version is not None:
4004
+ body["version"] = self.version
4005
+ return body
4006
+
4007
+ @classmethod
4008
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageModelVersionInfo:
4009
+ """Deserializes the ExternalLineageModelVersionInfo from a dictionary."""
4010
+ return cls(
4011
+ event_time=d.get("event_time", None), model_name=d.get("model_name", None), version=d.get("version", None)
4012
+ )
4013
+
4014
+
4015
+ @dataclass
4016
+ class ExternalLineageObject:
4017
+ external_metadata: Optional[ExternalLineageExternalMetadata] = None
4018
+
4019
+ model_version: Optional[ExternalLineageModelVersion] = None
4020
+
4021
+ path: Optional[ExternalLineagePath] = None
4022
+
4023
+ table: Optional[ExternalLineageTable] = None
4024
+
4025
+ def as_dict(self) -> dict:
4026
+ """Serializes the ExternalLineageObject into a dictionary suitable for use as a JSON request body."""
4027
+ body = {}
4028
+ if self.external_metadata:
4029
+ body["external_metadata"] = self.external_metadata.as_dict()
4030
+ if self.model_version:
4031
+ body["model_version"] = self.model_version.as_dict()
4032
+ if self.path:
4033
+ body["path"] = self.path.as_dict()
4034
+ if self.table:
4035
+ body["table"] = self.table.as_dict()
4036
+ return body
4037
+
4038
+ def as_shallow_dict(self) -> dict:
4039
+ """Serializes the ExternalLineageObject into a shallow dictionary of its immediate attributes."""
4040
+ body = {}
4041
+ if self.external_metadata:
4042
+ body["external_metadata"] = self.external_metadata
4043
+ if self.model_version:
4044
+ body["model_version"] = self.model_version
4045
+ if self.path:
4046
+ body["path"] = self.path
4047
+ if self.table:
4048
+ body["table"] = self.table
4049
+ return body
4050
+
4051
+ @classmethod
4052
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageObject:
4053
+ """Deserializes the ExternalLineageObject from a dictionary."""
4054
+ return cls(
4055
+ external_metadata=_from_dict(d, "external_metadata", ExternalLineageExternalMetadata),
4056
+ model_version=_from_dict(d, "model_version", ExternalLineageModelVersion),
4057
+ path=_from_dict(d, "path", ExternalLineagePath),
4058
+ table=_from_dict(d, "table", ExternalLineageTable),
4059
+ )
4060
+
4061
+
4062
+ @dataclass
4063
+ class ExternalLineagePath:
4064
+ url: Optional[str] = None
4065
+
4066
+ def as_dict(self) -> dict:
4067
+ """Serializes the ExternalLineagePath into a dictionary suitable for use as a JSON request body."""
4068
+ body = {}
4069
+ if self.url is not None:
4070
+ body["url"] = self.url
4071
+ return body
4072
+
4073
+ def as_shallow_dict(self) -> dict:
4074
+ """Serializes the ExternalLineagePath into a shallow dictionary of its immediate attributes."""
4075
+ body = {}
4076
+ if self.url is not None:
4077
+ body["url"] = self.url
4078
+ return body
4079
+
4080
+ @classmethod
4081
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineagePath:
4082
+ """Deserializes the ExternalLineagePath from a dictionary."""
4083
+ return cls(url=d.get("url", None))
4084
+
4085
+
4086
+ @dataclass
4087
+ class ExternalLineageRelationship:
4088
+ source: ExternalLineageObject
4089
+ """Source object of the external lineage relationship."""
4090
+
4091
+ target: ExternalLineageObject
4092
+ """Target object of the external lineage relationship."""
4093
+
4094
+ columns: Optional[List[ColumnRelationship]] = None
4095
+ """List of column relationships between source and target objects."""
4096
+
4097
+ id: Optional[str] = None
4098
+ """Unique identifier of the external lineage relationship."""
4099
+
4100
+ properties: Optional[Dict[str, str]] = None
4101
+ """Key-value properties associated with the external lineage relationship."""
4102
+
4103
+ def as_dict(self) -> dict:
4104
+ """Serializes the ExternalLineageRelationship into a dictionary suitable for use as a JSON request body."""
4105
+ body = {}
4106
+ if self.columns:
4107
+ body["columns"] = [v.as_dict() for v in self.columns]
4108
+ if self.id is not None:
4109
+ body["id"] = self.id
4110
+ if self.properties:
4111
+ body["properties"] = self.properties
4112
+ if self.source:
4113
+ body["source"] = self.source.as_dict()
4114
+ if self.target:
4115
+ body["target"] = self.target.as_dict()
4116
+ return body
4117
+
4118
+ def as_shallow_dict(self) -> dict:
4119
+ """Serializes the ExternalLineageRelationship into a shallow dictionary of its immediate attributes."""
4120
+ body = {}
4121
+ if self.columns:
4122
+ body["columns"] = self.columns
4123
+ if self.id is not None:
4124
+ body["id"] = self.id
4125
+ if self.properties:
4126
+ body["properties"] = self.properties
4127
+ if self.source:
4128
+ body["source"] = self.source
4129
+ if self.target:
4130
+ body["target"] = self.target
4131
+ return body
4132
+
4133
+ @classmethod
4134
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageRelationship:
4135
+ """Deserializes the ExternalLineageRelationship from a dictionary."""
4136
+ return cls(
4137
+ columns=_repeated_dict(d, "columns", ColumnRelationship),
4138
+ id=d.get("id", None),
4139
+ properties=d.get("properties", None),
4140
+ source=_from_dict(d, "source", ExternalLineageObject),
4141
+ target=_from_dict(d, "target", ExternalLineageObject),
4142
+ )
4143
+
4144
+
4145
+ @dataclass
4146
+ class ExternalLineageRelationshipInfo:
4147
+ source: ExternalLineageObject
4148
+ """Source object of the external lineage relationship."""
4149
+
4150
+ target: ExternalLineageObject
4151
+ """Target object of the external lineage relationship."""
4152
+
4153
+ columns: Optional[List[ColumnRelationship]] = None
4154
+ """List of column relationships between source and target objects."""
4155
+
4156
+ id: Optional[str] = None
4157
+ """Unique identifier of the external lineage relationship."""
4158
+
4159
+ properties: Optional[Dict[str, str]] = None
4160
+ """Key-value properties associated with the external lineage relationship."""
4161
+
4162
+ def as_dict(self) -> dict:
4163
+ """Serializes the ExternalLineageRelationshipInfo into a dictionary suitable for use as a JSON request body."""
4164
+ body = {}
4165
+ if self.columns:
4166
+ body["columns"] = [v.as_dict() for v in self.columns]
4167
+ if self.id is not None:
4168
+ body["id"] = self.id
4169
+ if self.properties:
4170
+ body["properties"] = self.properties
4171
+ if self.source:
4172
+ body["source"] = self.source.as_dict()
4173
+ if self.target:
4174
+ body["target"] = self.target.as_dict()
4175
+ return body
4176
+
4177
+ def as_shallow_dict(self) -> dict:
4178
+ """Serializes the ExternalLineageRelationshipInfo into a shallow dictionary of its immediate attributes."""
4179
+ body = {}
4180
+ if self.columns:
4181
+ body["columns"] = self.columns
4182
+ if self.id is not None:
4183
+ body["id"] = self.id
4184
+ if self.properties:
4185
+ body["properties"] = self.properties
4186
+ if self.source:
4187
+ body["source"] = self.source
4188
+ if self.target:
4189
+ body["target"] = self.target
4190
+ return body
4191
+
4192
+ @classmethod
4193
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageRelationshipInfo:
4194
+ """Deserializes the ExternalLineageRelationshipInfo from a dictionary."""
4195
+ return cls(
4196
+ columns=_repeated_dict(d, "columns", ColumnRelationship),
4197
+ id=d.get("id", None),
4198
+ properties=d.get("properties", None),
4199
+ source=_from_dict(d, "source", ExternalLineageObject),
4200
+ target=_from_dict(d, "target", ExternalLineageObject),
4201
+ )
4202
+
4203
+
4204
+ @dataclass
4205
+ class ExternalLineageTable:
4206
+ name: Optional[str] = None
4207
+
4208
+ def as_dict(self) -> dict:
4209
+ """Serializes the ExternalLineageTable into a dictionary suitable for use as a JSON request body."""
4210
+ body = {}
4211
+ if self.name is not None:
4212
+ body["name"] = self.name
4213
+ return body
4214
+
4215
+ def as_shallow_dict(self) -> dict:
4216
+ """Serializes the ExternalLineageTable into a shallow dictionary of its immediate attributes."""
4217
+ body = {}
4218
+ if self.name is not None:
4219
+ body["name"] = self.name
4220
+ return body
4221
+
4222
+ @classmethod
4223
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageTable:
4224
+ """Deserializes the ExternalLineageTable from a dictionary."""
4225
+ return cls(name=d.get("name", None))
4226
+
4227
+
4228
+ @dataclass
4229
+ class ExternalLineageTableInfo:
4230
+ """Represents the table information in the lineage event."""
4231
+
4232
+ catalog_name: Optional[str] = None
4233
+ """Name of Catalog."""
4234
+
4235
+ event_time: Optional[str] = None
4236
+ """Timestamp of the lineage event."""
4237
+
4238
+ name: Optional[str] = None
4239
+ """Name of Table."""
4240
+
4241
+ schema_name: Optional[str] = None
4242
+ """Name of Schema."""
4243
+
4244
+ def as_dict(self) -> dict:
4245
+ """Serializes the ExternalLineageTableInfo into a dictionary suitable for use as a JSON request body."""
4246
+ body = {}
4247
+ if self.catalog_name is not None:
4248
+ body["catalog_name"] = self.catalog_name
4249
+ if self.event_time is not None:
4250
+ body["event_time"] = self.event_time
4251
+ if self.name is not None:
4252
+ body["name"] = self.name
4253
+ if self.schema_name is not None:
4254
+ body["schema_name"] = self.schema_name
4255
+ return body
4256
+
4257
+ def as_shallow_dict(self) -> dict:
4258
+ """Serializes the ExternalLineageTableInfo into a shallow dictionary of its immediate attributes."""
4259
+ body = {}
4260
+ if self.catalog_name is not None:
4261
+ body["catalog_name"] = self.catalog_name
4262
+ if self.event_time is not None:
4263
+ body["event_time"] = self.event_time
4264
+ if self.name is not None:
4265
+ body["name"] = self.name
4266
+ if self.schema_name is not None:
4267
+ body["schema_name"] = self.schema_name
4268
+ return body
4269
+
4270
+ @classmethod
4271
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalLineageTableInfo:
4272
+ """Deserializes the ExternalLineageTableInfo from a dictionary."""
4273
+ return cls(
4274
+ catalog_name=d.get("catalog_name", None),
4275
+ event_time=d.get("event_time", None),
4276
+ name=d.get("name", None),
4277
+ schema_name=d.get("schema_name", None),
4278
+ )
4279
+
4280
+
4281
+ @dataclass
4282
+ class ExternalLocationInfo:
4283
+ browse_only: Optional[bool] = None
4284
+ """Indicates whether the principal is limited to retrieving metadata for the associated object
4285
+ through the BROWSE privilege when include_browse is enabled in the request."""
4286
+
4287
+ comment: Optional[str] = None
4288
+ """User-provided free-form text description."""
4289
+
4290
+ created_at: Optional[int] = None
4291
+ """Time at which this external location was created, in epoch milliseconds."""
4292
+
4293
+ created_by: Optional[str] = None
4294
+ """Username of external location creator."""
4295
+
4296
+ credential_id: Optional[str] = None
4297
+ """Unique ID of the location's storage credential."""
4298
+
4299
+ credential_name: Optional[str] = None
4300
+ """Name of the storage credential used with this location."""
4301
+
4302
+ enable_file_events: Optional[bool] = None
4303
+ """Whether to enable file events on this external location."""
4304
+
4305
+ encryption_details: Optional[EncryptionDetails] = None
4306
+
4307
+ fallback: Optional[bool] = None
4308
+ """Indicates whether fallback mode is enabled for this external location. When fallback mode is
4309
+ enabled, the access to the location falls back to cluster credentials if UC credentials are not
4310
+ sufficient."""
4311
+
4312
+ file_event_queue: Optional[FileEventQueue] = None
4313
+ """File event queue settings."""
4314
+
4315
+ isolation_mode: Optional[IsolationMode] = None
4316
+
4317
+ metastore_id: Optional[str] = None
4318
+ """Unique identifier of metastore hosting the external location."""
4319
+
4320
+ name: Optional[str] = None
4321
+ """Name of the external location."""
4322
+
4323
+ owner: Optional[str] = None
4324
+ """The owner of the external location."""
4325
+
4326
+ read_only: Optional[bool] = None
4327
+ """Indicates whether the external location is read-only."""
4328
+
4329
+ updated_at: Optional[int] = None
4330
+ """Time at which external location this was last modified, in epoch milliseconds."""
4331
+
4332
+ updated_by: Optional[str] = None
4333
+ """Username of user who last modified the external location."""
4334
+
4335
+ url: Optional[str] = None
4336
+ """Path URL of the external location."""
4337
+
4338
+ def as_dict(self) -> dict:
4339
+ """Serializes the ExternalLocationInfo into a dictionary suitable for use as a JSON request body."""
4340
+ body = {}
4341
+ if self.browse_only is not None:
4342
+ body["browse_only"] = self.browse_only
4343
+ if self.comment is not None:
4344
+ body["comment"] = self.comment
3602
4345
  if self.created_at is not None:
3603
4346
  body["created_at"] = self.created_at
3604
4347
  if self.created_by is not None:
@@ -3692,8 +4435,139 @@ class ExternalLocationInfo:
3692
4435
  metastore_id=d.get("metastore_id", None),
3693
4436
  name=d.get("name", None),
3694
4437
  owner=d.get("owner", None),
3695
- read_only=d.get("read_only", None),
3696
- updated_at=d.get("updated_at", None),
4438
+ read_only=d.get("read_only", None),
4439
+ updated_at=d.get("updated_at", None),
4440
+ updated_by=d.get("updated_by", None),
4441
+ url=d.get("url", None),
4442
+ )
4443
+
4444
+
4445
+ @dataclass
4446
+ class ExternalMetadata:
4447
+ name: str
4448
+ """Name of the external metadata object."""
4449
+
4450
+ system_type: SystemType
4451
+ """Type of external system."""
4452
+
4453
+ entity_type: str
4454
+ """Type of entity within the external system."""
4455
+
4456
+ columns: Optional[List[str]] = None
4457
+ """List of columns associated with the external metadata object."""
4458
+
4459
+ create_time: Optional[str] = None
4460
+ """Time at which this external metadata object was created."""
4461
+
4462
+ created_by: Optional[str] = None
4463
+ """Username of external metadata object creator."""
4464
+
4465
+ description: Optional[str] = None
4466
+ """User-provided free-form text description."""
4467
+
4468
+ id: Optional[str] = None
4469
+ """Unique identifier of the external metadata object."""
4470
+
4471
+ metastore_id: Optional[str] = None
4472
+ """Unique identifier of parent metastore."""
4473
+
4474
+ owner: Optional[str] = None
4475
+ """Owner of the external metadata object."""
4476
+
4477
+ properties: Optional[Dict[str, str]] = None
4478
+ """A map of key-value properties attached to the external metadata object."""
4479
+
4480
+ update_time: Optional[str] = None
4481
+ """Time at which this external metadata object was last modified."""
4482
+
4483
+ updated_by: Optional[str] = None
4484
+ """Username of user who last modified external metadata object."""
4485
+
4486
+ url: Optional[str] = None
4487
+ """URL associated with the external metadata object."""
4488
+
4489
+ def as_dict(self) -> dict:
4490
+ """Serializes the ExternalMetadata into a dictionary suitable for use as a JSON request body."""
4491
+ body = {}
4492
+ if self.columns:
4493
+ body["columns"] = [v for v in self.columns]
4494
+ if self.create_time is not None:
4495
+ body["create_time"] = self.create_time
4496
+ if self.created_by is not None:
4497
+ body["created_by"] = self.created_by
4498
+ if self.description is not None:
4499
+ body["description"] = self.description
4500
+ if self.entity_type is not None:
4501
+ body["entity_type"] = self.entity_type
4502
+ if self.id is not None:
4503
+ body["id"] = self.id
4504
+ if self.metastore_id is not None:
4505
+ body["metastore_id"] = self.metastore_id
4506
+ if self.name is not None:
4507
+ body["name"] = self.name
4508
+ if self.owner is not None:
4509
+ body["owner"] = self.owner
4510
+ if self.properties:
4511
+ body["properties"] = self.properties
4512
+ if self.system_type is not None:
4513
+ body["system_type"] = self.system_type.value
4514
+ if self.update_time is not None:
4515
+ body["update_time"] = self.update_time
4516
+ if self.updated_by is not None:
4517
+ body["updated_by"] = self.updated_by
4518
+ if self.url is not None:
4519
+ body["url"] = self.url
4520
+ return body
4521
+
4522
+ def as_shallow_dict(self) -> dict:
4523
+ """Serializes the ExternalMetadata into a shallow dictionary of its immediate attributes."""
4524
+ body = {}
4525
+ if self.columns:
4526
+ body["columns"] = self.columns
4527
+ if self.create_time is not None:
4528
+ body["create_time"] = self.create_time
4529
+ if self.created_by is not None:
4530
+ body["created_by"] = self.created_by
4531
+ if self.description is not None:
4532
+ body["description"] = self.description
4533
+ if self.entity_type is not None:
4534
+ body["entity_type"] = self.entity_type
4535
+ if self.id is not None:
4536
+ body["id"] = self.id
4537
+ if self.metastore_id is not None:
4538
+ body["metastore_id"] = self.metastore_id
4539
+ if self.name is not None:
4540
+ body["name"] = self.name
4541
+ if self.owner is not None:
4542
+ body["owner"] = self.owner
4543
+ if self.properties:
4544
+ body["properties"] = self.properties
4545
+ if self.system_type is not None:
4546
+ body["system_type"] = self.system_type
4547
+ if self.update_time is not None:
4548
+ body["update_time"] = self.update_time
4549
+ if self.updated_by is not None:
4550
+ body["updated_by"] = self.updated_by
4551
+ if self.url is not None:
4552
+ body["url"] = self.url
4553
+ return body
4554
+
4555
+ @classmethod
4556
+ def from_dict(cls, d: Dict[str, Any]) -> ExternalMetadata:
4557
+ """Deserializes the ExternalMetadata from a dictionary."""
4558
+ return cls(
4559
+ columns=d.get("columns", None),
4560
+ create_time=d.get("create_time", None),
4561
+ created_by=d.get("created_by", None),
4562
+ description=d.get("description", None),
4563
+ entity_type=d.get("entity_type", None),
4564
+ id=d.get("id", None),
4565
+ metastore_id=d.get("metastore_id", None),
4566
+ name=d.get("name", None),
4567
+ owner=d.get("owner", None),
4568
+ properties=d.get("properties", None),
4569
+ system_type=_enum(d, "system_type", SystemType),
4570
+ update_time=d.get("update_time", None),
3697
4571
  updated_by=d.get("updated_by", None),
3698
4572
  url=d.get("url", None),
3699
4573
  )
@@ -3815,6 +4689,9 @@ class ForeignKeyConstraint:
3815
4689
  parent_columns: List[str]
3816
4690
  """Column names for this constraint."""
3817
4691
 
4692
+ rely: Optional[bool] = None
4693
+ """True if the constraint is RELY, false or unset if NORELY."""
4694
+
3818
4695
  def as_dict(self) -> dict:
3819
4696
  """Serializes the ForeignKeyConstraint into a dictionary suitable for use as a JSON request body."""
3820
4697
  body = {}
@@ -3826,6 +4703,8 @@ class ForeignKeyConstraint:
3826
4703
  body["parent_columns"] = [v for v in self.parent_columns]
3827
4704
  if self.parent_table is not None:
3828
4705
  body["parent_table"] = self.parent_table
4706
+ if self.rely is not None:
4707
+ body["rely"] = self.rely
3829
4708
  return body
3830
4709
 
3831
4710
  def as_shallow_dict(self) -> dict:
@@ -3839,6 +4718,8 @@ class ForeignKeyConstraint:
3839
4718
  body["parent_columns"] = self.parent_columns
3840
4719
  if self.parent_table is not None:
3841
4720
  body["parent_table"] = self.parent_table
4721
+ if self.rely is not None:
4722
+ body["rely"] = self.rely
3842
4723
  return body
3843
4724
 
3844
4725
  @classmethod
@@ -3849,6 +4730,7 @@ class ForeignKeyConstraint:
3849
4730
  name=d.get("name", None),
3850
4731
  parent_columns=d.get("parent_columns", None),
3851
4732
  parent_table=d.get("parent_table", None),
4733
+ rely=d.get("rely", None),
3852
4734
  )
3853
4735
 
3854
4736
 
@@ -4192,10 +5074,8 @@ class FunctionParameterInfo:
4192
5074
  """Default value of the parameter."""
4193
5075
 
4194
5076
  parameter_mode: Optional[FunctionParameterMode] = None
4195
- """The mode of the function parameter."""
4196
5077
 
4197
5078
  parameter_type: Optional[FunctionParameterType] = None
4198
- """The type of function parameter."""
4199
5079
 
4200
5080
  type_interval_type: Optional[str] = None
4201
5081
  """Format of IntervalType."""
@@ -4358,7 +5238,7 @@ class GcpPubsub:
4358
5238
 
4359
5239
  subscription_name: Optional[str] = None
4360
5240
  """The Pub/Sub subscription name in the format projects/{project}/subscriptions/{subscription name}
4361
- REQUIRED for provided_pubsub."""
5241
+ Required for provided_pubsub."""
4362
5242
 
4363
5243
  def as_dict(self) -> dict:
4364
5244
  """Serializes the GcpPubsub into a dictionary suitable for use as a JSON request body."""
@@ -4450,10 +5330,8 @@ class GenerateTemporaryServiceCredentialRequest:
4450
5330
  """The name of the service credential used to generate a temporary credential"""
4451
5331
 
4452
5332
  azure_options: Optional[GenerateTemporaryServiceCredentialAzureOptions] = None
4453
- """The Azure cloud options to customize the requested temporary credential"""
4454
5333
 
4455
5334
  gcp_options: Optional[GenerateTemporaryServiceCredentialGcpOptions] = None
4456
- """The GCP cloud options to customize the requested temporary credential"""
4457
5335
 
4458
5336
  def as_dict(self) -> dict:
4459
5337
  """Serializes the GenerateTemporaryServiceCredentialRequest into a dictionary suitable for use as a JSON request body."""
@@ -4524,29 +5402,18 @@ class GenerateTemporaryTableCredentialRequest:
4524
5402
  @dataclass
4525
5403
  class GenerateTemporaryTableCredentialResponse:
4526
5404
  aws_temp_credentials: Optional[AwsCredentials] = None
4527
- """AWS temporary credentials for API authentication. Read more at
4528
- https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html."""
4529
5405
 
4530
5406
  azure_aad: Optional[AzureActiveDirectoryToken] = None
4531
- """Azure Active Directory token, essentially the Oauth token for Azure Service Principal or Managed
4532
- Identity. Read more at
4533
- https://learn.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token"""
4534
5407
 
4535
5408
  azure_user_delegation_sas: Optional[AzureUserDelegationSas] = None
4536
- """Azure temporary credentials for API authentication. Read more at
4537
- https://docs.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas"""
4538
5409
 
4539
5410
  expiration_time: Optional[int] = None
4540
5411
  """Server time when the credential will expire, in epoch milliseconds. The API client is advised to
4541
5412
  cache the credential given this expiration time."""
4542
5413
 
4543
5414
  gcp_oauth_token: Optional[GcpOauthToken] = None
4544
- """GCP temporary credentials for API authentication. Read more at
4545
- https://developers.google.com/identity/protocols/oauth2/service-account"""
4546
5415
 
4547
5416
  r2_temp_credentials: Optional[R2Credentials] = None
4548
- """R2 temporary credentials for API authentication. Read more at
4549
- https://developers.cloudflare.com/r2/api/s3/tokens/."""
4550
5417
 
4551
5418
  url: Optional[str] = None
4552
5419
  """The URL of the storage path accessible by the temporary credential."""
@@ -4908,6 +5775,12 @@ class IsolationMode(Enum):
4908
5775
  ISOLATION_MODE_OPEN = "ISOLATION_MODE_OPEN"
4909
5776
 
4910
5777
 
5778
+ class LineageDirection(Enum):
5779
+
5780
+ DOWNSTREAM = "DOWNSTREAM"
5781
+ UPSTREAM = "UPSTREAM"
5782
+
5783
+
4911
5784
  @dataclass
4912
5785
  class ListAccountMetastoreAssignmentsResponse:
4913
5786
  """The list of workspaces to which the given metastore is assigned."""
@@ -5061,6 +5934,39 @@ class ListCredentialsResponse:
5061
5934
  )
5062
5935
 
5063
5936
 
5937
+ @dataclass
5938
+ class ListExternalLineageRelationshipsResponse:
5939
+ external_lineage_relationships: Optional[List[ExternalLineageInfo]] = None
5940
+
5941
+ next_page_token: Optional[str] = None
5942
+
5943
+ def as_dict(self) -> dict:
5944
+ """Serializes the ListExternalLineageRelationshipsResponse into a dictionary suitable for use as a JSON request body."""
5945
+ body = {}
5946
+ if self.external_lineage_relationships:
5947
+ body["external_lineage_relationships"] = [v.as_dict() for v in self.external_lineage_relationships]
5948
+ if self.next_page_token is not None:
5949
+ body["next_page_token"] = self.next_page_token
5950
+ return body
5951
+
5952
+ def as_shallow_dict(self) -> dict:
5953
+ """Serializes the ListExternalLineageRelationshipsResponse into a shallow dictionary of its immediate attributes."""
5954
+ body = {}
5955
+ if self.external_lineage_relationships:
5956
+ body["external_lineage_relationships"] = self.external_lineage_relationships
5957
+ if self.next_page_token is not None:
5958
+ body["next_page_token"] = self.next_page_token
5959
+ return body
5960
+
5961
+ @classmethod
5962
+ def from_dict(cls, d: Dict[str, Any]) -> ListExternalLineageRelationshipsResponse:
5963
+ """Deserializes the ListExternalLineageRelationshipsResponse from a dictionary."""
5964
+ return cls(
5965
+ external_lineage_relationships=_repeated_dict(d, "external_lineage_relationships", ExternalLineageInfo),
5966
+ next_page_token=d.get("next_page_token", None),
5967
+ )
5968
+
5969
+
5064
5970
  @dataclass
5065
5971
  class ListExternalLocationsResponse:
5066
5972
  external_locations: Optional[List[ExternalLocationInfo]] = None
@@ -5097,6 +6003,39 @@ class ListExternalLocationsResponse:
5097
6003
  )
5098
6004
 
5099
6005
 
6006
+ @dataclass
6007
+ class ListExternalMetadataResponse:
6008
+ external_metadata: Optional[List[ExternalMetadata]] = None
6009
+
6010
+ next_page_token: Optional[str] = None
6011
+
6012
+ def as_dict(self) -> dict:
6013
+ """Serializes the ListExternalMetadataResponse into a dictionary suitable for use as a JSON request body."""
6014
+ body = {}
6015
+ if self.external_metadata:
6016
+ body["external_metadata"] = [v.as_dict() for v in self.external_metadata]
6017
+ if self.next_page_token is not None:
6018
+ body["next_page_token"] = self.next_page_token
6019
+ return body
6020
+
6021
+ def as_shallow_dict(self) -> dict:
6022
+ """Serializes the ListExternalMetadataResponse into a shallow dictionary of its immediate attributes."""
6023
+ body = {}
6024
+ if self.external_metadata:
6025
+ body["external_metadata"] = self.external_metadata
6026
+ if self.next_page_token is not None:
6027
+ body["next_page_token"] = self.next_page_token
6028
+ return body
6029
+
6030
+ @classmethod
6031
+ def from_dict(cls, d: Dict[str, Any]) -> ListExternalMetadataResponse:
6032
+ """Deserializes the ListExternalMetadataResponse from a dictionary."""
6033
+ return cls(
6034
+ external_metadata=_repeated_dict(d, "external_metadata", ExternalMetadata),
6035
+ next_page_token=d.get("next_page_token", None),
6036
+ )
6037
+
6038
+
5100
6039
  @dataclass
5101
6040
  class ListFunctionsResponse:
5102
6041
  functions: Optional[List[FunctionInfo]] = None
@@ -6085,7 +7024,6 @@ class MonitorInfo:
6085
7024
  """The full name of the table to monitor. Format: __catalog_name__.__schema_name__.__table_name__."""
6086
7025
 
6087
7026
  status: MonitorInfoStatus
6088
- """The status of the monitor."""
6089
7027
 
6090
7028
  monitor_version: str
6091
7029
  """The version of the monitor config (e.g. 1,2,3). If negative, the monitor may be corrupted."""
@@ -6771,26 +7709,18 @@ class OnlineTableStatus:
6771
7709
  """Status of an online table."""
6772
7710
 
6773
7711
  continuous_update_status: Optional[ContinuousUpdateStatus] = None
6774
- """Detailed status of an online table. Shown if the online table is in the ONLINE_CONTINUOUS_UPDATE
6775
- or the ONLINE_UPDATING_PIPELINE_RESOURCES state."""
6776
7712
 
6777
7713
  detailed_state: Optional[OnlineTableState] = None
6778
7714
  """The state of the online table."""
6779
7715
 
6780
7716
  failed_status: Optional[FailedStatus] = None
6781
- """Detailed status of an online table. Shown if the online table is in the OFFLINE_FAILED or the
6782
- ONLINE_PIPELINE_FAILED state."""
6783
7717
 
6784
7718
  message: Optional[str] = None
6785
7719
  """A text description of the current state of the online table."""
6786
7720
 
6787
7721
  provisioning_status: Optional[ProvisioningStatus] = None
6788
- """Detailed status of an online table. Shown if the online table is in the
6789
- PROVISIONING_PIPELINE_RESOURCES or the PROVISIONING_INITIAL_SNAPSHOT state."""
6790
7722
 
6791
7723
  triggered_update_status: Optional[TriggeredUpdateStatus] = None
6792
- """Detailed status of an online table. Shown if the online table is in the ONLINE_TRIGGERED_UPDATE
6793
- or the ONLINE_NO_PENDING_UPDATE state."""
6794
7724
 
6795
7725
  def as_dict(self) -> dict:
6796
7726
  """Serializes the OnlineTableStatus into a dictionary suitable for use as a JSON request body."""
@@ -6839,6 +7769,169 @@ class OnlineTableStatus:
6839
7769
  )
6840
7770
 
6841
7771
 
7772
+ @dataclass
7773
+ class OptionSpec:
7774
+ """Spec of an allowed option on a securable kind and its attributes. This is mostly used by UI to
7775
+ provide user friendly hints and descriptions in order to facilitate the securable creation
7776
+ process."""
7777
+
7778
+ allowed_values: Optional[List[str]] = None
7779
+ """For drop down / radio button selections, UI will want to know the possible input values, it can
7780
+ also be used by other option types to limit input selections."""
7781
+
7782
+ default_value: Optional[str] = None
7783
+ """The default value of the option, for example, value '443' for 'port' option."""
7784
+
7785
+ description: Optional[str] = None
7786
+ """A concise user facing description of what the input value of this option should look like."""
7787
+
7788
+ hint: Optional[str] = None
7789
+ """The hint is used on the UI to suggest what the input value can possibly be like, for example:
7790
+ example.com for 'host' option. Unlike default value, it will not be applied automatically
7791
+ without user input."""
7792
+
7793
+ is_copiable: Optional[bool] = None
7794
+ """Indicates whether an option should be displayed with copy button on the UI."""
7795
+
7796
+ is_creatable: Optional[bool] = None
7797
+ """Indicates whether an option can be provided by users in the create/update path of an entity."""
7798
+
7799
+ is_hidden: Optional[bool] = None
7800
+ """Is the option value not user settable and is thus not shown on the UI."""
7801
+
7802
+ is_loggable: Optional[bool] = None
7803
+ """Specifies whether this option is safe to log, i.e. no sensitive information."""
7804
+
7805
+ is_required: Optional[bool] = None
7806
+ """Is the option required."""
7807
+
7808
+ is_secret: Optional[bool] = None
7809
+ """Is the option value considered secret and thus redacted on the UI."""
7810
+
7811
+ is_updatable: Optional[bool] = None
7812
+ """Is the option updatable by users."""
7813
+
7814
+ name: Optional[str] = None
7815
+ """The unique name of the option."""
7816
+
7817
+ oauth_stage: Optional[OptionSpecOauthStage] = None
7818
+ """Specifies when the option value is displayed on the UI within the OAuth flow."""
7819
+
7820
+ type: Optional[OptionSpecOptionType] = None
7821
+ """The type of the option."""
7822
+
7823
+ def as_dict(self) -> dict:
7824
+ """Serializes the OptionSpec into a dictionary suitable for use as a JSON request body."""
7825
+ body = {}
7826
+ if self.allowed_values:
7827
+ body["allowed_values"] = [v for v in self.allowed_values]
7828
+ if self.default_value is not None:
7829
+ body["default_value"] = self.default_value
7830
+ if self.description is not None:
7831
+ body["description"] = self.description
7832
+ if self.hint is not None:
7833
+ body["hint"] = self.hint
7834
+ if self.is_copiable is not None:
7835
+ body["is_copiable"] = self.is_copiable
7836
+ if self.is_creatable is not None:
7837
+ body["is_creatable"] = self.is_creatable
7838
+ if self.is_hidden is not None:
7839
+ body["is_hidden"] = self.is_hidden
7840
+ if self.is_loggable is not None:
7841
+ body["is_loggable"] = self.is_loggable
7842
+ if self.is_required is not None:
7843
+ body["is_required"] = self.is_required
7844
+ if self.is_secret is not None:
7845
+ body["is_secret"] = self.is_secret
7846
+ if self.is_updatable is not None:
7847
+ body["is_updatable"] = self.is_updatable
7848
+ if self.name is not None:
7849
+ body["name"] = self.name
7850
+ if self.oauth_stage is not None:
7851
+ body["oauth_stage"] = self.oauth_stage.value
7852
+ if self.type is not None:
7853
+ body["type"] = self.type.value
7854
+ return body
7855
+
7856
+ def as_shallow_dict(self) -> dict:
7857
+ """Serializes the OptionSpec into a shallow dictionary of its immediate attributes."""
7858
+ body = {}
7859
+ if self.allowed_values:
7860
+ body["allowed_values"] = self.allowed_values
7861
+ if self.default_value is not None:
7862
+ body["default_value"] = self.default_value
7863
+ if self.description is not None:
7864
+ body["description"] = self.description
7865
+ if self.hint is not None:
7866
+ body["hint"] = self.hint
7867
+ if self.is_copiable is not None:
7868
+ body["is_copiable"] = self.is_copiable
7869
+ if self.is_creatable is not None:
7870
+ body["is_creatable"] = self.is_creatable
7871
+ if self.is_hidden is not None:
7872
+ body["is_hidden"] = self.is_hidden
7873
+ if self.is_loggable is not None:
7874
+ body["is_loggable"] = self.is_loggable
7875
+ if self.is_required is not None:
7876
+ body["is_required"] = self.is_required
7877
+ if self.is_secret is not None:
7878
+ body["is_secret"] = self.is_secret
7879
+ if self.is_updatable is not None:
7880
+ body["is_updatable"] = self.is_updatable
7881
+ if self.name is not None:
7882
+ body["name"] = self.name
7883
+ if self.oauth_stage is not None:
7884
+ body["oauth_stage"] = self.oauth_stage
7885
+ if self.type is not None:
7886
+ body["type"] = self.type
7887
+ return body
7888
+
7889
+ @classmethod
7890
+ def from_dict(cls, d: Dict[str, Any]) -> OptionSpec:
7891
+ """Deserializes the OptionSpec from a dictionary."""
7892
+ return cls(
7893
+ allowed_values=d.get("allowed_values", None),
7894
+ default_value=d.get("default_value", None),
7895
+ description=d.get("description", None),
7896
+ hint=d.get("hint", None),
7897
+ is_copiable=d.get("is_copiable", None),
7898
+ is_creatable=d.get("is_creatable", None),
7899
+ is_hidden=d.get("is_hidden", None),
7900
+ is_loggable=d.get("is_loggable", None),
7901
+ is_required=d.get("is_required", None),
7902
+ is_secret=d.get("is_secret", None),
7903
+ is_updatable=d.get("is_updatable", None),
7904
+ name=d.get("name", None),
7905
+ oauth_stage=_enum(d, "oauth_stage", OptionSpecOauthStage),
7906
+ type=_enum(d, "type", OptionSpecOptionType),
7907
+ )
7908
+
7909
+
7910
+ class OptionSpecOauthStage(Enum):
7911
+ """During the OAuth flow, specifies which stage the option should be displayed in the UI.
7912
+ OAUTH_STAGE_UNSPECIFIED is the default value for options unrelated to the OAuth flow.
7913
+ BEFORE_AUTHORIZATION_CODE corresponds to options necessary to initiate the OAuth process.
7914
+ BEFORE_ACCESS_TOKEN corresponds to options that are necessary to create a foreign connection,
7915
+ but that should be displayed after the authorization code has already been received."""
7916
+
7917
+ BEFORE_ACCESS_TOKEN = "BEFORE_ACCESS_TOKEN"
7918
+ BEFORE_AUTHORIZATION_CODE = "BEFORE_AUTHORIZATION_CODE"
7919
+
7920
+
7921
+ class OptionSpecOptionType(Enum):
7922
+ """Type of the option, we purposely follow JavaScript types so that the UI can map the options to
7923
+ JS types. https://www.w3schools.com/js/js_datatypes.asp Enum is a special case that it's just
7924
+ string with selections."""
7925
+
7926
+ OPTION_BIGINT = "OPTION_BIGINT"
7927
+ OPTION_BOOLEAN = "OPTION_BOOLEAN"
7928
+ OPTION_ENUM = "OPTION_ENUM"
7929
+ OPTION_MULTILINE_STRING = "OPTION_MULTILINE_STRING"
7930
+ OPTION_NUMBER = "OPTION_NUMBER"
7931
+ OPTION_SERVICE_CREDENTIAL = "OPTION_SERVICE_CREDENTIAL"
7932
+ OPTION_STRING = "OPTION_STRING"
7933
+
7934
+
6842
7935
  @dataclass
6843
7936
  class PermissionsChange:
6844
7937
  add: Optional[List[Privilege]] = None
@@ -6952,6 +8045,9 @@ class PrimaryKeyConstraint:
6952
8045
  child_columns: List[str]
6953
8046
  """Column names for this constraint."""
6954
8047
 
8048
+ rely: Optional[bool] = None
8049
+ """True if the constraint is RELY, false or unset if NORELY."""
8050
+
6955
8051
  timeseries_columns: Optional[List[str]] = None
6956
8052
  """Column names that represent a timeseries."""
6957
8053
 
@@ -6962,6 +8058,8 @@ class PrimaryKeyConstraint:
6962
8058
  body["child_columns"] = [v for v in self.child_columns]
6963
8059
  if self.name is not None:
6964
8060
  body["name"] = self.name
8061
+ if self.rely is not None:
8062
+ body["rely"] = self.rely
6965
8063
  if self.timeseries_columns:
6966
8064
  body["timeseries_columns"] = [v for v in self.timeseries_columns]
6967
8065
  return body
@@ -6973,6 +8071,8 @@ class PrimaryKeyConstraint:
6973
8071
  body["child_columns"] = self.child_columns
6974
8072
  if self.name is not None:
6975
8073
  body["name"] = self.name
8074
+ if self.rely is not None:
8075
+ body["rely"] = self.rely
6976
8076
  if self.timeseries_columns:
6977
8077
  body["timeseries_columns"] = self.timeseries_columns
6978
8078
  return body
@@ -6983,6 +8083,7 @@ class PrimaryKeyConstraint:
6983
8083
  return cls(
6984
8084
  child_columns=d.get("child_columns", None),
6985
8085
  name=d.get("name", None),
8086
+ rely=d.get("rely", None),
6986
8087
  timeseries_columns=d.get("timeseries_columns", None),
6987
8088
  )
6988
8089
 
@@ -7043,7 +8144,8 @@ class Privilege(Enum):
7043
8144
  @dataclass
7044
8145
  class PrivilegeAssignment:
7045
8146
  principal: Optional[str] = None
7046
- """The principal (user email address or group name)."""
8147
+ """The principal (user email address or group name). For deleted principals, `principal` is empty
8148
+ while `principal_id` is populated."""
7047
8149
 
7048
8150
  privileges: Optional[List[Privilege]] = None
7049
8151
  """The privileges assigned to the principal."""
@@ -7649,6 +8751,138 @@ class SchemaInfo:
7649
8751
  )
7650
8752
 
7651
8753
 
8754
+ class SecurableKind(Enum):
8755
+ """Latest kind: TABLE_DELTA_ICEBERG_DELTASHARING = 252; Next id:253"""
8756
+
8757
+ TABLE_DB_STORAGE = "TABLE_DB_STORAGE"
8758
+ TABLE_DELTA = "TABLE_DELTA"
8759
+ TABLE_DELTASHARING = "TABLE_DELTASHARING"
8760
+ TABLE_DELTASHARING_MUTABLE = "TABLE_DELTASHARING_MUTABLE"
8761
+ TABLE_DELTA_EXTERNAL = "TABLE_DELTA_EXTERNAL"
8762
+ TABLE_DELTA_ICEBERG_DELTASHARING = "TABLE_DELTA_ICEBERG_DELTASHARING"
8763
+ TABLE_DELTA_ICEBERG_MANAGED = "TABLE_DELTA_ICEBERG_MANAGED"
8764
+ TABLE_DELTA_UNIFORM_HUDI_EXTERNAL = "TABLE_DELTA_UNIFORM_HUDI_EXTERNAL"
8765
+ TABLE_DELTA_UNIFORM_ICEBERG_EXTERNAL = "TABLE_DELTA_UNIFORM_ICEBERG_EXTERNAL"
8766
+ TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_HIVE_METASTORE_EXTERNAL = (
8767
+ "TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_HIVE_METASTORE_EXTERNAL"
8768
+ )
8769
+ TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_HIVE_METASTORE_MANAGED = (
8770
+ "TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_HIVE_METASTORE_MANAGED"
8771
+ )
8772
+ TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_SNOWFLAKE = "TABLE_DELTA_UNIFORM_ICEBERG_FOREIGN_SNOWFLAKE"
8773
+ TABLE_EXTERNAL = "TABLE_EXTERNAL"
8774
+ TABLE_FEATURE_STORE = "TABLE_FEATURE_STORE"
8775
+ TABLE_FEATURE_STORE_EXTERNAL = "TABLE_FEATURE_STORE_EXTERNAL"
8776
+ TABLE_FOREIGN_BIGQUERY = "TABLE_FOREIGN_BIGQUERY"
8777
+ TABLE_FOREIGN_DATABRICKS = "TABLE_FOREIGN_DATABRICKS"
8778
+ TABLE_FOREIGN_DELTASHARING = "TABLE_FOREIGN_DELTASHARING"
8779
+ TABLE_FOREIGN_HIVE_METASTORE = "TABLE_FOREIGN_HIVE_METASTORE"
8780
+ TABLE_FOREIGN_HIVE_METASTORE_DBFS_EXTERNAL = "TABLE_FOREIGN_HIVE_METASTORE_DBFS_EXTERNAL"
8781
+ TABLE_FOREIGN_HIVE_METASTORE_DBFS_MANAGED = "TABLE_FOREIGN_HIVE_METASTORE_DBFS_MANAGED"
8782
+ TABLE_FOREIGN_HIVE_METASTORE_DBFS_SHALLOW_CLONE_EXTERNAL = (
8783
+ "TABLE_FOREIGN_HIVE_METASTORE_DBFS_SHALLOW_CLONE_EXTERNAL"
8784
+ )
8785
+ TABLE_FOREIGN_HIVE_METASTORE_DBFS_SHALLOW_CLONE_MANAGED = "TABLE_FOREIGN_HIVE_METASTORE_DBFS_SHALLOW_CLONE_MANAGED"
8786
+ TABLE_FOREIGN_HIVE_METASTORE_DBFS_VIEW = "TABLE_FOREIGN_HIVE_METASTORE_DBFS_VIEW"
8787
+ TABLE_FOREIGN_HIVE_METASTORE_EXTERNAL = "TABLE_FOREIGN_HIVE_METASTORE_EXTERNAL"
8788
+ TABLE_FOREIGN_HIVE_METASTORE_MANAGED = "TABLE_FOREIGN_HIVE_METASTORE_MANAGED"
8789
+ TABLE_FOREIGN_HIVE_METASTORE_SHALLOW_CLONE_EXTERNAL = "TABLE_FOREIGN_HIVE_METASTORE_SHALLOW_CLONE_EXTERNAL"
8790
+ TABLE_FOREIGN_HIVE_METASTORE_SHALLOW_CLONE_MANAGED = "TABLE_FOREIGN_HIVE_METASTORE_SHALLOW_CLONE_MANAGED"
8791
+ TABLE_FOREIGN_HIVE_METASTORE_VIEW = "TABLE_FOREIGN_HIVE_METASTORE_VIEW"
8792
+ TABLE_FOREIGN_MONGODB = "TABLE_FOREIGN_MONGODB"
8793
+ TABLE_FOREIGN_MYSQL = "TABLE_FOREIGN_MYSQL"
8794
+ TABLE_FOREIGN_NETSUITE = "TABLE_FOREIGN_NETSUITE"
8795
+ TABLE_FOREIGN_ORACLE = "TABLE_FOREIGN_ORACLE"
8796
+ TABLE_FOREIGN_POSTGRESQL = "TABLE_FOREIGN_POSTGRESQL"
8797
+ TABLE_FOREIGN_REDSHIFT = "TABLE_FOREIGN_REDSHIFT"
8798
+ TABLE_FOREIGN_SALESFORCE = "TABLE_FOREIGN_SALESFORCE"
8799
+ TABLE_FOREIGN_SALESFORCE_DATA_CLOUD = "TABLE_FOREIGN_SALESFORCE_DATA_CLOUD"
8800
+ TABLE_FOREIGN_SALESFORCE_DATA_CLOUD_FILE_SHARING = "TABLE_FOREIGN_SALESFORCE_DATA_CLOUD_FILE_SHARING"
8801
+ TABLE_FOREIGN_SALESFORCE_DATA_CLOUD_FILE_SHARING_VIEW = "TABLE_FOREIGN_SALESFORCE_DATA_CLOUD_FILE_SHARING_VIEW"
8802
+ TABLE_FOREIGN_SNOWFLAKE = "TABLE_FOREIGN_SNOWFLAKE"
8803
+ TABLE_FOREIGN_SQLDW = "TABLE_FOREIGN_SQLDW"
8804
+ TABLE_FOREIGN_SQLSERVER = "TABLE_FOREIGN_SQLSERVER"
8805
+ TABLE_FOREIGN_TERADATA = "TABLE_FOREIGN_TERADATA"
8806
+ TABLE_FOREIGN_WORKDAY_RAAS = "TABLE_FOREIGN_WORKDAY_RAAS"
8807
+ TABLE_ICEBERG_UNIFORM_MANAGED = "TABLE_ICEBERG_UNIFORM_MANAGED"
8808
+ TABLE_INTERNAL = "TABLE_INTERNAL"
8809
+ TABLE_MANAGED_POSTGRESQL = "TABLE_MANAGED_POSTGRESQL"
8810
+ TABLE_MATERIALIZED_VIEW = "TABLE_MATERIALIZED_VIEW"
8811
+ TABLE_MATERIALIZED_VIEW_DELTASHARING = "TABLE_MATERIALIZED_VIEW_DELTASHARING"
8812
+ TABLE_METRIC_VIEW = "TABLE_METRIC_VIEW"
8813
+ TABLE_ONLINE_VECTOR_INDEX_DIRECT = "TABLE_ONLINE_VECTOR_INDEX_DIRECT"
8814
+ TABLE_ONLINE_VECTOR_INDEX_REPLICA = "TABLE_ONLINE_VECTOR_INDEX_REPLICA"
8815
+ TABLE_ONLINE_VIEW = "TABLE_ONLINE_VIEW"
8816
+ TABLE_STANDARD = "TABLE_STANDARD"
8817
+ TABLE_STREAMING_LIVE_TABLE = "TABLE_STREAMING_LIVE_TABLE"
8818
+ TABLE_STREAMING_LIVE_TABLE_DELTASHARING = "TABLE_STREAMING_LIVE_TABLE_DELTASHARING"
8819
+ TABLE_SYSTEM = "TABLE_SYSTEM"
8820
+ TABLE_SYSTEM_DELTASHARING = "TABLE_SYSTEM_DELTASHARING"
8821
+ TABLE_VIEW = "TABLE_VIEW"
8822
+ TABLE_VIEW_DELTASHARING = "TABLE_VIEW_DELTASHARING"
8823
+
8824
+
8825
+ @dataclass
8826
+ class SecurableKindManifest:
8827
+ """Manifest of a specific securable kind."""
8828
+
8829
+ assignable_privileges: Optional[List[str]] = None
8830
+ """Privileges that can be assigned to the securable."""
8831
+
8832
+ capabilities: Optional[List[str]] = None
8833
+ """A list of capabilities in the securable kind."""
8834
+
8835
+ options: Optional[List[OptionSpec]] = None
8836
+ """Detailed specs of allowed options."""
8837
+
8838
+ securable_kind: Optional[SecurableKind] = None
8839
+ """Securable kind to get manifest of."""
8840
+
8841
+ securable_type: Optional[SecurableType] = None
8842
+ """Securable Type of the kind."""
8843
+
8844
+ def as_dict(self) -> dict:
8845
+ """Serializes the SecurableKindManifest into a dictionary suitable for use as a JSON request body."""
8846
+ body = {}
8847
+ if self.assignable_privileges:
8848
+ body["assignable_privileges"] = [v for v in self.assignable_privileges]
8849
+ if self.capabilities:
8850
+ body["capabilities"] = [v for v in self.capabilities]
8851
+ if self.options:
8852
+ body["options"] = [v.as_dict() for v in self.options]
8853
+ if self.securable_kind is not None:
8854
+ body["securable_kind"] = self.securable_kind.value
8855
+ if self.securable_type is not None:
8856
+ body["securable_type"] = self.securable_type.value
8857
+ return body
8858
+
8859
+ def as_shallow_dict(self) -> dict:
8860
+ """Serializes the SecurableKindManifest into a shallow dictionary of its immediate attributes."""
8861
+ body = {}
8862
+ if self.assignable_privileges:
8863
+ body["assignable_privileges"] = self.assignable_privileges
8864
+ if self.capabilities:
8865
+ body["capabilities"] = self.capabilities
8866
+ if self.options:
8867
+ body["options"] = self.options
8868
+ if self.securable_kind is not None:
8869
+ body["securable_kind"] = self.securable_kind
8870
+ if self.securable_type is not None:
8871
+ body["securable_type"] = self.securable_type
8872
+ return body
8873
+
8874
+ @classmethod
8875
+ def from_dict(cls, d: Dict[str, Any]) -> SecurableKindManifest:
8876
+ """Deserializes the SecurableKindManifest from a dictionary."""
8877
+ return cls(
8878
+ assignable_privileges=d.get("assignable_privileges", None),
8879
+ capabilities=d.get("capabilities", None),
8880
+ options=_repeated_dict(d, "options", OptionSpec),
8881
+ securable_kind=_enum(d, "securable_kind", SecurableKind),
8882
+ securable_type=_enum(d, "securable_type", SecurableType),
8883
+ )
8884
+
8885
+
7652
8886
  class SecurableType(Enum):
7653
8887
  """The type of Unity Catalog securable."""
7654
8888
 
@@ -7668,7 +8902,6 @@ class SecurableType(Enum):
7668
8902
  STAGING_TABLE = "STAGING_TABLE"
7669
8903
  STORAGE_CREDENTIAL = "STORAGE_CREDENTIAL"
7670
8904
  TABLE = "TABLE"
7671
- UNKNOWN_SECURABLE_TYPE = "UNKNOWN_SECURABLE_TYPE"
7672
8905
  VOLUME = "VOLUME"
7673
8906
 
7674
8907
 
@@ -7834,7 +9067,7 @@ class StorageCredentialInfo:
7834
9067
  """Comment associated with the credential."""
7835
9068
 
7836
9069
  created_at: Optional[int] = None
7837
- """Time at which this Credential was created, in epoch milliseconds."""
9070
+ """Time at which this credential was created, in epoch milliseconds."""
7838
9071
 
7839
9072
  created_by: Optional[str] = None
7840
9073
  """Username of credential creator."""
@@ -7849,18 +9082,21 @@ class StorageCredentialInfo:
7849
9082
  """The unique identifier of the credential."""
7850
9083
 
7851
9084
  isolation_mode: Optional[IsolationMode] = None
9085
+ """Whether the current securable is accessible from all workspaces or a specific set of workspaces."""
7852
9086
 
7853
9087
  metastore_id: Optional[str] = None
7854
- """Unique identifier of parent metastore."""
9088
+ """Unique identifier of the parent metastore."""
7855
9089
 
7856
9090
  name: Optional[str] = None
7857
- """The credential name. The name must be unique within the metastore."""
9091
+ """The credential name. The name must be unique among storage and service credentials within the
9092
+ metastore."""
7858
9093
 
7859
9094
  owner: Optional[str] = None
7860
9095
  """Username of current owner of credential."""
7861
9096
 
7862
9097
  read_only: Optional[bool] = None
7863
- """Whether the storage credential is only usable for read operations."""
9098
+ """Whether the credential is usable only for read operations. Only applicable when purpose is
9099
+ **STORAGE**."""
7864
9100
 
7865
9101
  updated_at: Optional[int] = None
7866
9102
  """Time at which this credential was last modified, in epoch milliseconds."""
@@ -7869,7 +9105,8 @@ class StorageCredentialInfo:
7869
9105
  """Username of user who last modified the credential."""
7870
9106
 
7871
9107
  used_for_managed_storage: Optional[bool] = None
7872
- """Whether this credential is the current metastore's root storage credential."""
9108
+ """Whether this credential is the current metastore's root storage credential. Only applicable when
9109
+ purpose is **STORAGE**."""
7873
9110
 
7874
9111
  def as_dict(self) -> dict:
7875
9112
  """Serializes the StorageCredentialInfo into a dictionary suitable for use as a JSON request body."""
@@ -8014,6 +9251,31 @@ class SystemSchemaInfo:
8014
9251
  return cls(schema=d.get("schema", None), state=d.get("state", None))
8015
9252
 
8016
9253
 
9254
+ class SystemType(Enum):
9255
+
9256
+ AMAZON_REDSHIFT = "AMAZON_REDSHIFT"
9257
+ AZURE_SYNAPSE = "AZURE_SYNAPSE"
9258
+ CONFLUENT = "CONFLUENT"
9259
+ GOOGLE_BIGQUERY = "GOOGLE_BIGQUERY"
9260
+ KAFKA = "KAFKA"
9261
+ LOOKER = "LOOKER"
9262
+ MICROSOFT_FABRIC = "MICROSOFT_FABRIC"
9263
+ MICROSOFT_SQL_SERVER = "MICROSOFT_SQL_SERVER"
9264
+ MONGODB = "MONGODB"
9265
+ MYSQL = "MYSQL"
9266
+ ORACLE = "ORACLE"
9267
+ OTHER = "OTHER"
9268
+ POSTGRESQL = "POSTGRESQL"
9269
+ POWER_BI = "POWER_BI"
9270
+ SALESFORCE = "SALESFORCE"
9271
+ SAP = "SAP"
9272
+ SERVICENOW = "SERVICENOW"
9273
+ SNOWFLAKE = "SNOWFLAKE"
9274
+ TABLEAU = "TABLEAU"
9275
+ TERADATA = "TERADATA"
9276
+ WORKDAY = "WORKDAY"
9277
+
9278
+
8017
9279
  @dataclass
8018
9280
  class TableConstraint:
8019
9281
  """A table constraint, as defined by *one* of the following fields being set:
@@ -8138,7 +9400,6 @@ class TableInfo:
8138
9400
  """Unique ID of the Data Access Configuration to use with the table data."""
8139
9401
 
8140
9402
  data_source_format: Optional[DataSourceFormat] = None
8141
- """Data source format"""
8142
9403
 
8143
9404
  deleted_at: Optional[int] = None
8144
9405
  """Time at which this table was deleted, in epoch milliseconds. Field is omitted if table is not
@@ -8152,7 +9413,6 @@ class TableInfo:
8152
9413
  enable_predictive_optimization: Optional[EnablePredictiveOptimization] = None
8153
9414
 
8154
9415
  encryption_details: Optional[EncryptionDetails] = None
8155
- """Encryption options that apply to clients connecting to cloud storage."""
8156
9416
 
8157
9417
  full_name: Optional[str] = None
8158
9418
  """Full name of table, in form of __catalog_name__.__schema_name__.__table_name__"""
@@ -8178,6 +9438,9 @@ class TableInfo:
8178
9438
  schema_name: Optional[str] = None
8179
9439
  """Name of parent schema relative to its parent catalog."""
8180
9440
 
9441
+ securable_kind_manifest: Optional[SecurableKindManifest] = None
9442
+ """SecurableKindManifest of table, including capabilities the table has."""
9443
+
8181
9444
  sql_path: Optional[str] = None
8182
9445
  """List of schemes whose objects can be referenced without qualification."""
8183
9446
 
@@ -8185,7 +9448,7 @@ class TableInfo:
8185
9448
  """Name of the storage credential, when a storage credential is configured for use with this table."""
8186
9449
 
8187
9450
  storage_location: Optional[str] = None
8188
- """Storage root URL for table (for **MANAGED**, **EXTERNAL** tables)"""
9451
+ """Storage root URL for table (for **MANAGED**, **EXTERNAL** tables)."""
8189
9452
 
8190
9453
  table_constraints: Optional[List[TableConstraint]] = None
8191
9454
  """List of table constraints. Note: this field is not set in the output of the __listTables__ API."""
@@ -8258,6 +9521,8 @@ class TableInfo:
8258
9521
  body["row_filter"] = self.row_filter.as_dict()
8259
9522
  if self.schema_name is not None:
8260
9523
  body["schema_name"] = self.schema_name
9524
+ if self.securable_kind_manifest:
9525
+ body["securable_kind_manifest"] = self.securable_kind_manifest.as_dict()
8261
9526
  if self.sql_path is not None:
8262
9527
  body["sql_path"] = self.sql_path
8263
9528
  if self.storage_credential_name is not None:
@@ -8327,6 +9592,8 @@ class TableInfo:
8327
9592
  body["row_filter"] = self.row_filter
8328
9593
  if self.schema_name is not None:
8329
9594
  body["schema_name"] = self.schema_name
9595
+ if self.securable_kind_manifest:
9596
+ body["securable_kind_manifest"] = self.securable_kind_manifest
8330
9597
  if self.sql_path is not None:
8331
9598
  body["sql_path"] = self.sql_path
8332
9599
  if self.storage_credential_name is not None:
@@ -8379,6 +9646,7 @@ class TableInfo:
8379
9646
  properties=d.get("properties", None),
8380
9647
  row_filter=_from_dict(d, "row_filter", TableRowFilter),
8381
9648
  schema_name=d.get("schema_name", None),
9649
+ securable_kind_manifest=_from_dict(d, "securable_kind_manifest", SecurableKindManifest),
8382
9650
  sql_path=d.get("sql_path", None),
8383
9651
  storage_credential_name=d.get("storage_credential_name", None),
8384
9652
  storage_location=d.get("storage_location", None),
@@ -8436,6 +9704,9 @@ class TableSummary:
8436
9704
  full_name: Optional[str] = None
8437
9705
  """The full name of the table."""
8438
9706
 
9707
+ securable_kind_manifest: Optional[SecurableKindManifest] = None
9708
+ """SecurableKindManifest of table, including capabilities the table has."""
9709
+
8439
9710
  table_type: Optional[TableType] = None
8440
9711
 
8441
9712
  def as_dict(self) -> dict:
@@ -8443,6 +9714,8 @@ class TableSummary:
8443
9714
  body = {}
8444
9715
  if self.full_name is not None:
8445
9716
  body["full_name"] = self.full_name
9717
+ if self.securable_kind_manifest:
9718
+ body["securable_kind_manifest"] = self.securable_kind_manifest.as_dict()
8446
9719
  if self.table_type is not None:
8447
9720
  body["table_type"] = self.table_type.value
8448
9721
  return body
@@ -8452,6 +9725,8 @@ class TableSummary:
8452
9725
  body = {}
8453
9726
  if self.full_name is not None:
8454
9727
  body["full_name"] = self.full_name
9728
+ if self.securable_kind_manifest:
9729
+ body["securable_kind_manifest"] = self.securable_kind_manifest
8455
9730
  if self.table_type is not None:
8456
9731
  body["table_type"] = self.table_type
8457
9732
  return body
@@ -8459,7 +9734,11 @@ class TableSummary:
8459
9734
  @classmethod
8460
9735
  def from_dict(cls, d: Dict[str, Any]) -> TableSummary:
8461
9736
  """Deserializes the TableSummary from a dictionary."""
8462
- return cls(full_name=d.get("full_name", None), table_type=_enum(d, "table_type", TableType))
9737
+ return cls(
9738
+ full_name=d.get("full_name", None),
9739
+ securable_kind_manifest=_from_dict(d, "securable_kind_manifest", SecurableKindManifest),
9740
+ table_type=_enum(d, "table_type", TableType),
9741
+ )
8463
9742
 
8464
9743
 
8465
9744
  class TableType(Enum):
@@ -8470,6 +9749,7 @@ class TableType(Enum):
8470
9749
  MANAGED = "MANAGED"
8471
9750
  MANAGED_SHALLOW_CLONE = "MANAGED_SHALLOW_CLONE"
8472
9751
  MATERIALIZED_VIEW = "MATERIALIZED_VIEW"
9752
+ METRIC_VIEW = "METRIC_VIEW"
8473
9753
  STREAMING_TABLE = "STREAMING_TABLE"
8474
9754
  VIEW = "VIEW"
8475
9755
 
@@ -8509,21 +9789,14 @@ class TagKeyValue:
8509
9789
  @dataclass
8510
9790
  class TemporaryCredentials:
8511
9791
  aws_temp_credentials: Optional[AwsCredentials] = None
8512
- """AWS temporary credentials for API authentication. Read more at
8513
- https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html."""
8514
9792
 
8515
9793
  azure_aad: Optional[AzureActiveDirectoryToken] = None
8516
- """Azure Active Directory token, essentially the Oauth token for Azure Service Principal or Managed
8517
- Identity. Read more at
8518
- https://learn.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token"""
8519
9794
 
8520
9795
  expiration_time: Optional[int] = None
8521
9796
  """Server time when the credential will expire, in epoch milliseconds. The API client is advised to
8522
9797
  cache the credential given this expiration time."""
8523
9798
 
8524
9799
  gcp_oauth_token: Optional[GcpOauthToken] = None
8525
- """GCP temporary credentials for API authentication. Read more at
8526
- https://developers.google.com/identity/protocols/oauth2/service-account"""
8527
9800
 
8528
9801
  def as_dict(self) -> dict:
8529
9802
  """Serializes the TemporaryCredentials into a dictionary suitable for use as a JSON request body."""
@@ -8808,19 +10081,19 @@ class UpdateConnection:
8808
10081
  @dataclass
8809
10082
  class UpdateCredentialRequest:
8810
10083
  aws_iam_role: Optional[AwsIamRole] = None
8811
- """The AWS IAM role configuration"""
10084
+ """The AWS IAM role configuration."""
8812
10085
 
8813
10086
  azure_managed_identity: Optional[AzureManagedIdentity] = None
8814
10087
  """The Azure managed identity configuration."""
8815
10088
 
8816
10089
  azure_service_principal: Optional[AzureServicePrincipal] = None
8817
- """The Azure service principal configuration. Only applicable when purpose is **STORAGE**."""
10090
+ """The Azure service principal configuration."""
8818
10091
 
8819
10092
  comment: Optional[str] = None
8820
10093
  """Comment associated with the credential."""
8821
10094
 
8822
10095
  databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None
8823
- """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
10096
+ """The Databricks managed GCP service account configuration."""
8824
10097
 
8825
10098
  force: Optional[bool] = None
8826
10099
  """Force an update even if there are dependent services (when purpose is **SERVICE**) or dependent
@@ -8931,10 +10204,9 @@ class UpdateExternalLocation:
8931
10204
  """Name of the storage credential used with this location."""
8932
10205
 
8933
10206
  enable_file_events: Optional[bool] = None
8934
- """[Create:OPT Update:OPT] Whether to enable file events on this external location."""
10207
+ """Whether to enable file events on this external location."""
8935
10208
 
8936
10209
  encryption_details: Optional[EncryptionDetails] = None
8937
- """Encryption options that apply to clients connecting to cloud storage."""
8938
10210
 
8939
10211
  fallback: Optional[bool] = None
8940
10212
  """Indicates whether fallback mode is enabled for this external location. When fallback mode is
@@ -8942,7 +10214,7 @@ class UpdateExternalLocation:
8942
10214
  sufficient."""
8943
10215
 
8944
10216
  file_event_queue: Optional[FileEventQueue] = None
8945
- """[Create:OPT Update:OPT] File event queue settings."""
10217
+ """File event queue settings."""
8946
10218
 
8947
10219
  force: Optional[bool] = None
8948
10220
  """Force update even if changing url invalidates dependent external tables or mounts."""
@@ -9500,6 +10772,65 @@ class UpdateRegisteredModelRequest:
9500
10772
  )
9501
10773
 
9502
10774
 
10775
+ @dataclass
10776
+ class UpdateRequestExternalLineage:
10777
+ source: ExternalLineageObject
10778
+ """Source object of the external lineage relationship."""
10779
+
10780
+ target: ExternalLineageObject
10781
+ """Target object of the external lineage relationship."""
10782
+
10783
+ columns: Optional[List[ColumnRelationship]] = None
10784
+ """List of column relationships between source and target objects."""
10785
+
10786
+ id: Optional[str] = None
10787
+ """Unique identifier of the external lineage relationship."""
10788
+
10789
+ properties: Optional[Dict[str, str]] = None
10790
+ """Key-value properties associated with the external lineage relationship."""
10791
+
10792
+ def as_dict(self) -> dict:
10793
+ """Serializes the UpdateRequestExternalLineage into a dictionary suitable for use as a JSON request body."""
10794
+ body = {}
10795
+ if self.columns:
10796
+ body["columns"] = [v.as_dict() for v in self.columns]
10797
+ if self.id is not None:
10798
+ body["id"] = self.id
10799
+ if self.properties:
10800
+ body["properties"] = self.properties
10801
+ if self.source:
10802
+ body["source"] = self.source.as_dict()
10803
+ if self.target:
10804
+ body["target"] = self.target.as_dict()
10805
+ return body
10806
+
10807
+ def as_shallow_dict(self) -> dict:
10808
+ """Serializes the UpdateRequestExternalLineage into a shallow dictionary of its immediate attributes."""
10809
+ body = {}
10810
+ if self.columns:
10811
+ body["columns"] = self.columns
10812
+ if self.id is not None:
10813
+ body["id"] = self.id
10814
+ if self.properties:
10815
+ body["properties"] = self.properties
10816
+ if self.source:
10817
+ body["source"] = self.source
10818
+ if self.target:
10819
+ body["target"] = self.target
10820
+ return body
10821
+
10822
+ @classmethod
10823
+ def from_dict(cls, d: Dict[str, Any]) -> UpdateRequestExternalLineage:
10824
+ """Deserializes the UpdateRequestExternalLineage from a dictionary."""
10825
+ return cls(
10826
+ columns=_repeated_dict(d, "columns", ColumnRelationship),
10827
+ id=d.get("id", None),
10828
+ properties=d.get("properties", None),
10829
+ source=_from_dict(d, "source", ExternalLineageObject),
10830
+ target=_from_dict(d, "target", ExternalLineageObject),
10831
+ )
10832
+
10833
+
9503
10834
  @dataclass
9504
10835
  class UpdateResponse:
9505
10836
  def as_dict(self) -> dict:
@@ -9609,6 +10940,7 @@ class UpdateStorageCredential:
9609
10940
  """Force update even if there are dependent external locations or external tables."""
9610
10941
 
9611
10942
  isolation_mode: Optional[IsolationMode] = None
10943
+ """Whether the current securable is accessible from all workspaces or a specific set of workspaces."""
9612
10944
 
9613
10945
  name: Optional[str] = None
9614
10946
  """Name of the storage credential."""
@@ -9620,7 +10952,8 @@ class UpdateStorageCredential:
9620
10952
  """Username of current owner of credential."""
9621
10953
 
9622
10954
  read_only: Optional[bool] = None
9623
- """Whether the storage credential is only usable for read operations."""
10955
+ """Whether the credential is usable only for read operations. Only applicable when purpose is
10956
+ **STORAGE**."""
9624
10957
 
9625
10958
  skip_validation: Optional[bool] = None
9626
10959
  """Supplying true to this argument skips validation of the updated credential."""
@@ -9711,12 +11044,11 @@ class UpdateStorageCredential:
9711
11044
 
9712
11045
  @dataclass
9713
11046
  class UpdateTableRequest:
9714
- """Update a table owner."""
9715
-
9716
11047
  full_name: Optional[str] = None
9717
11048
  """Full name of the table."""
9718
11049
 
9719
11050
  owner: Optional[str] = None
11051
+ """Username of current owner of table."""
9720
11052
 
9721
11053
  def as_dict(self) -> dict:
9722
11054
  """Serializes the UpdateTableRequest into a dictionary suitable for use as a JSON request body."""
@@ -9920,16 +11252,13 @@ class ValidateCredentialRequest:
9920
11252
  """Next ID: 17"""
9921
11253
 
9922
11254
  aws_iam_role: Optional[AwsIamRole] = None
9923
- """The AWS IAM role configuration"""
9924
11255
 
9925
11256
  azure_managed_identity: Optional[AzureManagedIdentity] = None
9926
- """The Azure managed identity configuration."""
9927
11257
 
9928
11258
  credential_name: Optional[str] = None
9929
11259
  """Required. The name of an existing credential or long-lived cloud credential to validate."""
9930
11260
 
9931
11261
  databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None
9932
- """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
9933
11262
 
9934
11263
  external_location_name: Optional[str] = None
9935
11264
  """The name of an existing external location to validate. Only applicable for storage credentials
@@ -10067,7 +11396,7 @@ class ValidateStorageCredential:
10067
11396
  """Whether the storage credential is only usable for read operations."""
10068
11397
 
10069
11398
  storage_credential_name: Optional[str] = None
10070
- """The name of the storage credential to validate."""
11399
+ """Required. The name of an existing credential or long-lived cloud credential to validate."""
10071
11400
 
10072
11401
  url: Optional[str] = None
10073
11402
  """The external location url to validate."""
@@ -10212,7 +11541,8 @@ class ValidationResult:
10212
11541
 
10213
11542
 
10214
11543
  class ValidationResultOperation(Enum):
10215
- """The operation tested."""
11544
+ """A enum represents the file operation performed on the external location with the storage
11545
+ credential"""
10216
11546
 
10217
11547
  DELETE = "DELETE"
10218
11548
  LIST = "LIST"
@@ -10222,7 +11552,7 @@ class ValidationResultOperation(Enum):
10222
11552
 
10223
11553
 
10224
11554
  class ValidationResultResult(Enum):
10225
- """The results of the tested operation."""
11555
+ """A enum represents the result of the file operation"""
10226
11556
 
10227
11557
  FAIL = "FAIL"
10228
11558
  PASS = "PASS"
@@ -10250,7 +11580,6 @@ class VolumeInfo:
10250
11580
  """The identifier of the user who created the volume"""
10251
11581
 
10252
11582
  encryption_details: Optional[EncryptionDetails] = None
10253
- """Encryption options that apply to clients connecting to cloud storage."""
10254
11583
 
10255
11584
  full_name: Optional[str] = None
10256
11585
  """The three-level (fully qualified) name of the volume"""
@@ -10279,11 +11608,6 @@ class VolumeInfo:
10279
11608
  """The unique identifier of the volume"""
10280
11609
 
10281
11610
  volume_type: Optional[VolumeType] = None
10282
- """The type of the volume. An external volume is located in the specified external location. A
10283
- managed volume is located in the default location which is specified by the parent schema, or
10284
- the parent catalog, or the Metastore. [Learn more]
10285
-
10286
- [Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external"""
10287
11611
 
10288
11612
  def as_dict(self) -> dict:
10289
11613
  """Serializes the VolumeInfo into a dictionary suitable for use as a JSON request body."""
@@ -10449,9 +11773,7 @@ class AccountMetastoreAssignmentsAPI:
10449
11773
  def create(
10450
11774
  self, workspace_id: int, metastore_id: str, *, metastore_assignment: Optional[CreateMetastoreAssignment] = None
10451
11775
  ):
10452
- """Assigns a workspace to a metastore.
10453
-
10454
- Creates an assignment to a metastore for a workspace
11776
+ """Creates an assignment to a metastore for a workspace
10455
11777
 
10456
11778
  :param workspace_id: int
10457
11779
  Workspace ID.
@@ -10477,9 +11799,7 @@ class AccountMetastoreAssignmentsAPI:
10477
11799
  )
10478
11800
 
10479
11801
  def delete(self, workspace_id: int, metastore_id: str):
10480
- """Delete a metastore assignment.
10481
-
10482
- Deletes a metastore assignment to a workspace, leaving the workspace with no metastore.
11802
+ """Deletes a metastore assignment to a workspace, leaving the workspace with no metastore.
10483
11803
 
10484
11804
  :param workspace_id: int
10485
11805
  Workspace ID.
@@ -10500,9 +11820,7 @@ class AccountMetastoreAssignmentsAPI:
10500
11820
  )
10501
11821
 
10502
11822
  def get(self, workspace_id: int) -> AccountsMetastoreAssignment:
10503
- """Gets the metastore assignment for a workspace.
10504
-
10505
- Gets the metastore assignment, if any, for the workspace specified by ID. If the workspace is assigned
11823
+ """Gets the metastore assignment, if any, for the workspace specified by ID. If the workspace is assigned
10506
11824
  a metastore, the mappig will be returned. If no metastore is assigned to the workspace, the assignment
10507
11825
  will not be found and a 404 returned.
10508
11826
 
@@ -10522,9 +11840,7 @@ class AccountMetastoreAssignmentsAPI:
10522
11840
  return AccountsMetastoreAssignment.from_dict(res)
10523
11841
 
10524
11842
  def list(self, metastore_id: str) -> Iterator[int]:
10525
- """Get all workspaces assigned to a metastore.
10526
-
10527
- Gets a list of all Databricks workspace IDs that have been assigned to given metastore.
11843
+ """Gets a list of all Databricks workspace IDs that have been assigned to given metastore.
10528
11844
 
10529
11845
  :param metastore_id: str
10530
11846
  Unity Catalog metastore ID
@@ -10545,9 +11861,7 @@ class AccountMetastoreAssignmentsAPI:
10545
11861
  def update(
10546
11862
  self, workspace_id: int, metastore_id: str, *, metastore_assignment: Optional[UpdateMetastoreAssignment] = None
10547
11863
  ):
10548
- """Updates a metastore assignment to a workspaces.
10549
-
10550
- Updates an assignment to a metastore for a workspace. Currently, only the default catalog may be
11864
+ """Updates an assignment to a metastore for a workspace. Currently, only the default catalog may be
10551
11865
  updated.
10552
11866
 
10553
11867
  :param workspace_id: int
@@ -10582,9 +11896,7 @@ class AccountMetastoresAPI:
10582
11896
  self._api = api_client
10583
11897
 
10584
11898
  def create(self, *, metastore_info: Optional[CreateMetastore] = None) -> AccountsMetastoreInfo:
10585
- """Create metastore.
10586
-
10587
- Creates a Unity Catalog metastore.
11899
+ """Creates a Unity Catalog metastore.
10588
11900
 
10589
11901
  :param metastore_info: :class:`CreateMetastore` (optional)
10590
11902
 
@@ -10602,9 +11914,7 @@ class AccountMetastoresAPI:
10602
11914
  return AccountsMetastoreInfo.from_dict(res)
10603
11915
 
10604
11916
  def delete(self, metastore_id: str, *, force: Optional[bool] = None):
10605
- """Delete a metastore.
10606
-
10607
- Deletes a Unity Catalog metastore for an account, both specified by ID.
11917
+ """Deletes a Unity Catalog metastore for an account, both specified by ID.
10608
11918
 
10609
11919
  :param metastore_id: str
10610
11920
  Unity Catalog metastore ID
@@ -10629,9 +11939,7 @@ class AccountMetastoresAPI:
10629
11939
  )
10630
11940
 
10631
11941
  def get(self, metastore_id: str) -> AccountsMetastoreInfo:
10632
- """Get a metastore.
10633
-
10634
- Gets a Unity Catalog metastore from an account, both specified by ID.
11942
+ """Gets a Unity Catalog metastore from an account, both specified by ID.
10635
11943
 
10636
11944
  :param metastore_id: str
10637
11945
  Unity Catalog metastore ID
@@ -10649,9 +11957,8 @@ class AccountMetastoresAPI:
10649
11957
  return AccountsMetastoreInfo.from_dict(res)
10650
11958
 
10651
11959
  def list(self) -> Iterator[MetastoreInfo]:
10652
- """Get all metastores associated with an account.
11960
+ """Gets all Unity Catalog metastores associated with an account specified by ID.
10653
11961
 
10654
- Gets all Unity Catalog metastores associated with an account specified by ID.
10655
11962
 
10656
11963
  :returns: Iterator over :class:`MetastoreInfo`
10657
11964
  """
@@ -10665,9 +11972,7 @@ class AccountMetastoresAPI:
10665
11972
  return parsed if parsed is not None else []
10666
11973
 
10667
11974
  def update(self, metastore_id: str, *, metastore_info: Optional[UpdateMetastore] = None) -> AccountsMetastoreInfo:
10668
- """Update a metastore.
10669
-
10670
- Updates an existing Unity Catalog metastore.
11975
+ """Updates an existing Unity Catalog metastore.
10671
11976
 
10672
11977
  :param metastore_id: str
10673
11978
  Unity Catalog metastore ID
@@ -10698,9 +12003,7 @@ class AccountStorageCredentialsAPI:
10698
12003
  def create(
10699
12004
  self, metastore_id: str, *, credential_info: Optional[CreateStorageCredential] = None
10700
12005
  ) -> AccountsStorageCredentialInfo:
10701
- """Create a storage credential.
10702
-
10703
- Creates a new storage credential. The request object is specific to the cloud:
12006
+ """Creates a new storage credential. The request object is specific to the cloud:
10704
12007
 
10705
12008
  * **AwsIamRole** for AWS credentials * **AzureServicePrincipal** for Azure credentials *
10706
12009
  **GcpServiceAcountKey** for GCP credentials.
@@ -10731,9 +12034,7 @@ class AccountStorageCredentialsAPI:
10731
12034
  return AccountsStorageCredentialInfo.from_dict(res)
10732
12035
 
10733
12036
  def delete(self, metastore_id: str, storage_credential_name: str, *, force: Optional[bool] = None):
10734
- """Delete a storage credential.
10735
-
10736
- Deletes a storage credential from the metastore. The caller must be an owner of the storage
12037
+ """Deletes a storage credential from the metastore. The caller must be an owner of the storage
10737
12038
  credential.
10738
12039
 
10739
12040
  :param metastore_id: str
@@ -10761,9 +12062,7 @@ class AccountStorageCredentialsAPI:
10761
12062
  )
10762
12063
 
10763
12064
  def get(self, metastore_id: str, storage_credential_name: str) -> AccountsStorageCredentialInfo:
10764
- """Gets the named storage credential.
10765
-
10766
- Gets a storage credential from the metastore. The caller must be a metastore admin, the owner of the
12065
+ """Gets a storage credential from the metastore. The caller must be a metastore admin, the owner of the
10767
12066
  storage credential, or have a level of privilege on the storage credential.
10768
12067
 
10769
12068
  :param metastore_id: str
@@ -10786,9 +12085,7 @@ class AccountStorageCredentialsAPI:
10786
12085
  return AccountsStorageCredentialInfo.from_dict(res)
10787
12086
 
10788
12087
  def list(self, metastore_id: str) -> Iterator[StorageCredentialInfo]:
10789
- """Get all storage credentials assigned to a metastore.
10790
-
10791
- Gets a list of all storage credentials that have been assigned to given metastore.
12088
+ """Gets a list of all storage credentials that have been assigned to given metastore.
10792
12089
 
10793
12090
  :param metastore_id: str
10794
12091
  Unity Catalog metastore ID
@@ -10815,9 +12112,7 @@ class AccountStorageCredentialsAPI:
10815
12112
  *,
10816
12113
  credential_info: Optional[UpdateStorageCredential] = None,
10817
12114
  ) -> AccountsStorageCredentialInfo:
10818
- """Updates a storage credential.
10819
-
10820
- Updates a storage credential on the metastore. The caller must be the owner of the storage credential.
12115
+ """Updates a storage credential on the metastore. The caller must be the owner of the storage credential.
10821
12116
  If the caller is a metastore admin, only the __owner__ credential can be changed.
10822
12117
 
10823
12118
  :param metastore_id: str
@@ -10853,9 +12148,7 @@ class ArtifactAllowlistsAPI:
10853
12148
  self._api = api_client
10854
12149
 
10855
12150
  def get(self, artifact_type: ArtifactType) -> ArtifactAllowlistInfo:
10856
- """Get an artifact allowlist.
10857
-
10858
- Get the artifact allowlist of a certain artifact type. The caller must be a metastore admin or have
12151
+ """Get the artifact allowlist of a certain artifact type. The caller must be a metastore admin or have
10859
12152
  the **MANAGE ALLOWLIST** privilege on the metastore.
10860
12153
 
10861
12154
  :param artifact_type: :class:`ArtifactType`
@@ -10880,9 +12173,7 @@ class ArtifactAllowlistsAPI:
10880
12173
  created_by: Optional[str] = None,
10881
12174
  metastore_id: Optional[str] = None,
10882
12175
  ) -> ArtifactAllowlistInfo:
10883
- """Set an artifact allowlist.
10884
-
10885
- Set the artifact allowlist of a certain artifact type. The whole artifact allowlist is replaced with
12176
+ """Set the artifact allowlist of a certain artifact type. The whole artifact allowlist is replaced with
10886
12177
  the new allowlist. The caller must be a metastore admin or have the **MANAGE ALLOWLIST** privilege on
10887
12178
  the metastore.
10888
12179
 
@@ -10942,9 +12233,7 @@ class CatalogsAPI:
10942
12233
  share_name: Optional[str] = None,
10943
12234
  storage_root: Optional[str] = None,
10944
12235
  ) -> CatalogInfo:
10945
- """Create a catalog.
10946
-
10947
- Creates a new catalog instance in the parent metastore if the caller is a metastore admin or has the
12236
+ """Creates a new catalog instance in the parent metastore if the caller is a metastore admin or has the
10948
12237
  **CREATE_CATALOG** privilege.
10949
12238
 
10950
12239
  :param name: str
@@ -10994,9 +12283,7 @@ class CatalogsAPI:
10994
12283
  return CatalogInfo.from_dict(res)
10995
12284
 
10996
12285
  def delete(self, name: str, *, force: Optional[bool] = None):
10997
- """Delete a catalog.
10998
-
10999
- Deletes the catalog that matches the supplied name. The caller must be a metastore admin or the owner
12286
+ """Deletes the catalog that matches the supplied name. The caller must be a metastore admin or the owner
11000
12287
  of the catalog.
11001
12288
 
11002
12289
  :param name: str
@@ -11017,9 +12304,7 @@ class CatalogsAPI:
11017
12304
  self._api.do("DELETE", f"/api/2.1/unity-catalog/catalogs/{name}", query=query, headers=headers)
11018
12305
 
11019
12306
  def get(self, name: str, *, include_browse: Optional[bool] = None) -> CatalogInfo:
11020
- """Get a catalog.
11021
-
11022
- Gets the specified catalog in a metastore. The caller must be a metastore admin, the owner of the
12307
+ """Gets the specified catalog in a metastore. The caller must be a metastore admin, the owner of the
11023
12308
  catalog, or a user that has the **USE_CATALOG** privilege set for their account.
11024
12309
 
11025
12310
  :param name: str
@@ -11048,9 +12333,7 @@ class CatalogsAPI:
11048
12333
  max_results: Optional[int] = None,
11049
12334
  page_token: Optional[str] = None,
11050
12335
  ) -> Iterator[CatalogInfo]:
11051
- """List catalogs.
11052
-
11053
- Gets an array of catalogs in the metastore. If the caller is the metastore admin, all catalogs will be
12336
+ """Gets an array of catalogs in the metastore. If the caller is the metastore admin, all catalogs will be
11054
12337
  retrieved. Otherwise, only catalogs owned by the caller (or for which the caller has the
11055
12338
  **USE_CATALOG** privilege) will be retrieved. There is no guarantee of a specific ordering of the
11056
12339
  elements in the array.
@@ -11104,9 +12387,7 @@ class CatalogsAPI:
11104
12387
  owner: Optional[str] = None,
11105
12388
  properties: Optional[Dict[str, str]] = None,
11106
12389
  ) -> CatalogInfo:
11107
- """Update a catalog.
11108
-
11109
- Updates the catalog that matches the supplied name. The caller must be either the owner of the
12390
+ """Updates the catalog that matches the supplied name. The caller must be either the owner of the
11110
12391
  catalog, or a metastore admin (when changing the owner field of the catalog).
11111
12392
 
11112
12393
  :param name: str
@@ -11175,9 +12456,7 @@ class ConnectionsAPI:
11175
12456
  properties: Optional[Dict[str, str]] = None,
11176
12457
  read_only: Optional[bool] = None,
11177
12458
  ) -> ConnectionInfo:
11178
- """Create a connection.
11179
-
11180
- Creates a new connection
12459
+ """Creates a new connection
11181
12460
 
11182
12461
  Creates a new connection to an external data source. It allows users to specify connection details and
11183
12462
  configurations for interaction with the external server.
@@ -11219,9 +12498,7 @@ class ConnectionsAPI:
11219
12498
  return ConnectionInfo.from_dict(res)
11220
12499
 
11221
12500
  def delete(self, name: str):
11222
- """Delete a connection.
11223
-
11224
- Deletes the connection that matches the supplied name.
12501
+ """Deletes the connection that matches the supplied name.
11225
12502
 
11226
12503
  :param name: str
11227
12504
  The name of the connection to be deleted.
@@ -11236,9 +12513,7 @@ class ConnectionsAPI:
11236
12513
  self._api.do("DELETE", f"/api/2.1/unity-catalog/connections/{name}", headers=headers)
11237
12514
 
11238
12515
  def get(self, name: str) -> ConnectionInfo:
11239
- """Get a connection.
11240
-
11241
- Gets a connection from it's name.
12516
+ """Gets a connection from it's name.
11242
12517
 
11243
12518
  :param name: str
11244
12519
  Name of the connection.
@@ -11254,9 +12529,7 @@ class ConnectionsAPI:
11254
12529
  return ConnectionInfo.from_dict(res)
11255
12530
 
11256
12531
  def list(self, *, max_results: Optional[int] = None, page_token: Optional[str] = None) -> Iterator[ConnectionInfo]:
11257
- """List connections.
11258
-
11259
- List all connections.
12532
+ """List all connections.
11260
12533
 
11261
12534
  :param max_results: int (optional)
11262
12535
  Maximum number of connections to return. - If not set, all connections are returned (not
@@ -11290,9 +12563,7 @@ class ConnectionsAPI:
11290
12563
  def update(
11291
12564
  self, name: str, options: Dict[str, str], *, new_name: Optional[str] = None, owner: Optional[str] = None
11292
12565
  ) -> ConnectionInfo:
11293
- """Update a connection.
11294
-
11295
- Updates the connection that matches the supplied name.
12566
+ """Updates the connection that matches the supplied name.
11296
12567
 
11297
12568
  :param name: str
11298
12569
  Name of the connection.
@@ -11346,9 +12617,7 @@ class CredentialsAPI:
11346
12617
  read_only: Optional[bool] = None,
11347
12618
  skip_validation: Optional[bool] = None,
11348
12619
  ) -> CredentialInfo:
11349
- """Create a credential.
11350
-
11351
- Creates a new credential. The type of credential to be created is determined by the **purpose** field,
12620
+ """Creates a new credential. The type of credential to be created is determined by the **purpose** field,
11352
12621
  which should be either **SERVICE** or **STORAGE**.
11353
12622
 
11354
12623
  The caller must be a metastore admin or have the metastore privilege **CREATE_STORAGE_CREDENTIAL** for
@@ -11358,15 +12627,15 @@ class CredentialsAPI:
11358
12627
  The credential name. The name must be unique among storage and service credentials within the
11359
12628
  metastore.
11360
12629
  :param aws_iam_role: :class:`AwsIamRole` (optional)
11361
- The AWS IAM role configuration
12630
+ The AWS IAM role configuration.
11362
12631
  :param azure_managed_identity: :class:`AzureManagedIdentity` (optional)
11363
12632
  The Azure managed identity configuration.
11364
12633
  :param azure_service_principal: :class:`AzureServicePrincipal` (optional)
11365
- The Azure service principal configuration. Only applicable when purpose is **STORAGE**.
12634
+ The Azure service principal configuration.
11366
12635
  :param comment: str (optional)
11367
12636
  Comment associated with the credential.
11368
12637
  :param databricks_gcp_service_account: :class:`DatabricksGcpServiceAccount` (optional)
11369
- GCP long-lived credential. Databricks-created Google Cloud Storage service account.
12638
+ The Databricks managed GCP service account configuration.
11370
12639
  :param purpose: :class:`CredentialPurpose` (optional)
11371
12640
  Indicates the purpose of the credential.
11372
12641
  :param read_only: bool (optional)
@@ -11405,9 +12674,7 @@ class CredentialsAPI:
11405
12674
  return CredentialInfo.from_dict(res)
11406
12675
 
11407
12676
  def delete_credential(self, name_arg: str, *, force: Optional[bool] = None):
11408
- """Delete a credential.
11409
-
11410
- Deletes a service or storage credential from the metastore. The caller must be an owner of the
12677
+ """Deletes a service or storage credential from the metastore. The caller must be an owner of the
11411
12678
  credential.
11412
12679
 
11413
12680
  :param name_arg: str
@@ -11435,17 +12702,13 @@ class CredentialsAPI:
11435
12702
  azure_options: Optional[GenerateTemporaryServiceCredentialAzureOptions] = None,
11436
12703
  gcp_options: Optional[GenerateTemporaryServiceCredentialGcpOptions] = None,
11437
12704
  ) -> TemporaryCredentials:
11438
- """Generate a temporary service credential.
11439
-
11440
- Returns a set of temporary credentials generated using the specified service credential. The caller
12705
+ """Returns a set of temporary credentials generated using the specified service credential. The caller
11441
12706
  must be a metastore admin or have the metastore privilege **ACCESS** on the service credential.
11442
12707
 
11443
12708
  :param credential_name: str
11444
12709
  The name of the service credential used to generate a temporary credential
11445
12710
  :param azure_options: :class:`GenerateTemporaryServiceCredentialAzureOptions` (optional)
11446
- The Azure cloud options to customize the requested temporary credential
11447
12711
  :param gcp_options: :class:`GenerateTemporaryServiceCredentialGcpOptions` (optional)
11448
- The GCP cloud options to customize the requested temporary credential
11449
12712
 
11450
12713
  :returns: :class:`TemporaryCredentials`
11451
12714
  """
@@ -11465,9 +12728,7 @@ class CredentialsAPI:
11465
12728
  return TemporaryCredentials.from_dict(res)
11466
12729
 
11467
12730
  def get_credential(self, name_arg: str) -> CredentialInfo:
11468
- """Get a credential.
11469
-
11470
- Gets a service or storage credential from the metastore. The caller must be a metastore admin, the
12731
+ """Gets a service or storage credential from the metastore. The caller must be a metastore admin, the
11471
12732
  owner of the credential, or have any permission on the credential.
11472
12733
 
11473
12734
  :param name_arg: str
@@ -11490,9 +12751,7 @@ class CredentialsAPI:
11490
12751
  page_token: Optional[str] = None,
11491
12752
  purpose: Optional[CredentialPurpose] = None,
11492
12753
  ) -> Iterator[CredentialInfo]:
11493
- """List credentials.
11494
-
11495
- Gets an array of credentials (as __CredentialInfo__ objects).
12754
+ """Gets an array of credentials (as __CredentialInfo__ objects).
11496
12755
 
11497
12756
  The array is limited to only the credentials that the caller has permission to access. If the caller
11498
12757
  is a metastore admin, retrieval of credentials is unrestricted. There is no guarantee of a specific
@@ -11547,9 +12806,7 @@ class CredentialsAPI:
11547
12806
  read_only: Optional[bool] = None,
11548
12807
  skip_validation: Optional[bool] = None,
11549
12808
  ) -> CredentialInfo:
11550
- """Update a credential.
11551
-
11552
- Updates a service or storage credential on the metastore.
12809
+ """Updates a service or storage credential on the metastore.
11553
12810
 
11554
12811
  The caller must be the owner of the credential or a metastore admin or have the `MANAGE` permission.
11555
12812
  If the caller is a metastore admin, only the __owner__ field can be changed.
@@ -11557,15 +12814,15 @@ class CredentialsAPI:
11557
12814
  :param name_arg: str
11558
12815
  Name of the credential.
11559
12816
  :param aws_iam_role: :class:`AwsIamRole` (optional)
11560
- The AWS IAM role configuration
12817
+ The AWS IAM role configuration.
11561
12818
  :param azure_managed_identity: :class:`AzureManagedIdentity` (optional)
11562
12819
  The Azure managed identity configuration.
11563
12820
  :param azure_service_principal: :class:`AzureServicePrincipal` (optional)
11564
- The Azure service principal configuration. Only applicable when purpose is **STORAGE**.
12821
+ The Azure service principal configuration.
11565
12822
  :param comment: str (optional)
11566
12823
  Comment associated with the credential.
11567
12824
  :param databricks_gcp_service_account: :class:`DatabricksGcpServiceAccount` (optional)
11568
- GCP long-lived credential. Databricks-created Google Cloud Storage service account.
12825
+ The Databricks managed GCP service account configuration.
11569
12826
  :param force: bool (optional)
11570
12827
  Force an update even if there are dependent services (when purpose is **SERVICE**) or dependent
11571
12828
  external locations and external tables (when purpose is **STORAGE**).
@@ -11626,9 +12883,7 @@ class CredentialsAPI:
11626
12883
  read_only: Optional[bool] = None,
11627
12884
  url: Optional[str] = None,
11628
12885
  ) -> ValidateCredentialResponse:
11629
- """Validate a credential.
11630
-
11631
- Validates a credential.
12886
+ """Validates a credential.
11632
12887
 
11633
12888
  For service credentials (purpose is **SERVICE**), either the __credential_name__ or the cloud-specific
11634
12889
  credential must be provided.
@@ -11643,13 +12898,10 @@ class CredentialsAPI:
11643
12898
  metastore and the credential (e.g., **CREATE_EXTERNAL_LOCATION** when purpose is **STORAGE**).
11644
12899
 
11645
12900
  :param aws_iam_role: :class:`AwsIamRole` (optional)
11646
- The AWS IAM role configuration
11647
12901
  :param azure_managed_identity: :class:`AzureManagedIdentity` (optional)
11648
- The Azure managed identity configuration.
11649
12902
  :param credential_name: str (optional)
11650
12903
  Required. The name of an existing credential or long-lived cloud credential to validate.
11651
12904
  :param databricks_gcp_service_account: :class:`DatabricksGcpServiceAccount` (optional)
11652
- GCP long-lived credential. Databricks-created Google Cloud Storage service account.
11653
12905
  :param external_location_name: str (optional)
11654
12906
  The name of an existing external location to validate. Only applicable for storage credentials
11655
12907
  (purpose is **STORAGE**.)
@@ -11689,6 +12941,132 @@ class CredentialsAPI:
11689
12941
  return ValidateCredentialResponse.from_dict(res)
11690
12942
 
11691
12943
 
12944
+ class ExternalLineageAPI:
12945
+ """External Lineage APIs enable defining and managing lineage relationships between Databricks objects and
12946
+ external systems. These APIs allow users to capture data flows connecting Databricks tables, models, and
12947
+ file paths with external metadata objects.
12948
+
12949
+ With these APIs, users can create, update, delete, and list lineage relationships with support for
12950
+ column-level mappings and custom properties."""
12951
+
12952
+ def __init__(self, api_client):
12953
+ self._api = api_client
12954
+
12955
+ def create_external_lineage_relationship(
12956
+ self, external_lineage_relationship: CreateRequestExternalLineage
12957
+ ) -> ExternalLineageRelationship:
12958
+ """Creates an external lineage relationship between a Databricks or external metadata object and another
12959
+ external metadata object.
12960
+
12961
+ :param external_lineage_relationship: :class:`CreateRequestExternalLineage`
12962
+
12963
+ :returns: :class:`ExternalLineageRelationship`
12964
+ """
12965
+ body = external_lineage_relationship.as_dict()
12966
+ headers = {
12967
+ "Accept": "application/json",
12968
+ "Content-Type": "application/json",
12969
+ }
12970
+
12971
+ res = self._api.do("POST", "/api/2.0/lineage-tracking/external-lineage", body=body, headers=headers)
12972
+ return ExternalLineageRelationship.from_dict(res)
12973
+
12974
+ def delete_external_lineage_relationship(self, external_lineage_relationship: DeleteRequestExternalLineage):
12975
+ """Deletes an external lineage relationship between a Databricks or external metadata object and another
12976
+ external metadata object.
12977
+
12978
+ :param external_lineage_relationship: :class:`DeleteRequestExternalLineage`
12979
+
12980
+
12981
+ """
12982
+
12983
+ query = {}
12984
+ if external_lineage_relationship is not None:
12985
+ query["external_lineage_relationship"] = external_lineage_relationship.as_dict()
12986
+ headers = {
12987
+ "Accept": "application/json",
12988
+ }
12989
+
12990
+ self._api.do("DELETE", "/api/2.0/lineage-tracking/external-lineage", query=query, headers=headers)
12991
+
12992
+ def list_external_lineage_relationships(
12993
+ self,
12994
+ object_info: ExternalLineageObject,
12995
+ lineage_direction: LineageDirection,
12996
+ *,
12997
+ page_size: Optional[int] = None,
12998
+ page_token: Optional[str] = None,
12999
+ ) -> Iterator[ExternalLineageInfo]:
13000
+ """Lists external lineage relationships of a Databricks object or external metadata given a supplied
13001
+ direction.
13002
+
13003
+ :param object_info: :class:`ExternalLineageObject`
13004
+ The object to query external lineage relationship on.
13005
+ :param lineage_direction: :class:`LineageDirection`
13006
+ The lineage direction to filter on.
13007
+ :param page_size: int (optional)
13008
+ :param page_token: str (optional)
13009
+
13010
+ :returns: Iterator over :class:`ExternalLineageInfo`
13011
+ """
13012
+
13013
+ query = {}
13014
+ if lineage_direction is not None:
13015
+ query["lineage_direction"] = lineage_direction.value
13016
+ if object_info is not None:
13017
+ query["object_info"] = object_info.as_dict()
13018
+ if page_size is not None:
13019
+ query["page_size"] = page_size
13020
+ if page_token is not None:
13021
+ query["page_token"] = page_token
13022
+ headers = {
13023
+ "Accept": "application/json",
13024
+ }
13025
+
13026
+ while True:
13027
+ json = self._api.do("GET", "/api/2.0/lineage-tracking/external-lineage", query=query, headers=headers)
13028
+ if "external_lineage_relationships" in json:
13029
+ for v in json["external_lineage_relationships"]:
13030
+ yield ExternalLineageInfo.from_dict(v)
13031
+ if "next_page_token" not in json or not json["next_page_token"]:
13032
+ return
13033
+ query["page_token"] = json["next_page_token"]
13034
+
13035
+ def update_external_lineage_relationship(
13036
+ self, external_lineage_relationship: UpdateRequestExternalLineage, update_mask: str
13037
+ ) -> ExternalLineageRelationship:
13038
+ """Updates an external lineage relationship between a Databricks or external metadata object and another
13039
+ external metadata object.
13040
+
13041
+ :param external_lineage_relationship: :class:`UpdateRequestExternalLineage`
13042
+ :param update_mask: str
13043
+ The field mask must be a single string, with multiple fields separated by commas (no spaces). The
13044
+ field path is relative to the resource object, using a dot (`.`) to navigate sub-fields (e.g.,
13045
+ `author.given_name`). Specification of elements in sequence or map fields is not allowed, as only
13046
+ the entire collection field can be specified. Field names must exactly match the resource field
13047
+ names.
13048
+
13049
+ A field mask of `*` indicates full replacement. It’s recommended to always explicitly list the
13050
+ fields being updated and avoid using `*` wildcards, as it can lead to unintended results if the API
13051
+ changes in the future.
13052
+
13053
+ :returns: :class:`ExternalLineageRelationship`
13054
+ """
13055
+ body = external_lineage_relationship.as_dict()
13056
+ query = {}
13057
+ if update_mask is not None:
13058
+ query["update_mask"] = update_mask
13059
+ headers = {
13060
+ "Accept": "application/json",
13061
+ "Content-Type": "application/json",
13062
+ }
13063
+
13064
+ res = self._api.do(
13065
+ "PATCH", "/api/2.0/lineage-tracking/external-lineage", query=query, body=body, headers=headers
13066
+ )
13067
+ return ExternalLineageRelationship.from_dict(res)
13068
+
13069
+
11692
13070
  class ExternalLocationsAPI:
11693
13071
  """An external location is an object that combines a cloud storage path with a storage credential that
11694
13072
  authorizes access to the cloud storage path. Each external location is subject to Unity Catalog
@@ -11718,9 +13096,7 @@ class ExternalLocationsAPI:
11718
13096
  read_only: Optional[bool] = None,
11719
13097
  skip_validation: Optional[bool] = None,
11720
13098
  ) -> ExternalLocationInfo:
11721
- """Create an external location.
11722
-
11723
- Creates a new external location entry in the metastore. The caller must be a metastore admin or have
13099
+ """Creates a new external location entry in the metastore. The caller must be a metastore admin or have
11724
13100
  the **CREATE_EXTERNAL_LOCATION** privilege on both the metastore and the associated storage
11725
13101
  credential.
11726
13102
 
@@ -11733,15 +13109,14 @@ class ExternalLocationsAPI:
11733
13109
  :param comment: str (optional)
11734
13110
  User-provided free-form text description.
11735
13111
  :param enable_file_events: bool (optional)
11736
- [Create:OPT Update:OPT] Whether to enable file events on this external location.
13112
+ Whether to enable file events on this external location.
11737
13113
  :param encryption_details: :class:`EncryptionDetails` (optional)
11738
- Encryption options that apply to clients connecting to cloud storage.
11739
13114
  :param fallback: bool (optional)
11740
13115
  Indicates whether fallback mode is enabled for this external location. When fallback mode is
11741
13116
  enabled, the access to the location falls back to cluster credentials if UC credentials are not
11742
13117
  sufficient.
11743
13118
  :param file_event_queue: :class:`FileEventQueue` (optional)
11744
- [Create:OPT Update:OPT] File event queue settings.
13119
+ File event queue settings.
11745
13120
  :param read_only: bool (optional)
11746
13121
  Indicates whether the external location is read-only.
11747
13122
  :param skip_validation: bool (optional)
@@ -11779,9 +13154,7 @@ class ExternalLocationsAPI:
11779
13154
  return ExternalLocationInfo.from_dict(res)
11780
13155
 
11781
13156
  def delete(self, name: str, *, force: Optional[bool] = None):
11782
- """Delete an external location.
11783
-
11784
- Deletes the specified external location from the metastore. The caller must be the owner of the
13157
+ """Deletes the specified external location from the metastore. The caller must be the owner of the
11785
13158
  external location.
11786
13159
 
11787
13160
  :param name: str
@@ -11802,9 +13175,7 @@ class ExternalLocationsAPI:
11802
13175
  self._api.do("DELETE", f"/api/2.1/unity-catalog/external-locations/{name}", query=query, headers=headers)
11803
13176
 
11804
13177
  def get(self, name: str, *, include_browse: Optional[bool] = None) -> ExternalLocationInfo:
11805
- """Get an external location.
11806
-
11807
- Gets an external location from the metastore. The caller must be either a metastore admin, the owner
13178
+ """Gets an external location from the metastore. The caller must be either a metastore admin, the owner
11808
13179
  of the external location, or a user that has some privilege on the external location.
11809
13180
 
11810
13181
  :param name: str
@@ -11833,9 +13204,7 @@ class ExternalLocationsAPI:
11833
13204
  max_results: Optional[int] = None,
11834
13205
  page_token: Optional[str] = None,
11835
13206
  ) -> Iterator[ExternalLocationInfo]:
11836
- """List external locations.
11837
-
11838
- Gets an array of external locations (__ExternalLocationInfo__ objects) from the metastore. The caller
13207
+ """Gets an array of external locations (__ExternalLocationInfo__ objects) from the metastore. The caller
11839
13208
  must be a metastore admin, the owner of the external location, or a user that has some privilege on
11840
13209
  the external location. There is no guarantee of a specific ordering of the elements in the array.
11841
13210
 
@@ -11891,9 +13260,7 @@ class ExternalLocationsAPI:
11891
13260
  skip_validation: Optional[bool] = None,
11892
13261
  url: Optional[str] = None,
11893
13262
  ) -> ExternalLocationInfo:
11894
- """Update an external location.
11895
-
11896
- Updates an external location in the metastore. The caller must be the owner of the external location,
13263
+ """Updates an external location in the metastore. The caller must be the owner of the external location,
11897
13264
  or be a metastore admin. In the second case, the admin can only update the name of the external
11898
13265
  location.
11899
13266
 
@@ -11904,15 +13271,14 @@ class ExternalLocationsAPI:
11904
13271
  :param credential_name: str (optional)
11905
13272
  Name of the storage credential used with this location.
11906
13273
  :param enable_file_events: bool (optional)
11907
- [Create:OPT Update:OPT] Whether to enable file events on this external location.
13274
+ Whether to enable file events on this external location.
11908
13275
  :param encryption_details: :class:`EncryptionDetails` (optional)
11909
- Encryption options that apply to clients connecting to cloud storage.
11910
13276
  :param fallback: bool (optional)
11911
13277
  Indicates whether fallback mode is enabled for this external location. When fallback mode is
11912
13278
  enabled, the access to the location falls back to cluster credentials if UC credentials are not
11913
13279
  sufficient.
11914
13280
  :param file_event_queue: :class:`FileEventQueue` (optional)
11915
- [Create:OPT Update:OPT] File event queue settings.
13281
+ File event queue settings.
11916
13282
  :param force: bool (optional)
11917
13283
  Force update even if changing url invalidates dependent external tables or mounts.
11918
13284
  :param isolation_mode: :class:`IsolationMode` (optional)
@@ -11965,6 +13331,137 @@ class ExternalLocationsAPI:
11965
13331
  return ExternalLocationInfo.from_dict(res)
11966
13332
 
11967
13333
 
13334
+ class ExternalMetadataAPI:
13335
+ """External Metadata objects enable customers to register and manage metadata about external systems within
13336
+ Unity Catalog.
13337
+
13338
+ These APIs provide a standardized way to create, update, retrieve, list, and delete external metadata
13339
+ objects. Fine-grained authorization ensures that only users with appropriate permissions can view and
13340
+ manage external metadata objects."""
13341
+
13342
+ def __init__(self, api_client):
13343
+ self._api = api_client
13344
+
13345
+ def create_external_metadata(self, external_metadata: ExternalMetadata) -> ExternalMetadata:
13346
+ """Creates a new external metadata object in the parent metastore if the caller is a metastore admin or
13347
+ has the **CREATE_EXTERNAL_METADATA** privilege. Grants **BROWSE** to all account users upon creation
13348
+ by default.
13349
+
13350
+ :param external_metadata: :class:`ExternalMetadata`
13351
+
13352
+ :returns: :class:`ExternalMetadata`
13353
+ """
13354
+ body = external_metadata.as_dict()
13355
+ headers = {
13356
+ "Accept": "application/json",
13357
+ "Content-Type": "application/json",
13358
+ }
13359
+
13360
+ res = self._api.do("POST", "/api/2.0/lineage-tracking/external-metadata", body=body, headers=headers)
13361
+ return ExternalMetadata.from_dict(res)
13362
+
13363
+ def delete_external_metadata(self, name: str):
13364
+ """Deletes the external metadata object that matches the supplied name. The caller must be a metastore
13365
+ admin, the owner of the external metadata object, or a user that has the **MANAGE** privilege.
13366
+
13367
+ :param name: str
13368
+
13369
+
13370
+ """
13371
+
13372
+ headers = {
13373
+ "Accept": "application/json",
13374
+ }
13375
+
13376
+ self._api.do("DELETE", f"/api/2.0/lineage-tracking/external-metadata/{name}", headers=headers)
13377
+
13378
+ def get_external_metadata(self, name: str) -> ExternalMetadata:
13379
+ """Gets the specified external metadata object in a metastore. The caller must be a metastore admin, the
13380
+ owner of the external metadata object, or a user that has the **BROWSE** privilege.
13381
+
13382
+ :param name: str
13383
+
13384
+ :returns: :class:`ExternalMetadata`
13385
+ """
13386
+
13387
+ headers = {
13388
+ "Accept": "application/json",
13389
+ }
13390
+
13391
+ res = self._api.do("GET", f"/api/2.0/lineage-tracking/external-metadata/{name}", headers=headers)
13392
+ return ExternalMetadata.from_dict(res)
13393
+
13394
+ def list_external_metadata(
13395
+ self, *, page_size: Optional[int] = None, page_token: Optional[str] = None
13396
+ ) -> Iterator[ExternalMetadata]:
13397
+ """Gets an array of external metadata objects in the metastore. If the caller is the metastore admin, all
13398
+ external metadata objects will be retrieved. Otherwise, only external metadata objects that the caller
13399
+ has **BROWSE** on will be retrieved. There is no guarantee of a specific ordering of the elements in
13400
+ the array.
13401
+
13402
+ :param page_size: int (optional)
13403
+ :param page_token: str (optional)
13404
+
13405
+ :returns: Iterator over :class:`ExternalMetadata`
13406
+ """
13407
+
13408
+ query = {}
13409
+ if page_size is not None:
13410
+ query["page_size"] = page_size
13411
+ if page_token is not None:
13412
+ query["page_token"] = page_token
13413
+ headers = {
13414
+ "Accept": "application/json",
13415
+ }
13416
+
13417
+ while True:
13418
+ json = self._api.do("GET", "/api/2.0/lineage-tracking/external-metadata", query=query, headers=headers)
13419
+ if "external_metadata" in json:
13420
+ for v in json["external_metadata"]:
13421
+ yield ExternalMetadata.from_dict(v)
13422
+ if "next_page_token" not in json or not json["next_page_token"]:
13423
+ return
13424
+ query["page_token"] = json["next_page_token"]
13425
+
13426
+ def update_external_metadata(
13427
+ self, name: str, external_metadata: ExternalMetadata, update_mask: str
13428
+ ) -> ExternalMetadata:
13429
+ """Updates the external metadata object that matches the supplied name. The caller can only update either
13430
+ the owner or other metadata fields in one request. The caller must be a metastore admin, the owner of
13431
+ the external metadata object, or a user that has the **MODIFY** privilege. If the caller is updating
13432
+ the owner, they must also have the **MANAGE** privilege.
13433
+
13434
+ :param name: str
13435
+ Name of the external metadata object.
13436
+ :param external_metadata: :class:`ExternalMetadata`
13437
+ :param update_mask: str
13438
+ The field mask must be a single string, with multiple fields separated by commas (no spaces). The
13439
+ field path is relative to the resource object, using a dot (`.`) to navigate sub-fields (e.g.,
13440
+ `author.given_name`). Specification of elements in sequence or map fields is not allowed, as only
13441
+ the entire collection field can be specified. Field names must exactly match the resource field
13442
+ names.
13443
+
13444
+ A field mask of `*` indicates full replacement. It’s recommended to always explicitly list the
13445
+ fields being updated and avoid using `*` wildcards, as it can lead to unintended results if the API
13446
+ changes in the future.
13447
+
13448
+ :returns: :class:`ExternalMetadata`
13449
+ """
13450
+ body = external_metadata.as_dict()
13451
+ query = {}
13452
+ if update_mask is not None:
13453
+ query["update_mask"] = update_mask
13454
+ headers = {
13455
+ "Accept": "application/json",
13456
+ "Content-Type": "application/json",
13457
+ }
13458
+
13459
+ res = self._api.do(
13460
+ "PATCH", f"/api/2.0/lineage-tracking/external-metadata/{name}", query=query, body=body, headers=headers
13461
+ )
13462
+ return ExternalMetadata.from_dict(res)
13463
+
13464
+
11968
13465
  class FunctionsAPI:
11969
13466
  """Functions implement User-Defined Functions (UDFs) in Unity Catalog.
11970
13467
 
@@ -11976,9 +13473,7 @@ class FunctionsAPI:
11976
13473
  self._api = api_client
11977
13474
 
11978
13475
  def create(self, function_info: CreateFunction) -> FunctionInfo:
11979
- """Create a function.
11980
-
11981
- **WARNING: This API is experimental and will change in future versions**
13476
+ """**WARNING: This API is experimental and will change in future versions**
11982
13477
 
11983
13478
  Creates a new function
11984
13479
 
@@ -12003,9 +13498,7 @@ class FunctionsAPI:
12003
13498
  return FunctionInfo.from_dict(res)
12004
13499
 
12005
13500
  def delete(self, name: str, *, force: Optional[bool] = None):
12006
- """Delete a function.
12007
-
12008
- Deletes the function that matches the supplied name. For the deletion to succeed, the user must
13501
+ """Deletes the function that matches the supplied name. For the deletion to succeed, the user must
12009
13502
  satisfy one of the following conditions: - Is the owner of the function's parent catalog - Is the
12010
13503
  owner of the function's parent schema and have the **USE_CATALOG** privilege on its parent catalog -
12011
13504
  Is the owner of the function itself and have both the **USE_CATALOG** privilege on its parent catalog
@@ -12030,9 +13523,7 @@ class FunctionsAPI:
12030
13523
  self._api.do("DELETE", f"/api/2.1/unity-catalog/functions/{name}", query=query, headers=headers)
12031
13524
 
12032
13525
  def get(self, name: str, *, include_browse: Optional[bool] = None) -> FunctionInfo:
12033
- """Get a function.
12034
-
12035
- Gets a function from within a parent catalog and schema. For the fetch to succeed, the user must
13526
+ """Gets a function from within a parent catalog and schema. For the fetch to succeed, the user must
12036
13527
  satisfy one of the following requirements: - Is a metastore admin - Is an owner of the function's
12037
13528
  parent catalog - Have the **USE_CATALOG** privilege on the function's parent catalog and be the owner
12038
13529
  of the function - Have the **USE_CATALOG** privilege on the function's parent catalog, the
@@ -12068,9 +13559,7 @@ class FunctionsAPI:
12068
13559
  max_results: Optional[int] = None,
12069
13560
  page_token: Optional[str] = None,
12070
13561
  ) -> Iterator[FunctionInfo]:
12071
- """List functions.
12072
-
12073
- List functions within the specified parent catalog and schema. If the user is a metastore admin, all
13562
+ """List functions within the specified parent catalog and schema. If the user is a metastore admin, all
12074
13563
  functions are returned in the output list. Otherwise, the user must have the **USE_CATALOG** privilege
12075
13564
  on the catalog and the **USE_SCHEMA** privilege on the schema, and the output list contains only
12076
13565
  functions for which either the user has the **EXECUTE** privilege or the user is the owner. There is
@@ -12119,9 +13608,7 @@ class FunctionsAPI:
12119
13608
  query["page_token"] = json["next_page_token"]
12120
13609
 
12121
13610
  def update(self, name: str, *, owner: Optional[str] = None) -> FunctionInfo:
12122
- """Update a function.
12123
-
12124
- Updates the function that matches the supplied name. Only the owner of the function can be updated. If
13611
+ """Updates the function that matches the supplied name. Only the owner of the function can be updated. If
12125
13612
  the user is not a metastore admin, the user must be a member of the group that is the new function
12126
13613
  owner. - Is a metastore admin - Is the owner of the function's parent catalog - Is the owner of the
12127
13614
  function's parent schema and has the **USE_CATALOG** privilege on its parent catalog - Is the owner of
@@ -12171,9 +13658,7 @@ class GrantsAPI:
12171
13658
  page_token: Optional[str] = None,
12172
13659
  principal: Optional[str] = None,
12173
13660
  ) -> GetPermissionsResponse:
12174
- """Get permissions.
12175
-
12176
- Gets the permissions for a securable. Does not include inherited permissions.
13661
+ """Gets the permissions for a securable. Does not include inherited permissions.
12177
13662
 
12178
13663
  :param securable_type: str
12179
13664
  Type of securable.
@@ -12222,9 +13707,7 @@ class GrantsAPI:
12222
13707
  page_token: Optional[str] = None,
12223
13708
  principal: Optional[str] = None,
12224
13709
  ) -> EffectivePermissionsList:
12225
- """Get effective permissions.
12226
-
12227
- Gets the effective permissions for a securable. Includes inherited permissions from any parent
13710
+ """Gets the effective permissions for a securable. Includes inherited permissions from any parent
12228
13711
  securables.
12229
13712
 
12230
13713
  :param securable_type: str
@@ -12273,9 +13756,7 @@ class GrantsAPI:
12273
13756
  def update(
12274
13757
  self, securable_type: str, full_name: str, *, changes: Optional[List[PermissionsChange]] = None
12275
13758
  ) -> UpdatePermissionsResponse:
12276
- """Update permissions.
12277
-
12278
- Updates the permissions for a securable.
13759
+ """Updates the permissions for a securable.
12279
13760
 
12280
13761
  :param securable_type: str
12281
13762
  Type of securable.
@@ -12317,9 +13798,7 @@ class MetastoresAPI:
12317
13798
  self._api = api_client
12318
13799
 
12319
13800
  def assign(self, workspace_id: int, metastore_id: str, default_catalog_name: str):
12320
- """Create an assignment.
12321
-
12322
- Creates a new metastore assignment. If an assignment for the same __workspace_id__ exists, it will be
13801
+ """Creates a new metastore assignment. If an assignment for the same __workspace_id__ exists, it will be
12323
13802
  overwritten by the new __metastore_id__ and __default_catalog_name__. The caller must be an account
12324
13803
  admin.
12325
13804
 
@@ -12346,9 +13825,7 @@ class MetastoresAPI:
12346
13825
  self._api.do("PUT", f"/api/2.1/unity-catalog/workspaces/{workspace_id}/metastore", body=body, headers=headers)
12347
13826
 
12348
13827
  def create(self, name: str, *, region: Optional[str] = None, storage_root: Optional[str] = None) -> MetastoreInfo:
12349
- """Create a metastore.
12350
-
12351
- Creates a new metastore based on a provided name and optional storage root path. By default (if the
13828
+ """Creates a new metastore based on a provided name and optional storage root path. By default (if the
12352
13829
  __owner__ field is not set), the owner of the new metastore is the user calling the
12353
13830
  __createMetastore__ API. If the __owner__ field is set to the empty string (**""**), the ownership is
12354
13831
  assigned to the System User instead.
@@ -12378,9 +13855,8 @@ class MetastoresAPI:
12378
13855
  return MetastoreInfo.from_dict(res)
12379
13856
 
12380
13857
  def current(self) -> MetastoreAssignment:
12381
- """Get metastore assignment for workspace.
13858
+ """Gets the metastore assignment for the workspace being accessed.
12382
13859
 
12383
- Gets the metastore assignment for the workspace being accessed.
12384
13860
 
12385
13861
  :returns: :class:`MetastoreAssignment`
12386
13862
  """
@@ -12393,9 +13869,7 @@ class MetastoresAPI:
12393
13869
  return MetastoreAssignment.from_dict(res)
12394
13870
 
12395
13871
  def delete(self, id: str, *, force: Optional[bool] = None):
12396
- """Delete a metastore.
12397
-
12398
- Deletes a metastore. The caller must be a metastore admin.
13872
+ """Deletes a metastore. The caller must be a metastore admin.
12399
13873
 
12400
13874
  :param id: str
12401
13875
  Unique ID of the metastore.
@@ -12415,9 +13889,7 @@ class MetastoresAPI:
12415
13889
  self._api.do("DELETE", f"/api/2.1/unity-catalog/metastores/{id}", query=query, headers=headers)
12416
13890
 
12417
13891
  def get(self, id: str) -> MetastoreInfo:
12418
- """Get a metastore.
12419
-
12420
- Gets a metastore that matches the supplied ID. The caller must be a metastore admin to retrieve this
13892
+ """Gets a metastore that matches the supplied ID. The caller must be a metastore admin to retrieve this
12421
13893
  info.
12422
13894
 
12423
13895
  :param id: str
@@ -12434,9 +13906,7 @@ class MetastoresAPI:
12434
13906
  return MetastoreInfo.from_dict(res)
12435
13907
 
12436
13908
  def list(self, *, max_results: Optional[int] = None, page_token: Optional[str] = None) -> Iterator[MetastoreInfo]:
12437
- """List metastores.
12438
-
12439
- Gets an array of the available metastores (as __MetastoreInfo__ objects). The caller must be an admin
13909
+ """Gets an array of the available metastores (as __MetastoreInfo__ objects). The caller must be an admin
12440
13910
  to retrieve this info. There is no guarantee of a specific ordering of the elements in the array.
12441
13911
 
12442
13912
  :param max_results: int (optional)
@@ -12472,11 +13942,10 @@ class MetastoresAPI:
12472
13942
  query["page_token"] = json["next_page_token"]
12473
13943
 
12474
13944
  def summary(self) -> GetMetastoreSummaryResponse:
12475
- """Get a metastore summary.
12476
-
12477
- Gets information about a metastore. This summary includes the storage credential, the cloud vendor,
13945
+ """Gets information about a metastore. This summary includes the storage credential, the cloud vendor,
12478
13946
  the cloud region, and the global metastore ID.
12479
13947
 
13948
+
12480
13949
  :returns: :class:`GetMetastoreSummaryResponse`
12481
13950
  """
12482
13951
 
@@ -12488,9 +13957,7 @@ class MetastoresAPI:
12488
13957
  return GetMetastoreSummaryResponse.from_dict(res)
12489
13958
 
12490
13959
  def unassign(self, workspace_id: int, metastore_id: str):
12491
- """Delete an assignment.
12492
-
12493
- Deletes a metastore assignment. The caller must be an account administrator.
13960
+ """Deletes a metastore assignment. The caller must be an account administrator.
12494
13961
 
12495
13962
  :param workspace_id: int
12496
13963
  A workspace ID.
@@ -12523,9 +13990,7 @@ class MetastoresAPI:
12523
13990
  privilege_model_version: Optional[str] = None,
12524
13991
  storage_root_credential_id: Optional[str] = None,
12525
13992
  ) -> MetastoreInfo:
12526
- """Update a metastore.
12527
-
12528
- Updates information for a specific metastore. The caller must be a metastore admin. If the __owner__
13993
+ """Updates information for a specific metastore. The caller must be a metastore admin. If the __owner__
12529
13994
  field is set to the empty string (**""**), the ownership is updated to the System User.
12530
13995
 
12531
13996
  :param id: str
@@ -12576,9 +14041,7 @@ class MetastoresAPI:
12576
14041
  def update_assignment(
12577
14042
  self, workspace_id: int, *, default_catalog_name: Optional[str] = None, metastore_id: Optional[str] = None
12578
14043
  ):
12579
- """Update an assignment.
12580
-
12581
- Updates a metastore assignment. This operation can be used to update __metastore_id__ or
14044
+ """Updates a metastore assignment. This operation can be used to update __metastore_id__ or
12582
14045
  __default_catalog_name__ for a specified Workspace, if the Workspace is already assigned a metastore.
12583
14046
  The caller must be an account admin to update __metastore_id__; otherwise, the caller can be a
12584
14047
  Workspace admin.
@@ -12618,9 +14081,7 @@ class ModelVersionsAPI:
12618
14081
  self._api = api_client
12619
14082
 
12620
14083
  def delete(self, full_name: str, version: int):
12621
- """Delete a Model Version.
12622
-
12623
- Deletes a model version from the specified registered model. Any aliases assigned to the model version
14084
+ """Deletes a model version from the specified registered model. Any aliases assigned to the model version
12624
14085
  will also be deleted.
12625
14086
 
12626
14087
  The caller must be a metastore admin or an owner of the parent registered model. For the latter case,
@@ -12647,9 +14108,7 @@ class ModelVersionsAPI:
12647
14108
  include_aliases: Optional[bool] = None,
12648
14109
  include_browse: Optional[bool] = None,
12649
14110
  ) -> ModelVersionInfo:
12650
- """Get a Model Version.
12651
-
12652
- Get a model version.
14111
+ """Get a model version.
12653
14112
 
12654
14113
  The caller must be a metastore admin or an owner of (or have the **EXECUTE** privilege on) the parent
12655
14114
  registered model. For the latter case, the caller must also be the owner or have the **USE_CATALOG**
@@ -12683,9 +14142,7 @@ class ModelVersionsAPI:
12683
14142
  return ModelVersionInfo.from_dict(res)
12684
14143
 
12685
14144
  def get_by_alias(self, full_name: str, alias: str, *, include_aliases: Optional[bool] = None) -> ModelVersionInfo:
12686
- """Get Model Version By Alias.
12687
-
12688
- Get a model version by alias.
14145
+ """Get a model version by alias.
12689
14146
 
12690
14147
  The caller must be a metastore admin or an owner of (or have the **EXECUTE** privilege on) the
12691
14148
  registered model. For the latter case, the caller must also be the owner or have the **USE_CATALOG**
@@ -12721,9 +14178,7 @@ class ModelVersionsAPI:
12721
14178
  max_results: Optional[int] = None,
12722
14179
  page_token: Optional[str] = None,
12723
14180
  ) -> Iterator[ModelVersionInfo]:
12724
- """List Model Versions.
12725
-
12726
- List model versions. You can list model versions under a particular schema, or list all model versions
14181
+ """List model versions. You can list model versions under a particular schema, or list all model versions
12727
14182
  in the current metastore.
12728
14183
 
12729
14184
  The returned models are filtered based on the privileges of the calling user. For example, the
@@ -12775,9 +14230,7 @@ class ModelVersionsAPI:
12775
14230
  query["page_token"] = json["next_page_token"]
12776
14231
 
12777
14232
  def update(self, full_name: str, version: int, *, comment: Optional[str] = None) -> ModelVersionInfo:
12778
- """Update a Model Version.
12779
-
12780
- Updates the specified model version.
14233
+ """Updates the specified model version.
12781
14234
 
12782
14235
  The caller must be a metastore admin or an owner of the parent registered model. For the latter case,
12783
14236
  the caller must also be the owner or have the **USE_CATALOG** privilege on the parent catalog and the
@@ -12844,12 +14297,10 @@ class OnlineTablesAPI:
12844
14297
  raise TimeoutError(f"timed out after {timeout}: {status_message}")
12845
14298
 
12846
14299
  def create(self, table: OnlineTable) -> Wait[OnlineTable]:
12847
- """Create an Online Table.
12848
-
12849
- Create a new Online Table.
14300
+ """Create a new Online Table.
12850
14301
 
12851
14302
  :param table: :class:`OnlineTable`
12852
- Online Table information.
14303
+ Specification of the online table to be created.
12853
14304
 
12854
14305
  :returns:
12855
14306
  Long-running operation waiter for :class:`OnlineTable`.
@@ -12870,9 +14321,7 @@ class OnlineTablesAPI:
12870
14321
  return self.create(table=table).result(timeout=timeout)
12871
14322
 
12872
14323
  def delete(self, name: str):
12873
- """Delete an Online Table.
12874
-
12875
- Delete an online table. Warning: This will delete all the data in the online table. If the source
14324
+ """Delete an online table. Warning: This will delete all the data in the online table. If the source
12876
14325
  Delta table was deleted or modified since this Online Table was created, this will lose the data
12877
14326
  forever!
12878
14327
 
@@ -12889,9 +14338,7 @@ class OnlineTablesAPI:
12889
14338
  self._api.do("DELETE", f"/api/2.0/online-tables/{name}", headers=headers)
12890
14339
 
12891
14340
  def get(self, name: str) -> OnlineTable:
12892
- """Get an Online Table.
12893
-
12894
- Get information about an existing online table and its status.
14341
+ """Get information about an existing online table and its status.
12895
14342
 
12896
14343
  :param name: str
12897
14344
  Full three-part (catalog, schema, table) name of the table.
@@ -12919,9 +14366,7 @@ class QualityMonitorsAPI:
12919
14366
  self._api = api_client
12920
14367
 
12921
14368
  def cancel_refresh(self, table_name: str, refresh_id: str):
12922
- """Cancel refresh.
12923
-
12924
- Cancel an active monitor refresh for the given refresh ID.
14369
+ """Cancel an active monitor refresh for the given refresh ID.
12925
14370
 
12926
14371
  The caller must either: 1. be an owner of the table's parent catalog 2. have **USE_CATALOG** on the
12927
14372
  table's parent catalog and be an owner of the table's parent schema 3. have the following permissions:
@@ -12962,9 +14407,7 @@ class QualityMonitorsAPI:
12962
14407
  time_series: Optional[MonitorTimeSeries] = None,
12963
14408
  warehouse_id: Optional[str] = None,
12964
14409
  ) -> MonitorInfo:
12965
- """Create a table monitor.
12966
-
12967
- Creates a new monitor for the specified table.
14410
+ """Creates a new monitor for the specified table.
12968
14411
 
12969
14412
  The caller must either: 1. be an owner of the table's parent catalog, have **USE_SCHEMA** on the
12970
14413
  table's parent schema, and have **SELECT** access on the table 2. have **USE_CATALOG** on the table's
@@ -13046,9 +14489,7 @@ class QualityMonitorsAPI:
13046
14489
  return MonitorInfo.from_dict(res)
13047
14490
 
13048
14491
  def delete(self, table_name: str):
13049
- """Delete a table monitor.
13050
-
13051
- Deletes a monitor for the specified table.
14492
+ """Deletes a monitor for the specified table.
13052
14493
 
13053
14494
  The caller must either: 1. be an owner of the table's parent catalog 2. have **USE_CATALOG** on the
13054
14495
  table's parent catalog and be an owner of the table's parent schema 3. have the following permissions:
@@ -13071,9 +14512,7 @@ class QualityMonitorsAPI:
13071
14512
  self._api.do("DELETE", f"/api/2.1/unity-catalog/tables/{table_name}/monitor", headers=headers)
13072
14513
 
13073
14514
  def get(self, table_name: str) -> MonitorInfo:
13074
- """Get a table monitor.
13075
-
13076
- Gets a monitor for the specified table.
14515
+ """Gets a monitor for the specified table.
13077
14516
 
13078
14517
  The caller must either: 1. be an owner of the table's parent catalog 2. have **USE_CATALOG** on the
13079
14518
  table's parent catalog and be an owner of the table's parent schema. 3. have the following
@@ -13098,9 +14537,7 @@ class QualityMonitorsAPI:
13098
14537
  return MonitorInfo.from_dict(res)
13099
14538
 
13100
14539
  def get_refresh(self, table_name: str, refresh_id: str) -> MonitorRefreshInfo:
13101
- """Get refresh.
13102
-
13103
- Gets info about a specific monitor refresh using the given refresh ID.
14540
+ """Gets info about a specific monitor refresh using the given refresh ID.
13104
14541
 
13105
14542
  The caller must either: 1. be an owner of the table's parent catalog 2. have **USE_CATALOG** on the
13106
14543
  table's parent catalog and be an owner of the table's parent schema 3. have the following permissions:
@@ -13127,9 +14564,7 @@ class QualityMonitorsAPI:
13127
14564
  return MonitorRefreshInfo.from_dict(res)
13128
14565
 
13129
14566
  def list_refreshes(self, table_name: str) -> MonitorRefreshListResponse:
13130
- """List refreshes.
13131
-
13132
- Gets an array containing the history of the most recent refreshes (up to 25) for this table.
14567
+ """Gets an array containing the history of the most recent refreshes (up to 25) for this table.
13133
14568
 
13134
14569
  The caller must either: 1. be an owner of the table's parent catalog 2. have **USE_CATALOG** on the
13135
14570
  table's parent catalog and be an owner of the table's parent schema 3. have the following permissions:
@@ -13154,9 +14589,7 @@ class QualityMonitorsAPI:
13154
14589
  def regenerate_dashboard(
13155
14590
  self, table_name: str, *, warehouse_id: Optional[str] = None
13156
14591
  ) -> RegenerateDashboardResponse:
13157
- """Regenerate a monitoring dashboard.
13158
-
13159
- Regenerates the monitoring dashboard for the specified table.
14592
+ """Regenerates the monitoring dashboard for the specified table.
13160
14593
 
13161
14594
  The caller must either: 1. be an owner of the table's parent catalog 2. have **USE_CATALOG** on the
13162
14595
  table's parent catalog and be an owner of the table's parent schema 3. have the following permissions:
@@ -13188,9 +14621,7 @@ class QualityMonitorsAPI:
13188
14621
  return RegenerateDashboardResponse.from_dict(res)
13189
14622
 
13190
14623
  def run_refresh(self, table_name: str) -> MonitorRefreshInfo:
13191
- """Queue a metric refresh for a monitor.
13192
-
13193
- Queues a metric refresh on the monitor for the specified table. The refresh will execute in the
14624
+ """Queues a metric refresh on the monitor for the specified table. The refresh will execute in the
13194
14625
  background.
13195
14626
 
13196
14627
  The caller must either: 1. be an owner of the table's parent catalog 2. have **USE_CATALOG** on the
@@ -13229,9 +14660,7 @@ class QualityMonitorsAPI:
13229
14660
  snapshot: Optional[MonitorSnapshot] = None,
13230
14661
  time_series: Optional[MonitorTimeSeries] = None,
13231
14662
  ) -> MonitorInfo:
13232
- """Update a table monitor.
13233
-
13234
- Updates a monitor for the specified table.
14663
+ """Updates a monitor for the specified table.
13235
14664
 
13236
14665
  The caller must either: 1. be an owner of the table's parent catalog 2. have **USE_CATALOG** on the
13237
14666
  table's parent catalog and be an owner of the table's parent schema 3. have the following permissions:
@@ -13345,9 +14774,7 @@ class RegisteredModelsAPI:
13345
14774
  comment: Optional[str] = None,
13346
14775
  storage_location: Optional[str] = None,
13347
14776
  ) -> RegisteredModelInfo:
13348
- """Create a Registered Model.
13349
-
13350
- Creates a new registered model in Unity Catalog.
14777
+ """Creates a new registered model in Unity Catalog.
13351
14778
 
13352
14779
  File storage for model versions in the registered model will be located in the default location which
13353
14780
  is specified by the parent schema, or the parent catalog, or the Metastore.
@@ -13390,9 +14817,7 @@ class RegisteredModelsAPI:
13390
14817
  return RegisteredModelInfo.from_dict(res)
13391
14818
 
13392
14819
  def delete(self, full_name: str):
13393
- """Delete a Registered Model.
13394
-
13395
- Deletes a registered model and all its model versions from the specified parent catalog and schema.
14820
+ """Deletes a registered model and all its model versions from the specified parent catalog and schema.
13396
14821
 
13397
14822
  The caller must be a metastore admin or an owner of the registered model. For the latter case, the
13398
14823
  caller must also be the owner or have the **USE_CATALOG** privilege on the parent catalog and the
@@ -13409,9 +14834,7 @@ class RegisteredModelsAPI:
13409
14834
  self._api.do("DELETE", f"/api/2.1/unity-catalog/models/{full_name}", headers=headers)
13410
14835
 
13411
14836
  def delete_alias(self, full_name: str, alias: str):
13412
- """Delete a Registered Model Alias.
13413
-
13414
- Deletes a registered model alias.
14837
+ """Deletes a registered model alias.
13415
14838
 
13416
14839
  The caller must be a metastore admin or an owner of the registered model. For the latter case, the
13417
14840
  caller must also be the owner or have the **USE_CATALOG** privilege on the parent catalog and the
@@ -13432,9 +14855,7 @@ class RegisteredModelsAPI:
13432
14855
  def get(
13433
14856
  self, full_name: str, *, include_aliases: Optional[bool] = None, include_browse: Optional[bool] = None
13434
14857
  ) -> RegisteredModelInfo:
13435
- """Get a Registered Model.
13436
-
13437
- Get a registered model.
14858
+ """Get a registered model.
13438
14859
 
13439
14860
  The caller must be a metastore admin or an owner of (or have the **EXECUTE** privilege on) the
13440
14861
  registered model. For the latter case, the caller must also be the owner or have the **USE_CATALOG**
@@ -13472,9 +14893,7 @@ class RegisteredModelsAPI:
13472
14893
  page_token: Optional[str] = None,
13473
14894
  schema_name: Optional[str] = None,
13474
14895
  ) -> Iterator[RegisteredModelInfo]:
13475
- """List Registered Models.
13476
-
13477
- List registered models. You can list registered models under a particular schema, or list all
14896
+ """List registered models. You can list registered models under a particular schema, or list all
13478
14897
  registered models in the current metastore.
13479
14898
 
13480
14899
  The returned models are filtered based on the privileges of the calling user. For example, the
@@ -13539,9 +14958,7 @@ class RegisteredModelsAPI:
13539
14958
  query["page_token"] = json["next_page_token"]
13540
14959
 
13541
14960
  def set_alias(self, full_name: str, alias: str, version_num: int) -> RegisteredModelAlias:
13542
- """Set a Registered Model Alias.
13543
-
13544
- Set an alias on the specified registered model.
14961
+ """Set an alias on the specified registered model.
13545
14962
 
13546
14963
  The caller must be a metastore admin or an owner of the registered model. For the latter case, the
13547
14964
  caller must also be the owner or have the **USE_CATALOG** privilege on the parent catalog and the
@@ -13577,9 +14994,7 @@ class RegisteredModelsAPI:
13577
14994
  new_name: Optional[str] = None,
13578
14995
  owner: Optional[str] = None,
13579
14996
  ) -> RegisteredModelInfo:
13580
- """Update a Registered Model.
13581
-
13582
- Updates the specified registered model.
14997
+ """Updates the specified registered model.
13583
14998
 
13584
14999
  The caller must be a metastore admin or an owner of the registered model. For the latter case, the
13585
15000
  caller must also be the owner or have the **USE_CATALOG** privilege on the parent catalog and the
@@ -13627,9 +15042,7 @@ class ResourceQuotasAPI:
13627
15042
  self._api = api_client
13628
15043
 
13629
15044
  def get_quota(self, parent_securable_type: str, parent_full_name: str, quota_name: str) -> GetQuotaResponse:
13630
- """Get information for a single resource quota.
13631
-
13632
- The GetQuota API returns usage information for a single resource quota, defined as a child-parent
15045
+ """The GetQuota API returns usage information for a single resource quota, defined as a child-parent
13633
15046
  pair. This API also refreshes the quota count if it is out of date. Refreshes are triggered
13634
15047
  asynchronously. The updated count might not be returned in the first call.
13635
15048
 
@@ -13657,9 +15070,7 @@ class ResourceQuotasAPI:
13657
15070
  def list_quotas(
13658
15071
  self, *, max_results: Optional[int] = None, page_token: Optional[str] = None
13659
15072
  ) -> Iterator[QuotaInfo]:
13660
- """List all resource quotas under a metastore.
13661
-
13662
- ListQuotas returns all quota values under the metastore. There are no SLAs on the freshness of the
15073
+ """ListQuotas returns all quota values under the metastore. There are no SLAs on the freshness of the
13663
15074
  counts returned. This API does not trigger a refresh of quota counts.
13664
15075
 
13665
15076
  :param max_results: int (optional)
@@ -13709,9 +15120,7 @@ class SchemasAPI:
13709
15120
  properties: Optional[Dict[str, str]] = None,
13710
15121
  storage_root: Optional[str] = None,
13711
15122
  ) -> SchemaInfo:
13712
- """Create a schema.
13713
-
13714
- Creates a new schema for catalog in the Metatastore. The caller must be a metastore admin, or have the
15123
+ """Creates a new schema for catalog in the Metatastore. The caller must be a metastore admin, or have the
13715
15124
  **CREATE_SCHEMA** privilege in the parent catalog.
13716
15125
 
13717
15126
  :param name: str
@@ -13747,9 +15156,7 @@ class SchemasAPI:
13747
15156
  return SchemaInfo.from_dict(res)
13748
15157
 
13749
15158
  def delete(self, full_name: str, *, force: Optional[bool] = None):
13750
- """Delete a schema.
13751
-
13752
- Deletes the specified schema from the parent catalog. The caller must be the owner of the schema or an
15159
+ """Deletes the specified schema from the parent catalog. The caller must be the owner of the schema or an
13753
15160
  owner of the parent catalog.
13754
15161
 
13755
15162
  :param full_name: str
@@ -13770,9 +15177,7 @@ class SchemasAPI:
13770
15177
  self._api.do("DELETE", f"/api/2.1/unity-catalog/schemas/{full_name}", query=query, headers=headers)
13771
15178
 
13772
15179
  def get(self, full_name: str, *, include_browse: Optional[bool] = None) -> SchemaInfo:
13773
- """Get a schema.
13774
-
13775
- Gets the specified schema within the metastore. The caller must be a metastore admin, the owner of the
15180
+ """Gets the specified schema within the metastore. The caller must be a metastore admin, the owner of the
13776
15181
  schema, or a user that has the **USE_SCHEMA** privilege on the schema.
13777
15182
 
13778
15183
  :param full_name: str
@@ -13802,9 +15207,7 @@ class SchemasAPI:
13802
15207
  max_results: Optional[int] = None,
13803
15208
  page_token: Optional[str] = None,
13804
15209
  ) -> Iterator[SchemaInfo]:
13805
- """List schemas.
13806
-
13807
- Gets an array of schemas for a catalog in the metastore. If the caller is the metastore admin or the
15210
+ """Gets an array of schemas for a catalog in the metastore. If the caller is the metastore admin or the
13808
15211
  owner of the parent catalog, all schemas for the catalog will be retrieved. Otherwise, only schemas
13809
15212
  owned by the caller (or for which the caller has the **USE_SCHEMA** privilege) will be retrieved.
13810
15213
  There is no guarantee of a specific ordering of the elements in the array.
@@ -13857,9 +15260,7 @@ class SchemasAPI:
13857
15260
  owner: Optional[str] = None,
13858
15261
  properties: Optional[Dict[str, str]] = None,
13859
15262
  ) -> SchemaInfo:
13860
- """Update a schema.
13861
-
13862
- Updates a schema for a catalog. The caller must be the owner of the schema or a metastore admin. If
15263
+ """Updates a schema for a catalog. The caller must be the owner of the schema or a metastore admin. If
13863
15264
  the caller is a metastore admin, only the __owner__ field can be changed in the update. If the
13864
15265
  __name__ field must be updated, the caller must be a metastore admin or have the **CREATE_SCHEMA**
13865
15266
  privilege on the parent catalog.
@@ -13927,12 +15328,14 @@ class StorageCredentialsAPI:
13927
15328
  read_only: Optional[bool] = None,
13928
15329
  skip_validation: Optional[bool] = None,
13929
15330
  ) -> StorageCredentialInfo:
13930
- """Create a storage credential.
15331
+ """Creates a new storage credential.
13931
15332
 
13932
- Creates a new storage credential.
15333
+ The caller must be a metastore admin or have the **CREATE_STORAGE_CREDENTIAL** privilege on the
15334
+ metastore.
13933
15335
 
13934
15336
  :param name: str
13935
- The credential name. The name must be unique within the metastore.
15337
+ The credential name. The name must be unique among storage and service credentials within the
15338
+ metastore.
13936
15339
  :param aws_iam_role: :class:`AwsIamRoleRequest` (optional)
13937
15340
  The AWS IAM role configuration.
13938
15341
  :param azure_managed_identity: :class:`AzureManagedIdentityRequest` (optional)
@@ -13946,7 +15349,8 @@ class StorageCredentialsAPI:
13946
15349
  :param databricks_gcp_service_account: :class:`DatabricksGcpServiceAccountRequest` (optional)
13947
15350
  The Databricks managed GCP service account configuration.
13948
15351
  :param read_only: bool (optional)
13949
- Whether the storage credential is only usable for read operations.
15352
+ Whether the credential is usable only for read operations. Only applicable when purpose is
15353
+ **STORAGE**.
13950
15354
  :param skip_validation: bool (optional)
13951
15355
  Supplying true to this argument skips validation of the created credential.
13952
15356
 
@@ -13980,15 +15384,14 @@ class StorageCredentialsAPI:
13980
15384
  return StorageCredentialInfo.from_dict(res)
13981
15385
 
13982
15386
  def delete(self, name: str, *, force: Optional[bool] = None):
13983
- """Delete a credential.
13984
-
13985
- Deletes a storage credential from the metastore. The caller must be an owner of the storage
15387
+ """Deletes a storage credential from the metastore. The caller must be an owner of the storage
13986
15388
  credential.
13987
15389
 
13988
15390
  :param name: str
13989
15391
  Name of the storage credential.
13990
15392
  :param force: bool (optional)
13991
- Force deletion even if there are dependent external locations or external tables.
15393
+ Force an update even if there are dependent external locations or external tables (when purpose is
15394
+ **STORAGE**) or dependent services (when purpose is **SERVICE**).
13992
15395
 
13993
15396
 
13994
15397
  """
@@ -14003,9 +15406,7 @@ class StorageCredentialsAPI:
14003
15406
  self._api.do("DELETE", f"/api/2.1/unity-catalog/storage-credentials/{name}", query=query, headers=headers)
14004
15407
 
14005
15408
  def get(self, name: str) -> StorageCredentialInfo:
14006
- """Get a credential.
14007
-
14008
- Gets a storage credential from the metastore. The caller must be a metastore admin, the owner of the
15409
+ """Gets a storage credential from the metastore. The caller must be a metastore admin, the owner of the
14009
15410
  storage credential, or have some permission on the storage credential.
14010
15411
 
14011
15412
  :param name: str
@@ -14024,9 +15425,7 @@ class StorageCredentialsAPI:
14024
15425
  def list(
14025
15426
  self, *, max_results: Optional[int] = None, page_token: Optional[str] = None
14026
15427
  ) -> Iterator[StorageCredentialInfo]:
14027
- """List credentials.
14028
-
14029
- Gets an array of storage credentials (as __StorageCredentialInfo__ objects). The array is limited to
15428
+ """Gets an array of storage credentials (as __StorageCredentialInfo__ objects). The array is limited to
14030
15429
  only those storage credentials the caller has permission to access. If the caller is a metastore
14031
15430
  admin, retrieval of credentials is unrestricted. There is no guarantee of a specific ordering of the
14032
15431
  elements in the array.
@@ -14052,8 +15451,6 @@ class StorageCredentialsAPI:
14052
15451
  "Accept": "application/json",
14053
15452
  }
14054
15453
 
14055
- if "max_results" not in query:
14056
- query["max_results"] = 0
14057
15454
  while True:
14058
15455
  json = self._api.do("GET", "/api/2.1/unity-catalog/storage-credentials", query=query, headers=headers)
14059
15456
  if "storage_credentials" in json:
@@ -14080,9 +15477,10 @@ class StorageCredentialsAPI:
14080
15477
  read_only: Optional[bool] = None,
14081
15478
  skip_validation: Optional[bool] = None,
14082
15479
  ) -> StorageCredentialInfo:
14083
- """Update a credential.
15480
+ """Updates a storage credential on the metastore.
14084
15481
 
14085
- Updates a storage credential on the metastore.
15482
+ The caller must be the owner of the storage credential or a metastore admin. If the caller is a
15483
+ metastore admin, only the **owner** field can be changed.
14086
15484
 
14087
15485
  :param name: str
14088
15486
  Name of the storage credential.
@@ -14101,12 +15499,14 @@ class StorageCredentialsAPI:
14101
15499
  :param force: bool (optional)
14102
15500
  Force update even if there are dependent external locations or external tables.
14103
15501
  :param isolation_mode: :class:`IsolationMode` (optional)
15502
+ Whether the current securable is accessible from all workspaces or a specific set of workspaces.
14104
15503
  :param new_name: str (optional)
14105
15504
  New name for the storage credential.
14106
15505
  :param owner: str (optional)
14107
15506
  Username of current owner of credential.
14108
15507
  :param read_only: bool (optional)
14109
- Whether the storage credential is only usable for read operations.
15508
+ Whether the credential is usable only for read operations. Only applicable when purpose is
15509
+ **STORAGE**.
14110
15510
  :param skip_validation: bool (optional)
14111
15511
  Supplying true to this argument skips validation of the updated credential.
14112
15512
 
@@ -14158,9 +15558,7 @@ class StorageCredentialsAPI:
14158
15558
  storage_credential_name: Optional[str] = None,
14159
15559
  url: Optional[str] = None,
14160
15560
  ) -> ValidateStorageCredentialResponse:
14161
- """Validate a storage credential.
14162
-
14163
- Validates a storage credential. At least one of __external_location_name__ and __url__ need to be
15561
+ """Validates a storage credential. At least one of __external_location_name__ and __url__ need to be
14164
15562
  provided. If only one of them is provided, it will be used for validation. And if both are provided,
14165
15563
  the __url__ will be used for validation, and __external_location_name__ will be ignored when checking
14166
15564
  overlapping urls.
@@ -14185,7 +15583,7 @@ class StorageCredentialsAPI:
14185
15583
  :param read_only: bool (optional)
14186
15584
  Whether the storage credential is only usable for read operations.
14187
15585
  :param storage_credential_name: str (optional)
14188
- The name of the storage credential to validate.
15586
+ Required. The name of an existing credential or long-lived cloud credential to validate.
14189
15587
  :param url: str (optional)
14190
15588
  The external location url to validate.
14191
15589
 
@@ -14227,9 +15625,7 @@ class SystemSchemasAPI:
14227
15625
  self._api = api_client
14228
15626
 
14229
15627
  def disable(self, metastore_id: str, schema_name: str):
14230
- """Disable a system schema.
14231
-
14232
- Disables the system schema and removes it from the system catalog. The caller must be an account admin
15628
+ """Disables the system schema and removes it from the system catalog. The caller must be an account admin
14233
15629
  or a metastore admin.
14234
15630
 
14235
15631
  :param metastore_id: str
@@ -14249,9 +15645,7 @@ class SystemSchemasAPI:
14249
15645
  )
14250
15646
 
14251
15647
  def enable(self, metastore_id: str, schema_name: str, *, catalog_name: Optional[str] = None):
14252
- """Enable a system schema.
14253
-
14254
- Enables the system schema and adds it to the system catalog. The caller must be an account admin or a
15648
+ """Enables the system schema and adds it to the system catalog. The caller must be an account admin or a
14255
15649
  metastore admin.
14256
15650
 
14257
15651
  :param metastore_id: str
@@ -14281,9 +15675,7 @@ class SystemSchemasAPI:
14281
15675
  def list(
14282
15676
  self, metastore_id: str, *, max_results: Optional[int] = None, page_token: Optional[str] = None
14283
15677
  ) -> Iterator[SystemSchemaInfo]:
14284
- """List system schemas.
14285
-
14286
- Gets an array of system schemas for a metastore. The caller must be an account admin or a metastore
15678
+ """Gets an array of system schemas for a metastore. The caller must be an account admin or a metastore
14287
15679
  admin.
14288
15680
 
14289
15681
  :param metastore_id: str
@@ -14336,9 +15728,7 @@ class TableConstraintsAPI:
14336
15728
  self._api = api_client
14337
15729
 
14338
15730
  def create(self, full_name_arg: str, constraint: TableConstraint) -> TableConstraint:
14339
- """Create a table constraint.
14340
-
14341
- Creates a new table constraint.
15731
+ """Creates a new table constraint.
14342
15732
 
14343
15733
  For the table constraint creation to succeed, the user must satisfy both of these conditions: - the
14344
15734
  user must have the **USE_CATALOG** privilege on the table's parent catalog, the **USE_SCHEMA**
@@ -14350,8 +15740,6 @@ class TableConstraintsAPI:
14350
15740
  :param full_name_arg: str
14351
15741
  The full name of the table referenced by the constraint.
14352
15742
  :param constraint: :class:`TableConstraint`
14353
- A table constraint, as defined by *one* of the following fields being set:
14354
- __primary_key_constraint__, __foreign_key_constraint__, __named_table_constraint__.
14355
15743
 
14356
15744
  :returns: :class:`TableConstraint`
14357
15745
  """
@@ -14369,9 +15757,7 @@ class TableConstraintsAPI:
14369
15757
  return TableConstraint.from_dict(res)
14370
15758
 
14371
15759
  def delete(self, full_name: str, constraint_name: str, cascade: bool):
14372
- """Delete a table constraint.
14373
-
14374
- Deletes a table constraint.
15760
+ """Deletes a table constraint.
14375
15761
 
14376
15762
  For the table constraint deletion to succeed, the user must satisfy both of these conditions: - the
14377
15763
  user must have the **USE_CATALOG** privilege on the table's parent catalog, the **USE_SCHEMA**
@@ -14417,9 +15803,7 @@ class TablesAPI:
14417
15803
  self._api = api_client
14418
15804
 
14419
15805
  def delete(self, full_name: str):
14420
- """Delete a table.
14421
-
14422
- Deletes a table from the specified parent catalog and schema. The caller must be the owner of the
15806
+ """Deletes a table from the specified parent catalog and schema. The caller must be the owner of the
14423
15807
  parent catalog, have the **USE_CATALOG** privilege on the parent catalog and be the owner of the
14424
15808
  parent schema, or be the owner of the table and have the **USE_CATALOG** privilege on the parent
14425
15809
  catalog and the **USE_SCHEMA** privilege on the parent schema.
@@ -14437,9 +15821,7 @@ class TablesAPI:
14437
15821
  self._api.do("DELETE", f"/api/2.1/unity-catalog/tables/{full_name}", headers=headers)
14438
15822
 
14439
15823
  def exists(self, full_name: str) -> TableExistsResponse:
14440
- """Get boolean reflecting if table exists.
14441
-
14442
- Gets if a table exists in the metastore for a specific catalog and schema. The caller must satisfy one
15824
+ """Gets if a table exists in the metastore for a specific catalog and schema. The caller must satisfy one
14443
15825
  of the following requirements: * Be a metastore admin * Be the owner of the parent catalog * Be the
14444
15826
  owner of the parent schema and have the USE_CATALOG privilege on the parent catalog * Have the
14445
15827
  **USE_CATALOG** privilege on the parent catalog and the **USE_SCHEMA** privilege on the parent schema,
@@ -14467,9 +15849,7 @@ class TablesAPI:
14467
15849
  include_delta_metadata: Optional[bool] = None,
14468
15850
  include_manifest_capabilities: Optional[bool] = None,
14469
15851
  ) -> TableInfo:
14470
- """Get a table.
14471
-
14472
- Gets a table from the metastore for a specific catalog and schema. The caller must satisfy one of the
15852
+ """Gets a table from the metastore for a specific catalog and schema. The caller must satisfy one of the
14473
15853
  following requirements: * Be a metastore admin * Be the owner of the parent catalog * Be the owner of
14474
15854
  the parent schema and have the USE_CATALOG privilege on the parent catalog * Have the **USE_CATALOG**
14475
15855
  privilege on the parent catalog and the **USE_SCHEMA** privilege on the parent schema, and either be
@@ -14479,11 +15859,11 @@ class TablesAPI:
14479
15859
  Full name of the table.
14480
15860
  :param include_browse: bool (optional)
14481
15861
  Whether to include tables in the response for which the principal can only access selective metadata
14482
- for
15862
+ for.
14483
15863
  :param include_delta_metadata: bool (optional)
14484
15864
  Whether delta metadata should be included in the response.
14485
15865
  :param include_manifest_capabilities: bool (optional)
14486
- Whether to include a manifest containing capabilities the table has.
15866
+ Whether to include a manifest containing table capabilities in the response.
14487
15867
 
14488
15868
  :returns: :class:`TableInfo`
14489
15869
  """
@@ -14508,7 +15888,6 @@ class TablesAPI:
14508
15888
  schema_name: str,
14509
15889
  *,
14510
15890
  include_browse: Optional[bool] = None,
14511
- include_delta_metadata: Optional[bool] = None,
14512
15891
  include_manifest_capabilities: Optional[bool] = None,
14513
15892
  max_results: Optional[int] = None,
14514
15893
  omit_columns: Optional[bool] = None,
@@ -14516,9 +15895,7 @@ class TablesAPI:
14516
15895
  omit_username: Optional[bool] = None,
14517
15896
  page_token: Optional[str] = None,
14518
15897
  ) -> Iterator[TableInfo]:
14519
- """List tables.
14520
-
14521
- Gets an array of all tables for the current metastore under the parent catalog and schema. The caller
15898
+ """Gets an array of all tables for the current metastore under the parent catalog and schema. The caller
14522
15899
  must be a metastore admin or an owner of (or have the **SELECT** privilege on) the table. For the
14523
15900
  latter case, the caller must also be the owner or have the **USE_CATALOG** privilege on the parent
14524
15901
  catalog and the **USE_SCHEMA** privilege on the parent schema. There is no guarantee of a specific
@@ -14530,11 +15907,9 @@ class TablesAPI:
14530
15907
  Parent schema of tables.
14531
15908
  :param include_browse: bool (optional)
14532
15909
  Whether to include tables in the response for which the principal can only access selective metadata
14533
- for
14534
- :param include_delta_metadata: bool (optional)
14535
- Whether delta metadata should be included in the response.
15910
+ for.
14536
15911
  :param include_manifest_capabilities: bool (optional)
14537
- Whether to include a manifest containing capabilities the table has.
15912
+ Whether to include a manifest containing table capabilities in the response.
14538
15913
  :param max_results: int (optional)
14539
15914
  Maximum number of tables to return. If not set, all the tables are returned (not recommended). -
14540
15915
  when set to a value greater than 0, the page length is the minimum of this value and a server
@@ -14558,8 +15933,6 @@ class TablesAPI:
14558
15933
  query["catalog_name"] = catalog_name
14559
15934
  if include_browse is not None:
14560
15935
  query["include_browse"] = include_browse
14561
- if include_delta_metadata is not None:
14562
- query["include_delta_metadata"] = include_delta_metadata
14563
15936
  if include_manifest_capabilities is not None:
14564
15937
  query["include_manifest_capabilities"] = include_manifest_capabilities
14565
15938
  if max_results is not None:
@@ -14578,8 +15951,6 @@ class TablesAPI:
14578
15951
  "Accept": "application/json",
14579
15952
  }
14580
15953
 
14581
- if "max_results" not in query:
14582
- query["max_results"] = 0
14583
15954
  while True:
14584
15955
  json = self._api.do("GET", "/api/2.1/unity-catalog/tables", query=query, headers=headers)
14585
15956
  if "tables" in json:
@@ -14599,9 +15970,7 @@ class TablesAPI:
14599
15970
  schema_name_pattern: Optional[str] = None,
14600
15971
  table_name_pattern: Optional[str] = None,
14601
15972
  ) -> Iterator[TableSummary]:
14602
- """List table summaries.
14603
-
14604
- Gets an array of summaries for tables for a schema and catalog within the metastore. The table
15973
+ """Gets an array of summaries for tables for a schema and catalog within the metastore. The table
14605
15974
  summaries returned are either:
14606
15975
 
14607
15976
  * summaries for tables (within the current metastore and parent catalog and schema), when the user is
@@ -14615,7 +15984,7 @@ class TablesAPI:
14615
15984
  :param catalog_name: str
14616
15985
  Name of parent catalog for tables of interest.
14617
15986
  :param include_manifest_capabilities: bool (optional)
14618
- Whether to include a manifest containing capabilities the table has.
15987
+ Whether to include a manifest containing table capabilities in the response.
14619
15988
  :param max_results: int (optional)
14620
15989
  Maximum number of summaries for tables to return. If not set, the page length is set to a server
14621
15990
  configured value (10000, as of 1/5/2024). - when set to a value greater than 0, the page length is
@@ -14649,8 +16018,6 @@ class TablesAPI:
14649
16018
  "Accept": "application/json",
14650
16019
  }
14651
16020
 
14652
- if "max_results" not in query:
14653
- query["max_results"] = 0
14654
16021
  while True:
14655
16022
  json = self._api.do("GET", "/api/2.1/unity-catalog/table-summaries", query=query, headers=headers)
14656
16023
  if "tables" in json:
@@ -14661,9 +16028,7 @@ class TablesAPI:
14661
16028
  query["page_token"] = json["next_page_token"]
14662
16029
 
14663
16030
  def update(self, full_name: str, *, owner: Optional[str] = None):
14664
- """Update a table owner.
14665
-
14666
- Change the owner of the table. The caller must be the owner of the parent catalog, have the
16031
+ """Change the owner of the table. The caller must be the owner of the parent catalog, have the
14667
16032
  **USE_CATALOG** privilege on the parent catalog and be the owner of the parent schema, or be the owner
14668
16033
  of the table and have the **USE_CATALOG** privilege on the parent catalog and the **USE_SCHEMA**
14669
16034
  privilege on the parent schema.
@@ -14671,6 +16036,7 @@ class TablesAPI:
14671
16036
  :param full_name: str
14672
16037
  Full name of the table.
14673
16038
  :param owner: str (optional)
16039
+ Username of current owner of table.
14674
16040
 
14675
16041
 
14676
16042
  """
@@ -14705,9 +16071,7 @@ class TemporaryTableCredentialsAPI:
14705
16071
  def generate_temporary_table_credentials(
14706
16072
  self, *, operation: Optional[TableOperation] = None, table_id: Optional[str] = None
14707
16073
  ) -> GenerateTemporaryTableCredentialResponse:
14708
- """Generate a temporary table credential.
14709
-
14710
- Get a short-lived credential for directly accessing the table data on cloud storage. The metastore
16074
+ """Get a short-lived credential for directly accessing the table data on cloud storage. The metastore
14711
16075
  must have external_access_enabled flag set to true (default false). The caller must have
14712
16076
  EXTERNAL_USE_SCHEMA privilege on the parent schema and this privilege can only be granted by catalog
14713
16077
  owners.
@@ -14755,9 +16119,7 @@ class VolumesAPI:
14755
16119
  comment: Optional[str] = None,
14756
16120
  storage_location: Optional[str] = None,
14757
16121
  ) -> VolumeInfo:
14758
- """Create a Volume.
14759
-
14760
- Creates a new volume.
16122
+ """Creates a new volume.
14761
16123
 
14762
16124
  The user could create either an external volume or a managed volume. An external volume will be
14763
16125
  created in the specified external location, while a managed volume will be located in the default
@@ -14780,11 +16142,6 @@ class VolumesAPI:
14780
16142
  :param name: str
14781
16143
  The name of the volume
14782
16144
  :param volume_type: :class:`VolumeType`
14783
- The type of the volume. An external volume is located in the specified external location. A managed
14784
- volume is located in the default location which is specified by the parent schema, or the parent
14785
- catalog, or the Metastore. [Learn more]
14786
-
14787
- [Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external
14788
16145
  :param comment: str (optional)
14789
16146
  The comment attached to the volume
14790
16147
  :param storage_location: str (optional)
@@ -14814,9 +16171,7 @@ class VolumesAPI:
14814
16171
  return VolumeInfo.from_dict(res)
14815
16172
 
14816
16173
  def delete(self, name: str):
14817
- """Delete a Volume.
14818
-
14819
- Deletes a volume from the specified parent catalog and schema.
16174
+ """Deletes a volume from the specified parent catalog and schema.
14820
16175
 
14821
16176
  The caller must be a metastore admin or an owner of the volume. For the latter case, the caller must
14822
16177
  also be the owner or have the **USE_CATALOG** privilege on the parent catalog and the **USE_SCHEMA**
@@ -14841,9 +16196,7 @@ class VolumesAPI:
14841
16196
  max_results: Optional[int] = None,
14842
16197
  page_token: Optional[str] = None,
14843
16198
  ) -> Iterator[VolumeInfo]:
14844
- """List Volumes.
14845
-
14846
- Gets an array of volumes for the current metastore under the parent catalog and schema.
16199
+ """Gets an array of volumes for the current metastore under the parent catalog and schema.
14847
16200
 
14848
16201
  The returned volumes are filtered based on the privileges of the calling user. For example, the
14849
16202
  metastore admin is able to list all the volumes. A regular user needs to be the owner or have the
@@ -14904,9 +16257,7 @@ class VolumesAPI:
14904
16257
  query["page_token"] = json["next_page_token"]
14905
16258
 
14906
16259
  def read(self, name: str, *, include_browse: Optional[bool] = None) -> VolumeInfo:
14907
- """Get a Volume.
14908
-
14909
- Gets a volume from the metastore for a specific catalog and schema.
16260
+ """Gets a volume from the metastore for a specific catalog and schema.
14910
16261
 
14911
16262
  The caller must be a metastore admin or an owner of (or have the **READ VOLUME** privilege on) the
14912
16263
  volume. For the latter case, the caller must also be the owner or have the **USE_CATALOG** privilege
@@ -14934,9 +16285,7 @@ class VolumesAPI:
14934
16285
  def update(
14935
16286
  self, name: str, *, comment: Optional[str] = None, new_name: Optional[str] = None, owner: Optional[str] = None
14936
16287
  ) -> VolumeInfo:
14937
- """Update a Volume.
14938
-
14939
- Updates the specified volume under the specified parent catalog and schema.
16288
+ """Updates the specified volume under the specified parent catalog and schema.
14940
16289
 
14941
16290
  The caller must be a metastore admin or an owner of the volume. For the latter case, the caller must
14942
16291
  also be the owner or have the **USE_CATALOG** privilege on the parent catalog and the **USE_SCHEMA**
@@ -14991,9 +16340,7 @@ class WorkspaceBindingsAPI:
14991
16340
  self._api = api_client
14992
16341
 
14993
16342
  def get(self, name: str) -> GetCatalogWorkspaceBindingsResponse:
14994
- """Get catalog workspace bindings.
14995
-
14996
- Gets workspace bindings of the catalog. The caller must be a metastore admin or an owner of the
16343
+ """Gets workspace bindings of the catalog. The caller must be a metastore admin or an owner of the
14997
16344
  catalog.
14998
16345
 
14999
16346
  :param name: str
@@ -15017,9 +16364,7 @@ class WorkspaceBindingsAPI:
15017
16364
  max_results: Optional[int] = None,
15018
16365
  page_token: Optional[str] = None,
15019
16366
  ) -> Iterator[WorkspaceBinding]:
15020
- """Get securable workspace bindings.
15021
-
15022
- Gets workspace bindings of the securable. The caller must be a metastore admin or an owner of the
16367
+ """Gets workspace bindings of the securable. The caller must be a metastore admin or an owner of the
15023
16368
  securable.
15024
16369
 
15025
16370
  :param securable_type: str
@@ -15068,9 +16413,7 @@ class WorkspaceBindingsAPI:
15068
16413
  assign_workspaces: Optional[List[int]] = None,
15069
16414
  unassign_workspaces: Optional[List[int]] = None,
15070
16415
  ) -> UpdateCatalogWorkspaceBindingsResponse:
15071
- """Update catalog workspace bindings.
15072
-
15073
- Updates workspace bindings of the catalog. The caller must be a metastore admin or an owner of the
16416
+ """Updates workspace bindings of the catalog. The caller must be a metastore admin or an owner of the
15074
16417
  catalog.
15075
16418
 
15076
16419
  :param name: str
@@ -15105,9 +16448,7 @@ class WorkspaceBindingsAPI:
15105
16448
  add: Optional[List[WorkspaceBinding]] = None,
15106
16449
  remove: Optional[List[WorkspaceBinding]] = None,
15107
16450
  ) -> UpdateWorkspaceBindingsResponse:
15108
- """Update securable workspace bindings.
15109
-
15110
- Updates workspace bindings of the securable. The caller must be a metastore admin or an owner of the
16451
+ """Updates workspace bindings of the securable. The caller must be a metastore admin or an owner of the
15111
16452
  securable.
15112
16453
 
15113
16454
  :param securable_type: str