databricks-sdk 0.57.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 (30) hide show
  1. databricks/sdk/__init__.py +25 -4
  2. databricks/sdk/service/aibuilder.py +0 -36
  3. databricks/sdk/service/apps.py +1 -3
  4. databricks/sdk/service/billing.py +53 -23
  5. databricks/sdk/service/catalog.py +1692 -150
  6. databricks/sdk/service/cleanrooms.py +3 -22
  7. databricks/sdk/service/compute.py +245 -322
  8. databricks/sdk/service/dashboards.py +129 -162
  9. databricks/sdk/service/database.py +612 -97
  10. databricks/sdk/service/iam.py +3 -3
  11. databricks/sdk/service/jobs.py +6 -129
  12. databricks/sdk/service/marketplace.py +3 -2
  13. databricks/sdk/service/ml.py +713 -262
  14. databricks/sdk/service/oauth2.py +0 -1
  15. databricks/sdk/service/pipelines.py +12 -29
  16. databricks/sdk/service/provisioning.py +7 -125
  17. databricks/sdk/service/qualitymonitorv2.py +0 -18
  18. databricks/sdk/service/serving.py +39 -13
  19. databricks/sdk/service/settings.py +11 -128
  20. databricks/sdk/service/sharing.py +3 -9
  21. databricks/sdk/service/sql.py +94 -74
  22. databricks/sdk/service/vectorsearch.py +0 -19
  23. databricks/sdk/service/workspace.py +2 -6
  24. databricks/sdk/version.py +1 -1
  25. {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/METADATA +1 -1
  26. {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/RECORD +30 -30
  27. {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/WHEEL +0 -0
  28. {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/licenses/LICENSE +0 -0
  29. {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/licenses/NOTICE +0 -0
  30. {databricks_sdk-0.57.0.dist-info → databricks_sdk-0.58.0.dist-info}/top_level.txt +0 -0
@@ -598,7 +598,7 @@ class AwsSqsQueue:
598
598
 
599
599
  queue_url: Optional[str] = None
600
600
  """The AQS queue url in the format https://sqs.{region}.amazonaws.com/{account id}/{queue name}
601
- REQUIRED for provided_sqs."""
601
+ Required for provided_sqs."""
602
602
 
603
603
  def as_dict(self) -> dict:
604
604
  """Serializes the AwsSqsQueue into a dictionary suitable for use as a JSON request body."""
@@ -803,15 +803,15 @@ class AzureQueueStorage:
803
803
 
804
804
  queue_url: Optional[str] = None
805
805
  """The AQS queue url in the format https://{storage account}.queue.core.windows.net/{queue name}
806
- REQUIRED for provided_aqs."""
806
+ Required for provided_aqs."""
807
807
 
808
808
  resource_group: Optional[str] = None
809
809
  """The resource group for the queue, event grid subscription, and external location storage
810
- account. ONLY REQUIRED for locations with a service principal storage credential"""
810
+ account. Only required for locations with a service principal storage credential"""
811
811
 
812
812
  subscription_id: Optional[str] = None
813
- """OPTIONAL: The subscription id for the queue, event grid subscription, and external location
814
- 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"""
815
815
 
816
816
  def as_dict(self) -> dict:
817
817
  """Serializes the AzureQueueStorage into a dictionary suitable for use as a JSON request body."""
@@ -948,7 +948,6 @@ class CatalogInfo:
948
948
  through the BROWSE privilege when include_browse is enabled in the request."""
949
949
 
950
950
  catalog_type: Optional[CatalogType] = None
951
- """The type of the catalog."""
952
951
 
953
952
  comment: Optional[str] = None
954
953
  """User-provided free-form text description."""
@@ -994,10 +993,8 @@ class CatalogInfo:
994
993
  A Delta Sharing catalog is a catalog that is based on a Delta share on a remote sharing server."""
995
994
 
996
995
  provisioning_info: Optional[ProvisioningInfo] = None
997
- """Status of an asynchronously provisioned resource."""
998
996
 
999
997
  securable_type: Optional[SecurableType] = None
1000
- """The type of Unity Catalog securable."""
1001
998
 
1002
999
  share_name: Optional[str] = None
1003
1000
  """The name of the share under the share provider."""
@@ -1163,7 +1160,6 @@ class CatalogType(Enum):
1163
1160
  MANAGED_CATALOG = "MANAGED_CATALOG"
1164
1161
  MANAGED_ONLINE_CATALOG = "MANAGED_ONLINE_CATALOG"
1165
1162
  SYSTEM_CATALOG = "SYSTEM_CATALOG"
1166
- UNKNOWN_CATALOG_TYPE = "UNKNOWN_CATALOG_TYPE"
1167
1163
 
1168
1164
 
1169
1165
  @dataclass
@@ -1359,6 +1355,36 @@ class ColumnMask:
1359
1355
  return cls(function_name=d.get("function_name", None), using_column_names=d.get("using_column_names", None))
1360
1356
 
1361
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
+
1362
1388
  class ColumnTypeName(Enum):
1363
1389
 
1364
1390
  ARRAY = "ARRAY"
@@ -1387,6 +1413,33 @@ class ColumnTypeName(Enum):
1387
1413
  VARIANT = "VARIANT"
1388
1414
 
1389
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
+
1390
1443
  @dataclass
1391
1444
  class ConnectionInfo:
1392
1445
  comment: Optional[str] = None
@@ -1426,13 +1479,11 @@ class ConnectionInfo:
1426
1479
  """A map of key-value properties attached to the securable."""
1427
1480
 
1428
1481
  provisioning_info: Optional[ProvisioningInfo] = None
1429
- """Status of an asynchronously provisioned resource."""
1430
1482
 
1431
1483
  read_only: Optional[bool] = None
1432
1484
  """If the connection is read only."""
1433
1485
 
1434
1486
  securable_type: Optional[SecurableType] = None
1435
- """The type of Unity Catalog securable."""
1436
1487
 
1437
1488
  updated_at: Optional[int] = None
1438
1489
  """Time at which this connection was updated, in epoch milliseconds."""
@@ -1551,7 +1602,7 @@ class ConnectionInfo:
1551
1602
 
1552
1603
 
1553
1604
  class ConnectionType(Enum):
1554
- """Next Id: 33"""
1605
+ """Next Id: 36"""
1555
1606
 
1556
1607
  BIGQUERY = "BIGQUERY"
1557
1608
  DATABRICKS = "DATABRICKS"
@@ -1883,10 +1934,9 @@ class CreateExternalLocation:
1883
1934
  """User-provided free-form text description."""
1884
1935
 
1885
1936
  enable_file_events: Optional[bool] = None
1886
- """[Create:OPT Update:OPT] Whether to enable file events on this external location."""
1937
+ """Whether to enable file events on this external location."""
1887
1938
 
1888
1939
  encryption_details: Optional[EncryptionDetails] = None
1889
- """Encryption options that apply to clients connecting to cloud storage."""
1890
1940
 
1891
1941
  fallback: Optional[bool] = None
1892
1942
  """Indicates whether fallback mode is enabled for this external location. When fallback mode is
@@ -1894,7 +1944,7 @@ class CreateExternalLocation:
1894
1944
  sufficient."""
1895
1945
 
1896
1946
  file_event_queue: Optional[FileEventQueue] = None
1897
- """[Create:OPT Update:OPT] File event queue settings."""
1947
+ """File event queue settings."""
1898
1948
 
1899
1949
  read_only: Optional[bool] = None
1900
1950
  """Indicates whether the external location is read-only."""
@@ -2492,6 +2542,65 @@ class CreateRegisteredModelRequest:
2492
2542
  )
2493
2543
 
2494
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
+
2495
2604
  @dataclass
2496
2605
  class CreateResponse:
2497
2606
  def as_dict(self) -> dict:
@@ -2670,8 +2779,6 @@ class CreateTableConstraint:
2670
2779
  """The full name of the table referenced by the constraint."""
2671
2780
 
2672
2781
  constraint: TableConstraint
2673
- """A table constraint, as defined by *one* of the following fields being set:
2674
- __primary_key_constraint__, __foreign_key_constraint__, __named_table_constraint__."""
2675
2782
 
2676
2783
  def as_dict(self) -> dict:
2677
2784
  """Serializes the CreateTableConstraint into a dictionary suitable for use as a JSON request body."""
@@ -2709,11 +2816,6 @@ class CreateVolumeRequestContent:
2709
2816
  """The name of the volume"""
2710
2817
 
2711
2818
  volume_type: VolumeType
2712
- """The type of the volume. An external volume is located in the specified external location. A
2713
- managed volume is located in the default location which is specified by the parent schema, or
2714
- the parent catalog, or the Metastore. [Learn more]
2715
-
2716
- [Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external"""
2717
2819
 
2718
2820
  comment: Optional[str] = None
2719
2821
  """The comment attached to the volume"""
@@ -2768,6 +2870,33 @@ class CreateVolumeRequestContent:
2768
2870
  )
2769
2871
 
2770
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
+
2771
2900
  @dataclass
2772
2901
  class CredentialInfo:
2773
2902
  aws_iam_role: Optional[AwsIamRole] = None
@@ -2941,8 +3070,9 @@ class CredentialPurpose(Enum):
2941
3070
 
2942
3071
 
2943
3072
  class CredentialType(Enum):
2944
- """Next Id: 12"""
3073
+ """Next Id: 13"""
2945
3074
 
3075
+ ANY_STATIC_CREDENTIAL = "ANY_STATIC_CREDENTIAL"
2946
3076
  BEARER_TOKEN = "BEARER_TOKEN"
2947
3077
  OAUTH_ACCESS_TOKEN = "OAUTH_ACCESS_TOKEN"
2948
3078
  OAUTH_M2M = "OAUTH_M2M"
@@ -2996,21 +3126,28 @@ class DataSourceFormat(Enum):
2996
3126
  BIGQUERY_FORMAT = "BIGQUERY_FORMAT"
2997
3127
  CSV = "CSV"
2998
3128
  DATABRICKS_FORMAT = "DATABRICKS_FORMAT"
3129
+ DATABRICKS_ROW_STORE_FORMAT = "DATABRICKS_ROW_STORE_FORMAT"
2999
3130
  DELTA = "DELTA"
3000
3131
  DELTASHARING = "DELTASHARING"
3001
- HIVE_CUSTOM = "HIVE_CUSTOM"
3002
- HIVE_SERDE = "HIVE_SERDE"
3132
+ DELTA_UNIFORM_HUDI = "DELTA_UNIFORM_HUDI"
3133
+ DELTA_UNIFORM_ICEBERG = "DELTA_UNIFORM_ICEBERG"
3134
+ HIVE = "HIVE"
3135
+ ICEBERG = "ICEBERG"
3003
3136
  JSON = "JSON"
3137
+ MONGODB_FORMAT = "MONGODB_FORMAT"
3004
3138
  MYSQL_FORMAT = "MYSQL_FORMAT"
3005
3139
  NETSUITE_FORMAT = "NETSUITE_FORMAT"
3140
+ ORACLE_FORMAT = "ORACLE_FORMAT"
3006
3141
  ORC = "ORC"
3007
3142
  PARQUET = "PARQUET"
3008
3143
  POSTGRESQL_FORMAT = "POSTGRESQL_FORMAT"
3009
3144
  REDSHIFT_FORMAT = "REDSHIFT_FORMAT"
3145
+ SALESFORCE_DATA_CLOUD_FORMAT = "SALESFORCE_DATA_CLOUD_FORMAT"
3010
3146
  SALESFORCE_FORMAT = "SALESFORCE_FORMAT"
3011
3147
  SNOWFLAKE_FORMAT = "SNOWFLAKE_FORMAT"
3012
3148
  SQLDW_FORMAT = "SQLDW_FORMAT"
3013
3149
  SQLSERVER_FORMAT = "SQLSERVER_FORMAT"
3150
+ TERADATA_FORMAT = "TERADATA_FORMAT"
3014
3151
  TEXT = "TEXT"
3015
3152
  UNITY_CATALOG = "UNITY_CATALOG"
3016
3153
  VECTOR_INDEX_FORMAT = "VECTOR_INDEX_FORMAT"
@@ -3152,6 +3289,49 @@ class DeleteCredentialResponse:
3152
3289
  return cls()
3153
3290
 
3154
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
+
3155
3335
  @dataclass
3156
3336
  class DeleteResponse:
3157
3337
  def as_dict(self) -> dict:
@@ -3206,18 +3386,24 @@ class DeltaSharingScopeEnum(Enum):
3206
3386
 
3207
3387
  @dataclass
3208
3388
  class Dependency:
3209
- """A dependency of a SQL object. Either the __table__ field or the __function__ field must be
3210
- 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
3211
3395
 
3212
3396
  function: Optional[FunctionDependency] = None
3213
- """A function that is dependent on a SQL object."""
3214
3397
 
3215
3398
  table: Optional[TableDependency] = None
3216
- """A table that is dependent on a SQL object."""
3217
3399
 
3218
3400
  def as_dict(self) -> dict:
3219
3401
  """Serializes the Dependency into a dictionary suitable for use as a JSON request body."""
3220
3402
  body = {}
3403
+ if self.connection:
3404
+ body["connection"] = self.connection.as_dict()
3405
+ if self.credential:
3406
+ body["credential"] = self.credential.as_dict()
3221
3407
  if self.function:
3222
3408
  body["function"] = self.function.as_dict()
3223
3409
  if self.table:
@@ -3227,6 +3413,10 @@ class Dependency:
3227
3413
  def as_shallow_dict(self) -> dict:
3228
3414
  """Serializes the Dependency into a shallow dictionary of its immediate attributes."""
3229
3415
  body = {}
3416
+ if self.connection:
3417
+ body["connection"] = self.connection
3418
+ if self.credential:
3419
+ body["credential"] = self.credential
3230
3420
  if self.function:
3231
3421
  body["function"] = self.function
3232
3422
  if self.table:
@@ -3237,7 +3427,10 @@ class Dependency:
3237
3427
  def from_dict(cls, d: Dict[str, Any]) -> Dependency:
3238
3428
  """Deserializes the Dependency from a dictionary."""
3239
3429
  return cls(
3240
- 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),
3241
3434
  )
3242
3435
 
3243
3436
 
@@ -3493,58 +3686,596 @@ class EnableRequest:
3493
3686
  return body
3494
3687
 
3495
3688
  @classmethod
3496
- def from_dict(cls, d: Dict[str, Any]) -> EnableRequest:
3497
- """Deserializes the EnableRequest from a dictionary."""
3689
+ def from_dict(cls, d: Dict[str, Any]) -> EnableRequest:
3690
+ """Deserializes the EnableRequest from a dictionary."""
3691
+ return cls(
3692
+ catalog_name=d.get("catalog_name", None),
3693
+ metastore_id=d.get("metastore_id", None),
3694
+ schema_name=d.get("schema_name", None),
3695
+ )
3696
+
3697
+
3698
+ @dataclass
3699
+ class EnableResponse:
3700
+ def as_dict(self) -> dict:
3701
+ """Serializes the EnableResponse into a dictionary suitable for use as a JSON request body."""
3702
+ body = {}
3703
+ return body
3704
+
3705
+ def as_shallow_dict(self) -> dict:
3706
+ """Serializes the EnableResponse into a shallow dictionary of its immediate attributes."""
3707
+ body = {}
3708
+ return body
3709
+
3710
+ @classmethod
3711
+ def from_dict(cls, d: Dict[str, Any]) -> EnableResponse:
3712
+ """Deserializes the EnableResponse from a dictionary."""
3713
+ return cls()
3714
+
3715
+
3716
+ @dataclass
3717
+ class EncryptionDetails:
3718
+ """Encryption options that apply to clients connecting to cloud storage."""
3719
+
3720
+ sse_encryption_details: Optional[SseEncryptionDetails] = None
3721
+ """Server-Side Encryption properties for clients communicating with AWS s3."""
3722
+
3723
+ def as_dict(self) -> dict:
3724
+ """Serializes the EncryptionDetails into a dictionary suitable for use as a JSON request body."""
3725
+ body = {}
3726
+ if self.sse_encryption_details:
3727
+ body["sse_encryption_details"] = self.sse_encryption_details.as_dict()
3728
+ return body
3729
+
3730
+ def as_shallow_dict(self) -> dict:
3731
+ """Serializes the EncryptionDetails into a shallow dictionary of its immediate attributes."""
3732
+ body = {}
3733
+ if self.sse_encryption_details:
3734
+ body["sse_encryption_details"] = self.sse_encryption_details
3735
+ return body
3736
+
3737
+ @classmethod
3738
+ def from_dict(cls, d: Dict[str, Any]) -> EncryptionDetails:
3739
+ """Deserializes the EncryptionDetails from a dictionary."""
3740
+ return cls(sse_encryption_details=_from_dict(d, "sse_encryption_details", SseEncryptionDetails))
3741
+
3742
+
3743
+ @dataclass
3744
+ class ExternalLineageExternalMetadata:
3745
+ name: Optional[str] = None
3746
+
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
3753
+
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
3760
+
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))
3765
+
3766
+
3767
+ @dataclass
3768
+ class ExternalLineageExternalMetadataInfo:
3769
+ """Represents the external metadata object in the lineage event."""
3770
+
3771
+ entity_type: Optional[str] = None
3772
+ """Type of entity represented by the external metadata object."""
3773
+
3774
+ event_time: Optional[str] = None
3775
+ """Timestamp of the lineage event."""
3776
+
3777
+ name: Optional[str] = None
3778
+ """Name of the external metadata object."""
3779
+
3780
+ system_type: Optional[SystemType] = None
3781
+ """Type of external system."""
3782
+
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
3795
+
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
3808
+
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
+ )
3818
+
3819
+
3820
+ @dataclass
3821
+ class ExternalLineageFileInfo:
3822
+ """Represents the path information in the lineage event."""
3823
+
3824
+ event_time: Optional[str] = None
3825
+ """Timestamp of the lineage event."""
3826
+
3827
+ path: Optional[str] = None
3828
+ """URL of the path."""
3829
+
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."""
3838
+
3839
+ def as_dict(self) -> dict:
3840
+ """Serializes the ExternalLineageFileInfo into a dictionary suitable for use as a JSON request body."""
3841
+ body = {}
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."""
3498
4195
  return cls(
3499
- catalog_name=d.get("catalog_name", None),
3500
- metastore_id=d.get("metastore_id", None),
3501
- schema_name=d.get("schema_name", None),
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),
3502
4201
  )
3503
4202
 
3504
4203
 
3505
4204
  @dataclass
3506
- class EnableResponse:
4205
+ class ExternalLineageTable:
4206
+ name: Optional[str] = None
4207
+
3507
4208
  def as_dict(self) -> dict:
3508
- """Serializes the EnableResponse into a dictionary suitable for use as a JSON request body."""
4209
+ """Serializes the ExternalLineageTable into a dictionary suitable for use as a JSON request body."""
3509
4210
  body = {}
4211
+ if self.name is not None:
4212
+ body["name"] = self.name
3510
4213
  return body
3511
4214
 
3512
4215
  def as_shallow_dict(self) -> dict:
3513
- """Serializes the EnableResponse into a shallow dictionary of its immediate attributes."""
4216
+ """Serializes the ExternalLineageTable into a shallow dictionary of its immediate attributes."""
3514
4217
  body = {}
4218
+ if self.name is not None:
4219
+ body["name"] = self.name
3515
4220
  return body
3516
4221
 
3517
4222
  @classmethod
3518
- def from_dict(cls, d: Dict[str, Any]) -> EnableResponse:
3519
- """Deserializes the EnableResponse from a dictionary."""
3520
- return cls()
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))
3521
4226
 
3522
4227
 
3523
4228
  @dataclass
3524
- class EncryptionDetails:
3525
- """Encryption options that apply to clients connecting to cloud storage."""
4229
+ class ExternalLineageTableInfo:
4230
+ """Represents the table information in the lineage event."""
3526
4231
 
3527
- sse_encryption_details: Optional[SseEncryptionDetails] = None
3528
- """Server-Side Encryption properties for clients communicating with AWS s3."""
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."""
3529
4243
 
3530
4244
  def as_dict(self) -> dict:
3531
- """Serializes the EncryptionDetails into a dictionary suitable for use as a JSON request body."""
4245
+ """Serializes the ExternalLineageTableInfo into a dictionary suitable for use as a JSON request body."""
3532
4246
  body = {}
3533
- if self.sse_encryption_details:
3534
- body["sse_encryption_details"] = self.sse_encryption_details.as_dict()
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
3535
4255
  return body
3536
4256
 
3537
4257
  def as_shallow_dict(self) -> dict:
3538
- """Serializes the EncryptionDetails into a shallow dictionary of its immediate attributes."""
4258
+ """Serializes the ExternalLineageTableInfo into a shallow dictionary of its immediate attributes."""
3539
4259
  body = {}
3540
- if self.sse_encryption_details:
3541
- body["sse_encryption_details"] = self.sse_encryption_details
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
3542
4268
  return body
3543
4269
 
3544
4270
  @classmethod
3545
- def from_dict(cls, d: Dict[str, Any]) -> EncryptionDetails:
3546
- """Deserializes the EncryptionDetails from a dictionary."""
3547
- return cls(sse_encryption_details=_from_dict(d, "sse_encryption_details", SseEncryptionDetails))
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
+ )
3548
4279
 
3549
4280
 
3550
4281
  @dataclass
@@ -3569,10 +4300,9 @@ class ExternalLocationInfo:
3569
4300
  """Name of the storage credential used with this location."""
3570
4301
 
3571
4302
  enable_file_events: Optional[bool] = None
3572
- """[Create:OPT Update:OPT] Whether to enable file events on this external location."""
4303
+ """Whether to enable file events on this external location."""
3573
4304
 
3574
4305
  encryption_details: Optional[EncryptionDetails] = None
3575
- """Encryption options that apply to clients connecting to cloud storage."""
3576
4306
 
3577
4307
  fallback: Optional[bool] = None
3578
4308
  """Indicates whether fallback mode is enabled for this external location. When fallback mode is
@@ -3580,7 +4310,7 @@ class ExternalLocationInfo:
3580
4310
  sufficient."""
3581
4311
 
3582
4312
  file_event_queue: Optional[FileEventQueue] = None
3583
- """[Create:OPT Update:OPT] File event queue settings."""
4313
+ """File event queue settings."""
3584
4314
 
3585
4315
  isolation_mode: Optional[IsolationMode] = None
3586
4316
 
@@ -3712,6 +4442,137 @@ class ExternalLocationInfo:
3712
4442
  )
3713
4443
 
3714
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),
4571
+ updated_by=d.get("updated_by", None),
4572
+ url=d.get("url", None),
4573
+ )
4574
+
4575
+
3715
4576
  @dataclass
3716
4577
  class FailedStatus:
3717
4578
  """Detailed status of an online table. Shown if the online table is in the OFFLINE_FAILED or the
@@ -3828,6 +4689,9 @@ class ForeignKeyConstraint:
3828
4689
  parent_columns: List[str]
3829
4690
  """Column names for this constraint."""
3830
4691
 
4692
+ rely: Optional[bool] = None
4693
+ """True if the constraint is RELY, false or unset if NORELY."""
4694
+
3831
4695
  def as_dict(self) -> dict:
3832
4696
  """Serializes the ForeignKeyConstraint into a dictionary suitable for use as a JSON request body."""
3833
4697
  body = {}
@@ -3839,6 +4703,8 @@ class ForeignKeyConstraint:
3839
4703
  body["parent_columns"] = [v for v in self.parent_columns]
3840
4704
  if self.parent_table is not None:
3841
4705
  body["parent_table"] = self.parent_table
4706
+ if self.rely is not None:
4707
+ body["rely"] = self.rely
3842
4708
  return body
3843
4709
 
3844
4710
  def as_shallow_dict(self) -> dict:
@@ -3852,6 +4718,8 @@ class ForeignKeyConstraint:
3852
4718
  body["parent_columns"] = self.parent_columns
3853
4719
  if self.parent_table is not None:
3854
4720
  body["parent_table"] = self.parent_table
4721
+ if self.rely is not None:
4722
+ body["rely"] = self.rely
3855
4723
  return body
3856
4724
 
3857
4725
  @classmethod
@@ -3862,6 +4730,7 @@ class ForeignKeyConstraint:
3862
4730
  name=d.get("name", None),
3863
4731
  parent_columns=d.get("parent_columns", None),
3864
4732
  parent_table=d.get("parent_table", None),
4733
+ rely=d.get("rely", None),
3865
4734
  )
3866
4735
 
3867
4736
 
@@ -4205,10 +5074,8 @@ class FunctionParameterInfo:
4205
5074
  """Default value of the parameter."""
4206
5075
 
4207
5076
  parameter_mode: Optional[FunctionParameterMode] = None
4208
- """The mode of the function parameter."""
4209
5077
 
4210
5078
  parameter_type: Optional[FunctionParameterType] = None
4211
- """The type of function parameter."""
4212
5079
 
4213
5080
  type_interval_type: Optional[str] = None
4214
5081
  """Format of IntervalType."""
@@ -4371,7 +5238,7 @@ class GcpPubsub:
4371
5238
 
4372
5239
  subscription_name: Optional[str] = None
4373
5240
  """The Pub/Sub subscription name in the format projects/{project}/subscriptions/{subscription name}
4374
- REQUIRED for provided_pubsub."""
5241
+ Required for provided_pubsub."""
4375
5242
 
4376
5243
  def as_dict(self) -> dict:
4377
5244
  """Serializes the GcpPubsub into a dictionary suitable for use as a JSON request body."""
@@ -4463,10 +5330,8 @@ class GenerateTemporaryServiceCredentialRequest:
4463
5330
  """The name of the service credential used to generate a temporary credential"""
4464
5331
 
4465
5332
  azure_options: Optional[GenerateTemporaryServiceCredentialAzureOptions] = None
4466
- """The Azure cloud options to customize the requested temporary credential"""
4467
5333
 
4468
5334
  gcp_options: Optional[GenerateTemporaryServiceCredentialGcpOptions] = None
4469
- """The GCP cloud options to customize the requested temporary credential"""
4470
5335
 
4471
5336
  def as_dict(self) -> dict:
4472
5337
  """Serializes the GenerateTemporaryServiceCredentialRequest into a dictionary suitable for use as a JSON request body."""
@@ -4537,29 +5402,18 @@ class GenerateTemporaryTableCredentialRequest:
4537
5402
  @dataclass
4538
5403
  class GenerateTemporaryTableCredentialResponse:
4539
5404
  aws_temp_credentials: Optional[AwsCredentials] = None
4540
- """AWS temporary credentials for API authentication. Read more at
4541
- https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html."""
4542
5405
 
4543
5406
  azure_aad: Optional[AzureActiveDirectoryToken] = None
4544
- """Azure Active Directory token, essentially the Oauth token for Azure Service Principal or Managed
4545
- Identity. Read more at
4546
- https://learn.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token"""
4547
5407
 
4548
5408
  azure_user_delegation_sas: Optional[AzureUserDelegationSas] = None
4549
- """Azure temporary credentials for API authentication. Read more at
4550
- https://docs.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas"""
4551
5409
 
4552
5410
  expiration_time: Optional[int] = None
4553
5411
  """Server time when the credential will expire, in epoch milliseconds. The API client is advised to
4554
5412
  cache the credential given this expiration time."""
4555
5413
 
4556
5414
  gcp_oauth_token: Optional[GcpOauthToken] = None
4557
- """GCP temporary credentials for API authentication. Read more at
4558
- https://developers.google.com/identity/protocols/oauth2/service-account"""
4559
5415
 
4560
5416
  r2_temp_credentials: Optional[R2Credentials] = None
4561
- """R2 temporary credentials for API authentication. Read more at
4562
- https://developers.cloudflare.com/r2/api/s3/tokens/."""
4563
5417
 
4564
5418
  url: Optional[str] = None
4565
5419
  """The URL of the storage path accessible by the temporary credential."""
@@ -4921,6 +5775,12 @@ class IsolationMode(Enum):
4921
5775
  ISOLATION_MODE_OPEN = "ISOLATION_MODE_OPEN"
4922
5776
 
4923
5777
 
5778
+ class LineageDirection(Enum):
5779
+
5780
+ DOWNSTREAM = "DOWNSTREAM"
5781
+ UPSTREAM = "UPSTREAM"
5782
+
5783
+
4924
5784
  @dataclass
4925
5785
  class ListAccountMetastoreAssignmentsResponse:
4926
5786
  """The list of workspaces to which the given metastore is assigned."""
@@ -5074,6 +5934,39 @@ class ListCredentialsResponse:
5074
5934
  )
5075
5935
 
5076
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
+
5077
5970
  @dataclass
5078
5971
  class ListExternalLocationsResponse:
5079
5972
  external_locations: Optional[List[ExternalLocationInfo]] = None
@@ -5110,6 +6003,39 @@ class ListExternalLocationsResponse:
5110
6003
  )
5111
6004
 
5112
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
+
5113
6039
  @dataclass
5114
6040
  class ListFunctionsResponse:
5115
6041
  functions: Optional[List[FunctionInfo]] = None
@@ -6098,7 +7024,6 @@ class MonitorInfo:
6098
7024
  """The full name of the table to monitor. Format: __catalog_name__.__schema_name__.__table_name__."""
6099
7025
 
6100
7026
  status: MonitorInfoStatus
6101
- """The status of the monitor."""
6102
7027
 
6103
7028
  monitor_version: str
6104
7029
  """The version of the monitor config (e.g. 1,2,3). If negative, the monitor may be corrupted."""
@@ -6784,26 +7709,18 @@ class OnlineTableStatus:
6784
7709
  """Status of an online table."""
6785
7710
 
6786
7711
  continuous_update_status: Optional[ContinuousUpdateStatus] = None
6787
- """Detailed status of an online table. Shown if the online table is in the ONLINE_CONTINUOUS_UPDATE
6788
- or the ONLINE_UPDATING_PIPELINE_RESOURCES state."""
6789
7712
 
6790
7713
  detailed_state: Optional[OnlineTableState] = None
6791
7714
  """The state of the online table."""
6792
7715
 
6793
7716
  failed_status: Optional[FailedStatus] = None
6794
- """Detailed status of an online table. Shown if the online table is in the OFFLINE_FAILED or the
6795
- ONLINE_PIPELINE_FAILED state."""
6796
7717
 
6797
7718
  message: Optional[str] = None
6798
7719
  """A text description of the current state of the online table."""
6799
7720
 
6800
7721
  provisioning_status: Optional[ProvisioningStatus] = None
6801
- """Detailed status of an online table. Shown if the online table is in the
6802
- PROVISIONING_PIPELINE_RESOURCES or the PROVISIONING_INITIAL_SNAPSHOT state."""
6803
7722
 
6804
7723
  triggered_update_status: Optional[TriggeredUpdateStatus] = None
6805
- """Detailed status of an online table. Shown if the online table is in the ONLINE_TRIGGERED_UPDATE
6806
- or the ONLINE_NO_PENDING_UPDATE state."""
6807
7724
 
6808
7725
  def as_dict(self) -> dict:
6809
7726
  """Serializes the OnlineTableStatus into a dictionary suitable for use as a JSON request body."""
@@ -6840,18 +7757,181 @@ class OnlineTableStatus:
6840
7757
  return body
6841
7758
 
6842
7759
  @classmethod
6843
- def from_dict(cls, d: Dict[str, Any]) -> OnlineTableStatus:
6844
- """Deserializes the OnlineTableStatus from a dictionary."""
7760
+ def from_dict(cls, d: Dict[str, Any]) -> OnlineTableStatus:
7761
+ """Deserializes the OnlineTableStatus from a dictionary."""
7762
+ return cls(
7763
+ continuous_update_status=_from_dict(d, "continuous_update_status", ContinuousUpdateStatus),
7764
+ detailed_state=_enum(d, "detailed_state", OnlineTableState),
7765
+ failed_status=_from_dict(d, "failed_status", FailedStatus),
7766
+ message=d.get("message", None),
7767
+ provisioning_status=_from_dict(d, "provisioning_status", ProvisioningStatus),
7768
+ triggered_update_status=_from_dict(d, "triggered_update_status", TriggeredUpdateStatus),
7769
+ )
7770
+
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."""
6845
7892
  return cls(
6846
- continuous_update_status=_from_dict(d, "continuous_update_status", ContinuousUpdateStatus),
6847
- detailed_state=_enum(d, "detailed_state", OnlineTableState),
6848
- failed_status=_from_dict(d, "failed_status", FailedStatus),
6849
- message=d.get("message", None),
6850
- provisioning_status=_from_dict(d, "provisioning_status", ProvisioningStatus),
6851
- triggered_update_status=_from_dict(d, "triggered_update_status", TriggeredUpdateStatus),
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),
6852
7907
  )
6853
7908
 
6854
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
+
6855
7935
  @dataclass
6856
7936
  class PermissionsChange:
6857
7937
  add: Optional[List[Privilege]] = None
@@ -6965,6 +8045,9 @@ class PrimaryKeyConstraint:
6965
8045
  child_columns: List[str]
6966
8046
  """Column names for this constraint."""
6967
8047
 
8048
+ rely: Optional[bool] = None
8049
+ """True if the constraint is RELY, false or unset if NORELY."""
8050
+
6968
8051
  timeseries_columns: Optional[List[str]] = None
6969
8052
  """Column names that represent a timeseries."""
6970
8053
 
@@ -6975,6 +8058,8 @@ class PrimaryKeyConstraint:
6975
8058
  body["child_columns"] = [v for v in self.child_columns]
6976
8059
  if self.name is not None:
6977
8060
  body["name"] = self.name
8061
+ if self.rely is not None:
8062
+ body["rely"] = self.rely
6978
8063
  if self.timeseries_columns:
6979
8064
  body["timeseries_columns"] = [v for v in self.timeseries_columns]
6980
8065
  return body
@@ -6986,6 +8071,8 @@ class PrimaryKeyConstraint:
6986
8071
  body["child_columns"] = self.child_columns
6987
8072
  if self.name is not None:
6988
8073
  body["name"] = self.name
8074
+ if self.rely is not None:
8075
+ body["rely"] = self.rely
6989
8076
  if self.timeseries_columns:
6990
8077
  body["timeseries_columns"] = self.timeseries_columns
6991
8078
  return body
@@ -6996,6 +8083,7 @@ class PrimaryKeyConstraint:
6996
8083
  return cls(
6997
8084
  child_columns=d.get("child_columns", None),
6998
8085
  name=d.get("name", None),
8086
+ rely=d.get("rely", None),
6999
8087
  timeseries_columns=d.get("timeseries_columns", None),
7000
8088
  )
7001
8089
 
@@ -7056,7 +8144,8 @@ class Privilege(Enum):
7056
8144
  @dataclass
7057
8145
  class PrivilegeAssignment:
7058
8146
  principal: Optional[str] = None
7059
- """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."""
7060
8149
 
7061
8150
  privileges: Optional[List[Privilege]] = None
7062
8151
  """The privileges assigned to the principal."""
@@ -7662,6 +8751,138 @@ class SchemaInfo:
7662
8751
  )
7663
8752
 
7664
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
+
7665
8886
  class SecurableType(Enum):
7666
8887
  """The type of Unity Catalog securable."""
7667
8888
 
@@ -7681,7 +8902,6 @@ class SecurableType(Enum):
7681
8902
  STAGING_TABLE = "STAGING_TABLE"
7682
8903
  STORAGE_CREDENTIAL = "STORAGE_CREDENTIAL"
7683
8904
  TABLE = "TABLE"
7684
- UNKNOWN_SECURABLE_TYPE = "UNKNOWN_SECURABLE_TYPE"
7685
8905
  VOLUME = "VOLUME"
7686
8906
 
7687
8907
 
@@ -8031,6 +9251,31 @@ class SystemSchemaInfo:
8031
9251
  return cls(schema=d.get("schema", None), state=d.get("state", None))
8032
9252
 
8033
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
+
8034
9279
  @dataclass
8035
9280
  class TableConstraint:
8036
9281
  """A table constraint, as defined by *one* of the following fields being set:
@@ -8155,7 +9400,6 @@ class TableInfo:
8155
9400
  """Unique ID of the Data Access Configuration to use with the table data."""
8156
9401
 
8157
9402
  data_source_format: Optional[DataSourceFormat] = None
8158
- """Data source format"""
8159
9403
 
8160
9404
  deleted_at: Optional[int] = None
8161
9405
  """Time at which this table was deleted, in epoch milliseconds. Field is omitted if table is not
@@ -8169,7 +9413,6 @@ class TableInfo:
8169
9413
  enable_predictive_optimization: Optional[EnablePredictiveOptimization] = None
8170
9414
 
8171
9415
  encryption_details: Optional[EncryptionDetails] = None
8172
- """Encryption options that apply to clients connecting to cloud storage."""
8173
9416
 
8174
9417
  full_name: Optional[str] = None
8175
9418
  """Full name of table, in form of __catalog_name__.__schema_name__.__table_name__"""
@@ -8195,6 +9438,9 @@ class TableInfo:
8195
9438
  schema_name: Optional[str] = None
8196
9439
  """Name of parent schema relative to its parent catalog."""
8197
9440
 
9441
+ securable_kind_manifest: Optional[SecurableKindManifest] = None
9442
+ """SecurableKindManifest of table, including capabilities the table has."""
9443
+
8198
9444
  sql_path: Optional[str] = None
8199
9445
  """List of schemes whose objects can be referenced without qualification."""
8200
9446
 
@@ -8202,7 +9448,7 @@ class TableInfo:
8202
9448
  """Name of the storage credential, when a storage credential is configured for use with this table."""
8203
9449
 
8204
9450
  storage_location: Optional[str] = None
8205
- """Storage root URL for table (for **MANAGED**, **EXTERNAL** tables)"""
9451
+ """Storage root URL for table (for **MANAGED**, **EXTERNAL** tables)."""
8206
9452
 
8207
9453
  table_constraints: Optional[List[TableConstraint]] = None
8208
9454
  """List of table constraints. Note: this field is not set in the output of the __listTables__ API."""
@@ -8275,6 +9521,8 @@ class TableInfo:
8275
9521
  body["row_filter"] = self.row_filter.as_dict()
8276
9522
  if self.schema_name is not None:
8277
9523
  body["schema_name"] = self.schema_name
9524
+ if self.securable_kind_manifest:
9525
+ body["securable_kind_manifest"] = self.securable_kind_manifest.as_dict()
8278
9526
  if self.sql_path is not None:
8279
9527
  body["sql_path"] = self.sql_path
8280
9528
  if self.storage_credential_name is not None:
@@ -8344,6 +9592,8 @@ class TableInfo:
8344
9592
  body["row_filter"] = self.row_filter
8345
9593
  if self.schema_name is not None:
8346
9594
  body["schema_name"] = self.schema_name
9595
+ if self.securable_kind_manifest:
9596
+ body["securable_kind_manifest"] = self.securable_kind_manifest
8347
9597
  if self.sql_path is not None:
8348
9598
  body["sql_path"] = self.sql_path
8349
9599
  if self.storage_credential_name is not None:
@@ -8396,6 +9646,7 @@ class TableInfo:
8396
9646
  properties=d.get("properties", None),
8397
9647
  row_filter=_from_dict(d, "row_filter", TableRowFilter),
8398
9648
  schema_name=d.get("schema_name", None),
9649
+ securable_kind_manifest=_from_dict(d, "securable_kind_manifest", SecurableKindManifest),
8399
9650
  sql_path=d.get("sql_path", None),
8400
9651
  storage_credential_name=d.get("storage_credential_name", None),
8401
9652
  storage_location=d.get("storage_location", None),
@@ -8453,6 +9704,9 @@ class TableSummary:
8453
9704
  full_name: Optional[str] = None
8454
9705
  """The full name of the table."""
8455
9706
 
9707
+ securable_kind_manifest: Optional[SecurableKindManifest] = None
9708
+ """SecurableKindManifest of table, including capabilities the table has."""
9709
+
8456
9710
  table_type: Optional[TableType] = None
8457
9711
 
8458
9712
  def as_dict(self) -> dict:
@@ -8460,6 +9714,8 @@ class TableSummary:
8460
9714
  body = {}
8461
9715
  if self.full_name is not None:
8462
9716
  body["full_name"] = self.full_name
9717
+ if self.securable_kind_manifest:
9718
+ body["securable_kind_manifest"] = self.securable_kind_manifest.as_dict()
8463
9719
  if self.table_type is not None:
8464
9720
  body["table_type"] = self.table_type.value
8465
9721
  return body
@@ -8469,6 +9725,8 @@ class TableSummary:
8469
9725
  body = {}
8470
9726
  if self.full_name is not None:
8471
9727
  body["full_name"] = self.full_name
9728
+ if self.securable_kind_manifest:
9729
+ body["securable_kind_manifest"] = self.securable_kind_manifest
8472
9730
  if self.table_type is not None:
8473
9731
  body["table_type"] = self.table_type
8474
9732
  return body
@@ -8476,7 +9734,11 @@ class TableSummary:
8476
9734
  @classmethod
8477
9735
  def from_dict(cls, d: Dict[str, Any]) -> TableSummary:
8478
9736
  """Deserializes the TableSummary from a dictionary."""
8479
- 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
+ )
8480
9742
 
8481
9743
 
8482
9744
  class TableType(Enum):
@@ -8487,6 +9749,7 @@ class TableType(Enum):
8487
9749
  MANAGED = "MANAGED"
8488
9750
  MANAGED_SHALLOW_CLONE = "MANAGED_SHALLOW_CLONE"
8489
9751
  MATERIALIZED_VIEW = "MATERIALIZED_VIEW"
9752
+ METRIC_VIEW = "METRIC_VIEW"
8490
9753
  STREAMING_TABLE = "STREAMING_TABLE"
8491
9754
  VIEW = "VIEW"
8492
9755
 
@@ -8526,21 +9789,14 @@ class TagKeyValue:
8526
9789
  @dataclass
8527
9790
  class TemporaryCredentials:
8528
9791
  aws_temp_credentials: Optional[AwsCredentials] = None
8529
- """AWS temporary credentials for API authentication. Read more at
8530
- https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html."""
8531
9792
 
8532
9793
  azure_aad: Optional[AzureActiveDirectoryToken] = None
8533
- """Azure Active Directory token, essentially the Oauth token for Azure Service Principal or Managed
8534
- Identity. Read more at
8535
- https://learn.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token"""
8536
9794
 
8537
9795
  expiration_time: Optional[int] = None
8538
9796
  """Server time when the credential will expire, in epoch milliseconds. The API client is advised to
8539
9797
  cache the credential given this expiration time."""
8540
9798
 
8541
9799
  gcp_oauth_token: Optional[GcpOauthToken] = None
8542
- """GCP temporary credentials for API authentication. Read more at
8543
- https://developers.google.com/identity/protocols/oauth2/service-account"""
8544
9800
 
8545
9801
  def as_dict(self) -> dict:
8546
9802
  """Serializes the TemporaryCredentials into a dictionary suitable for use as a JSON request body."""
@@ -8948,10 +10204,9 @@ class UpdateExternalLocation:
8948
10204
  """Name of the storage credential used with this location."""
8949
10205
 
8950
10206
  enable_file_events: Optional[bool] = None
8951
- """[Create:OPT Update:OPT] Whether to enable file events on this external location."""
10207
+ """Whether to enable file events on this external location."""
8952
10208
 
8953
10209
  encryption_details: Optional[EncryptionDetails] = None
8954
- """Encryption options that apply to clients connecting to cloud storage."""
8955
10210
 
8956
10211
  fallback: Optional[bool] = None
8957
10212
  """Indicates whether fallback mode is enabled for this external location. When fallback mode is
@@ -8959,7 +10214,7 @@ class UpdateExternalLocation:
8959
10214
  sufficient."""
8960
10215
 
8961
10216
  file_event_queue: Optional[FileEventQueue] = None
8962
- """[Create:OPT Update:OPT] File event queue settings."""
10217
+ """File event queue settings."""
8963
10218
 
8964
10219
  force: Optional[bool] = None
8965
10220
  """Force update even if changing url invalidates dependent external tables or mounts."""
@@ -9517,6 +10772,65 @@ class UpdateRegisteredModelRequest:
9517
10772
  )
9518
10773
 
9519
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
+
9520
10834
  @dataclass
9521
10835
  class UpdateResponse:
9522
10836
  def as_dict(self) -> dict:
@@ -9730,12 +11044,11 @@ class UpdateStorageCredential:
9730
11044
 
9731
11045
  @dataclass
9732
11046
  class UpdateTableRequest:
9733
- """Update a table owner."""
9734
-
9735
11047
  full_name: Optional[str] = None
9736
11048
  """Full name of the table."""
9737
11049
 
9738
11050
  owner: Optional[str] = None
11051
+ """Username of current owner of table."""
9739
11052
 
9740
11053
  def as_dict(self) -> dict:
9741
11054
  """Serializes the UpdateTableRequest into a dictionary suitable for use as a JSON request body."""
@@ -9939,16 +11252,13 @@ class ValidateCredentialRequest:
9939
11252
  """Next ID: 17"""
9940
11253
 
9941
11254
  aws_iam_role: Optional[AwsIamRole] = None
9942
- """The AWS IAM role configuration"""
9943
11255
 
9944
11256
  azure_managed_identity: Optional[AzureManagedIdentity] = None
9945
- """The Azure managed identity configuration."""
9946
11257
 
9947
11258
  credential_name: Optional[str] = None
9948
11259
  """Required. The name of an existing credential or long-lived cloud credential to validate."""
9949
11260
 
9950
11261
  databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None
9951
- """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
9952
11262
 
9953
11263
  external_location_name: Optional[str] = None
9954
11264
  """The name of an existing external location to validate. Only applicable for storage credentials
@@ -10270,7 +11580,6 @@ class VolumeInfo:
10270
11580
  """The identifier of the user who created the volume"""
10271
11581
 
10272
11582
  encryption_details: Optional[EncryptionDetails] = None
10273
- """Encryption options that apply to clients connecting to cloud storage."""
10274
11583
 
10275
11584
  full_name: Optional[str] = None
10276
11585
  """The three-level (fully qualified) name of the volume"""
@@ -10299,11 +11608,6 @@ class VolumeInfo:
10299
11608
  """The unique identifier of the volume"""
10300
11609
 
10301
11610
  volume_type: Optional[VolumeType] = None
10302
- """The type of the volume. An external volume is located in the specified external location. A
10303
- managed volume is located in the default location which is specified by the parent schema, or
10304
- the parent catalog, or the Metastore. [Learn more]
10305
-
10306
- [Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external"""
10307
11611
 
10308
11612
  def as_dict(self) -> dict:
10309
11613
  """Serializes the VolumeInfo into a dictionary suitable for use as a JSON request body."""
@@ -10655,6 +11959,7 @@ class AccountMetastoresAPI:
10655
11959
  def list(self) -> Iterator[MetastoreInfo]:
10656
11960
  """Gets all Unity Catalog metastores associated with an account specified by ID.
10657
11961
 
11962
+
10658
11963
  :returns: Iterator over :class:`MetastoreInfo`
10659
11964
  """
10660
11965
 
@@ -11403,9 +12708,7 @@ class CredentialsAPI:
11403
12708
  :param credential_name: str
11404
12709
  The name of the service credential used to generate a temporary credential
11405
12710
  :param azure_options: :class:`GenerateTemporaryServiceCredentialAzureOptions` (optional)
11406
- The Azure cloud options to customize the requested temporary credential
11407
12711
  :param gcp_options: :class:`GenerateTemporaryServiceCredentialGcpOptions` (optional)
11408
- The GCP cloud options to customize the requested temporary credential
11409
12712
 
11410
12713
  :returns: :class:`TemporaryCredentials`
11411
12714
  """
@@ -11595,13 +12898,10 @@ class CredentialsAPI:
11595
12898
  metastore and the credential (e.g., **CREATE_EXTERNAL_LOCATION** when purpose is **STORAGE**).
11596
12899
 
11597
12900
  :param aws_iam_role: :class:`AwsIamRole` (optional)
11598
- The AWS IAM role configuration
11599
12901
  :param azure_managed_identity: :class:`AzureManagedIdentity` (optional)
11600
- The Azure managed identity configuration.
11601
12902
  :param credential_name: str (optional)
11602
12903
  Required. The name of an existing credential or long-lived cloud credential to validate.
11603
12904
  :param databricks_gcp_service_account: :class:`DatabricksGcpServiceAccount` (optional)
11604
- GCP long-lived credential. Databricks-created Google Cloud Storage service account.
11605
12905
  :param external_location_name: str (optional)
11606
12906
  The name of an existing external location to validate. Only applicable for storage credentials
11607
12907
  (purpose is **STORAGE**.)
@@ -11641,6 +12941,132 @@ class CredentialsAPI:
11641
12941
  return ValidateCredentialResponse.from_dict(res)
11642
12942
 
11643
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
+
11644
13070
  class ExternalLocationsAPI:
11645
13071
  """An external location is an object that combines a cloud storage path with a storage credential that
11646
13072
  authorizes access to the cloud storage path. Each external location is subject to Unity Catalog
@@ -11683,15 +13109,14 @@ class ExternalLocationsAPI:
11683
13109
  :param comment: str (optional)
11684
13110
  User-provided free-form text description.
11685
13111
  :param enable_file_events: bool (optional)
11686
- [Create:OPT Update:OPT] Whether to enable file events on this external location.
13112
+ Whether to enable file events on this external location.
11687
13113
  :param encryption_details: :class:`EncryptionDetails` (optional)
11688
- Encryption options that apply to clients connecting to cloud storage.
11689
13114
  :param fallback: bool (optional)
11690
13115
  Indicates whether fallback mode is enabled for this external location. When fallback mode is
11691
13116
  enabled, the access to the location falls back to cluster credentials if UC credentials are not
11692
13117
  sufficient.
11693
13118
  :param file_event_queue: :class:`FileEventQueue` (optional)
11694
- [Create:OPT Update:OPT] File event queue settings.
13119
+ File event queue settings.
11695
13120
  :param read_only: bool (optional)
11696
13121
  Indicates whether the external location is read-only.
11697
13122
  :param skip_validation: bool (optional)
@@ -11846,15 +13271,14 @@ class ExternalLocationsAPI:
11846
13271
  :param credential_name: str (optional)
11847
13272
  Name of the storage credential used with this location.
11848
13273
  :param enable_file_events: bool (optional)
11849
- [Create:OPT Update:OPT] Whether to enable file events on this external location.
13274
+ Whether to enable file events on this external location.
11850
13275
  :param encryption_details: :class:`EncryptionDetails` (optional)
11851
- Encryption options that apply to clients connecting to cloud storage.
11852
13276
  :param fallback: bool (optional)
11853
13277
  Indicates whether fallback mode is enabled for this external location. When fallback mode is
11854
13278
  enabled, the access to the location falls back to cluster credentials if UC credentials are not
11855
13279
  sufficient.
11856
13280
  :param file_event_queue: :class:`FileEventQueue` (optional)
11857
- [Create:OPT Update:OPT] File event queue settings.
13281
+ File event queue settings.
11858
13282
  :param force: bool (optional)
11859
13283
  Force update even if changing url invalidates dependent external tables or mounts.
11860
13284
  :param isolation_mode: :class:`IsolationMode` (optional)
@@ -11907,6 +13331,137 @@ class ExternalLocationsAPI:
11907
13331
  return ExternalLocationInfo.from_dict(res)
11908
13332
 
11909
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
+
11910
13465
  class FunctionsAPI:
11911
13466
  """Functions implement User-Defined Functions (UDFs) in Unity Catalog.
11912
13467
 
@@ -12302,6 +13857,7 @@ class MetastoresAPI:
12302
13857
  def current(self) -> MetastoreAssignment:
12303
13858
  """Gets the metastore assignment for the workspace being accessed.
12304
13859
 
13860
+
12305
13861
  :returns: :class:`MetastoreAssignment`
12306
13862
  """
12307
13863
 
@@ -12389,6 +13945,7 @@ class MetastoresAPI:
12389
13945
  """Gets information about a metastore. This summary includes the storage credential, the cloud vendor,
12390
13946
  the cloud region, and the global metastore ID.
12391
13947
 
13948
+
12392
13949
  :returns: :class:`GetMetastoreSummaryResponse`
12393
13950
  """
12394
13951
 
@@ -12743,7 +14300,7 @@ class OnlineTablesAPI:
12743
14300
  """Create a new Online Table.
12744
14301
 
12745
14302
  :param table: :class:`OnlineTable`
12746
- Online Table information.
14303
+ Specification of the online table to be created.
12747
14304
 
12748
14305
  :returns:
12749
14306
  Long-running operation waiter for :class:`OnlineTable`.
@@ -14183,8 +15740,6 @@ class TableConstraintsAPI:
14183
15740
  :param full_name_arg: str
14184
15741
  The full name of the table referenced by the constraint.
14185
15742
  :param constraint: :class:`TableConstraint`
14186
- A table constraint, as defined by *one* of the following fields being set:
14187
- __primary_key_constraint__, __foreign_key_constraint__, __named_table_constraint__.
14188
15743
 
14189
15744
  :returns: :class:`TableConstraint`
14190
15745
  """
@@ -14304,11 +15859,11 @@ class TablesAPI:
14304
15859
  Full name of the table.
14305
15860
  :param include_browse: bool (optional)
14306
15861
  Whether to include tables in the response for which the principal can only access selective metadata
14307
- for
15862
+ for.
14308
15863
  :param include_delta_metadata: bool (optional)
14309
15864
  Whether delta metadata should be included in the response.
14310
15865
  :param include_manifest_capabilities: bool (optional)
14311
- Whether to include a manifest containing capabilities the table has.
15866
+ Whether to include a manifest containing table capabilities in the response.
14312
15867
 
14313
15868
  :returns: :class:`TableInfo`
14314
15869
  """
@@ -14333,7 +15888,6 @@ class TablesAPI:
14333
15888
  schema_name: str,
14334
15889
  *,
14335
15890
  include_browse: Optional[bool] = None,
14336
- include_delta_metadata: Optional[bool] = None,
14337
15891
  include_manifest_capabilities: Optional[bool] = None,
14338
15892
  max_results: Optional[int] = None,
14339
15893
  omit_columns: Optional[bool] = None,
@@ -14353,11 +15907,9 @@ class TablesAPI:
14353
15907
  Parent schema of tables.
14354
15908
  :param include_browse: bool (optional)
14355
15909
  Whether to include tables in the response for which the principal can only access selective metadata
14356
- for
14357
- :param include_delta_metadata: bool (optional)
14358
- Whether delta metadata should be included in the response.
15910
+ for.
14359
15911
  :param include_manifest_capabilities: bool (optional)
14360
- Whether to include a manifest containing capabilities the table has.
15912
+ Whether to include a manifest containing table capabilities in the response.
14361
15913
  :param max_results: int (optional)
14362
15914
  Maximum number of tables to return. If not set, all the tables are returned (not recommended). -
14363
15915
  when set to a value greater than 0, the page length is the minimum of this value and a server
@@ -14381,8 +15933,6 @@ class TablesAPI:
14381
15933
  query["catalog_name"] = catalog_name
14382
15934
  if include_browse is not None:
14383
15935
  query["include_browse"] = include_browse
14384
- if include_delta_metadata is not None:
14385
- query["include_delta_metadata"] = include_delta_metadata
14386
15936
  if include_manifest_capabilities is not None:
14387
15937
  query["include_manifest_capabilities"] = include_manifest_capabilities
14388
15938
  if max_results is not None:
@@ -14401,8 +15951,6 @@ class TablesAPI:
14401
15951
  "Accept": "application/json",
14402
15952
  }
14403
15953
 
14404
- if "max_results" not in query:
14405
- query["max_results"] = 0
14406
15954
  while True:
14407
15955
  json = self._api.do("GET", "/api/2.1/unity-catalog/tables", query=query, headers=headers)
14408
15956
  if "tables" in json:
@@ -14436,7 +15984,7 @@ class TablesAPI:
14436
15984
  :param catalog_name: str
14437
15985
  Name of parent catalog for tables of interest.
14438
15986
  :param include_manifest_capabilities: bool (optional)
14439
- Whether to include a manifest containing capabilities the table has.
15987
+ Whether to include a manifest containing table capabilities in the response.
14440
15988
  :param max_results: int (optional)
14441
15989
  Maximum number of summaries for tables to return. If not set, the page length is set to a server
14442
15990
  configured value (10000, as of 1/5/2024). - when set to a value greater than 0, the page length is
@@ -14470,8 +16018,6 @@ class TablesAPI:
14470
16018
  "Accept": "application/json",
14471
16019
  }
14472
16020
 
14473
- if "max_results" not in query:
14474
- query["max_results"] = 0
14475
16021
  while True:
14476
16022
  json = self._api.do("GET", "/api/2.1/unity-catalog/table-summaries", query=query, headers=headers)
14477
16023
  if "tables" in json:
@@ -14490,6 +16036,7 @@ class TablesAPI:
14490
16036
  :param full_name: str
14491
16037
  Full name of the table.
14492
16038
  :param owner: str (optional)
16039
+ Username of current owner of table.
14493
16040
 
14494
16041
 
14495
16042
  """
@@ -14595,11 +16142,6 @@ class VolumesAPI:
14595
16142
  :param name: str
14596
16143
  The name of the volume
14597
16144
  :param volume_type: :class:`VolumeType`
14598
- The type of the volume. An external volume is located in the specified external location. A managed
14599
- volume is located in the default location which is specified by the parent schema, or the parent
14600
- catalog, or the Metastore. [Learn more]
14601
-
14602
- [Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external
14603
16145
  :param comment: str (optional)
14604
16146
  The comment attached to the volume
14605
16147
  :param storage_location: str (optional)