databricks-sdk 0.37.0__py3-none-any.whl → 0.39.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 (33) hide show
  1. databricks/sdk/__init__.py +24 -2
  2. databricks/sdk/_base_client.py +61 -14
  3. databricks/sdk/config.py +10 -9
  4. databricks/sdk/credentials_provider.py +6 -5
  5. databricks/sdk/mixins/jobs.py +49 -0
  6. databricks/sdk/mixins/open_ai_client.py +2 -2
  7. databricks/sdk/service/apps.py +185 -4
  8. databricks/sdk/service/billing.py +248 -1
  9. databricks/sdk/service/catalog.py +1943 -46
  10. databricks/sdk/service/cleanrooms.py +1281 -0
  11. databricks/sdk/service/compute.py +1486 -8
  12. databricks/sdk/service/dashboards.py +336 -11
  13. databricks/sdk/service/files.py +162 -2
  14. databricks/sdk/service/iam.py +353 -2
  15. databricks/sdk/service/jobs.py +1281 -16
  16. databricks/sdk/service/marketplace.py +688 -0
  17. databricks/sdk/service/ml.py +1038 -2
  18. databricks/sdk/service/oauth2.py +176 -0
  19. databricks/sdk/service/pipelines.py +602 -15
  20. databricks/sdk/service/provisioning.py +402 -0
  21. databricks/sdk/service/serving.py +615 -0
  22. databricks/sdk/service/settings.py +1190 -3
  23. databricks/sdk/service/sharing.py +328 -2
  24. databricks/sdk/service/sql.py +1186 -2
  25. databricks/sdk/service/vectorsearch.py +290 -0
  26. databricks/sdk/service/workspace.py +453 -1
  27. databricks/sdk/version.py +1 -1
  28. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/METADATA +26 -26
  29. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/RECORD +33 -31
  30. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/WHEEL +1 -1
  31. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/LICENSE +0 -0
  32. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/NOTICE +0 -0
  33. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/top_level.txt +0 -0
@@ -28,6 +28,12 @@ class AccountsCreateMetastore:
28
28
  if self.metastore_info: body['metastore_info'] = self.metastore_info.as_dict()
29
29
  return body
30
30
 
31
+ def as_shallow_dict(self) -> dict:
32
+ """Serializes the AccountsCreateMetastore into a shallow dictionary of its immediate attributes."""
33
+ body = {}
34
+ if self.metastore_info: body['metastore_info'] = self.metastore_info
35
+ return body
36
+
31
37
  @classmethod
32
38
  def from_dict(cls, d: Dict[str, any]) -> AccountsCreateMetastore:
33
39
  """Deserializes the AccountsCreateMetastore from a dictionary."""
@@ -52,6 +58,14 @@ class AccountsCreateMetastoreAssignment:
52
58
  if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
53
59
  return body
54
60
 
61
+ def as_shallow_dict(self) -> dict:
62
+ """Serializes the AccountsCreateMetastoreAssignment into a shallow dictionary of its immediate attributes."""
63
+ body = {}
64
+ if self.metastore_assignment: body['metastore_assignment'] = self.metastore_assignment
65
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
66
+ if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
67
+ return body
68
+
55
69
  @classmethod
56
70
  def from_dict(cls, d: Dict[str, any]) -> AccountsCreateMetastoreAssignment:
57
71
  """Deserializes the AccountsCreateMetastoreAssignment from a dictionary."""
@@ -74,6 +88,13 @@ class AccountsCreateStorageCredential:
74
88
  if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
75
89
  return body
76
90
 
91
+ def as_shallow_dict(self) -> dict:
92
+ """Serializes the AccountsCreateStorageCredential into a shallow dictionary of its immediate attributes."""
93
+ body = {}
94
+ if self.credential_info: body['credential_info'] = self.credential_info
95
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
96
+ return body
97
+
77
98
  @classmethod
78
99
  def from_dict(cls, d: Dict[str, any]) -> AccountsCreateStorageCredential:
79
100
  """Deserializes the AccountsCreateStorageCredential from a dictionary."""
@@ -91,6 +112,12 @@ class AccountsMetastoreAssignment:
91
112
  if self.metastore_assignment: body['metastore_assignment'] = self.metastore_assignment.as_dict()
92
113
  return body
93
114
 
115
+ def as_shallow_dict(self) -> dict:
116
+ """Serializes the AccountsMetastoreAssignment into a shallow dictionary of its immediate attributes."""
117
+ body = {}
118
+ if self.metastore_assignment: body['metastore_assignment'] = self.metastore_assignment
119
+ return body
120
+
94
121
  @classmethod
95
122
  def from_dict(cls, d: Dict[str, any]) -> AccountsMetastoreAssignment:
96
123
  """Deserializes the AccountsMetastoreAssignment from a dictionary."""
@@ -107,6 +134,12 @@ class AccountsMetastoreInfo:
107
134
  if self.metastore_info: body['metastore_info'] = self.metastore_info.as_dict()
108
135
  return body
109
136
 
137
+ def as_shallow_dict(self) -> dict:
138
+ """Serializes the AccountsMetastoreInfo into a shallow dictionary of its immediate attributes."""
139
+ body = {}
140
+ if self.metastore_info: body['metastore_info'] = self.metastore_info
141
+ return body
142
+
110
143
  @classmethod
111
144
  def from_dict(cls, d: Dict[str, any]) -> AccountsMetastoreInfo:
112
145
  """Deserializes the AccountsMetastoreInfo from a dictionary."""
@@ -123,6 +156,12 @@ class AccountsStorageCredentialInfo:
123
156
  if self.credential_info: body['credential_info'] = self.credential_info.as_dict()
124
157
  return body
125
158
 
159
+ def as_shallow_dict(self) -> dict:
160
+ """Serializes the AccountsStorageCredentialInfo into a shallow dictionary of its immediate attributes."""
161
+ body = {}
162
+ if self.credential_info: body['credential_info'] = self.credential_info
163
+ return body
164
+
126
165
  @classmethod
127
166
  def from_dict(cls, d: Dict[str, any]) -> AccountsStorageCredentialInfo:
128
167
  """Deserializes the AccountsStorageCredentialInfo from a dictionary."""
@@ -143,6 +182,13 @@ class AccountsUpdateMetastore:
143
182
  if self.metastore_info: body['metastore_info'] = self.metastore_info.as_dict()
144
183
  return body
145
184
 
185
+ def as_shallow_dict(self) -> dict:
186
+ """Serializes the AccountsUpdateMetastore into a shallow dictionary of its immediate attributes."""
187
+ body = {}
188
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
189
+ if self.metastore_info: body['metastore_info'] = self.metastore_info
190
+ return body
191
+
146
192
  @classmethod
147
193
  def from_dict(cls, d: Dict[str, any]) -> AccountsUpdateMetastore:
148
194
  """Deserializes the AccountsUpdateMetastore from a dictionary."""
@@ -168,6 +214,14 @@ class AccountsUpdateMetastoreAssignment:
168
214
  if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
169
215
  return body
170
216
 
217
+ def as_shallow_dict(self) -> dict:
218
+ """Serializes the AccountsUpdateMetastoreAssignment into a shallow dictionary of its immediate attributes."""
219
+ body = {}
220
+ if self.metastore_assignment: body['metastore_assignment'] = self.metastore_assignment
221
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
222
+ if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
223
+ return body
224
+
171
225
  @classmethod
172
226
  def from_dict(cls, d: Dict[str, any]) -> AccountsUpdateMetastoreAssignment:
173
227
  """Deserializes the AccountsUpdateMetastoreAssignment from a dictionary."""
@@ -195,6 +249,15 @@ class AccountsUpdateStorageCredential:
195
249
  body['storage_credential_name'] = self.storage_credential_name
196
250
  return body
197
251
 
252
+ def as_shallow_dict(self) -> dict:
253
+ """Serializes the AccountsUpdateStorageCredential into a shallow dictionary of its immediate attributes."""
254
+ body = {}
255
+ if self.credential_info: body['credential_info'] = self.credential_info
256
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
257
+ if self.storage_credential_name is not None:
258
+ body['storage_credential_name'] = self.storage_credential_name
259
+ return body
260
+
198
261
  @classmethod
199
262
  def from_dict(cls, d: Dict[str, any]) -> AccountsUpdateStorageCredential:
200
263
  """Deserializes the AccountsUpdateStorageCredential from a dictionary."""
@@ -226,6 +289,15 @@ class ArtifactAllowlistInfo:
226
289
  if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
227
290
  return body
228
291
 
292
+ def as_shallow_dict(self) -> dict:
293
+ """Serializes the ArtifactAllowlistInfo into a shallow dictionary of its immediate attributes."""
294
+ body = {}
295
+ if self.artifact_matchers: body['artifact_matchers'] = self.artifact_matchers
296
+ if self.created_at is not None: body['created_at'] = self.created_at
297
+ if self.created_by is not None: body['created_by'] = self.created_by
298
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
299
+ return body
300
+
229
301
  @classmethod
230
302
  def from_dict(cls, d: Dict[str, any]) -> ArtifactAllowlistInfo:
231
303
  """Deserializes the ArtifactAllowlistInfo from a dictionary."""
@@ -250,6 +322,13 @@ class ArtifactMatcher:
250
322
  if self.match_type is not None: body['match_type'] = self.match_type.value
251
323
  return body
252
324
 
325
+ def as_shallow_dict(self) -> dict:
326
+ """Serializes the ArtifactMatcher into a shallow dictionary of its immediate attributes."""
327
+ body = {}
328
+ if self.artifact is not None: body['artifact'] = self.artifact
329
+ if self.match_type is not None: body['match_type'] = self.match_type
330
+ return body
331
+
253
332
  @classmethod
254
333
  def from_dict(cls, d: Dict[str, any]) -> ArtifactMatcher:
255
334
  """Deserializes the ArtifactMatcher from a dictionary."""
@@ -272,6 +351,11 @@ class AssignResponse:
272
351
  body = {}
273
352
  return body
274
353
 
354
+ def as_shallow_dict(self) -> dict:
355
+ """Serializes the AssignResponse into a shallow dictionary of its immediate attributes."""
356
+ body = {}
357
+ return body
358
+
275
359
  @classmethod
276
360
  def from_dict(cls, d: Dict[str, any]) -> AssignResponse:
277
361
  """Deserializes the AssignResponse from a dictionary."""
@@ -305,6 +389,15 @@ class AwsCredentials:
305
389
  if self.session_token is not None: body['session_token'] = self.session_token
306
390
  return body
307
391
 
392
+ def as_shallow_dict(self) -> dict:
393
+ """Serializes the AwsCredentials into a shallow dictionary of its immediate attributes."""
394
+ body = {}
395
+ if self.access_key_id is not None: body['access_key_id'] = self.access_key_id
396
+ if self.access_point is not None: body['access_point'] = self.access_point
397
+ if self.secret_access_key is not None: body['secret_access_key'] = self.secret_access_key
398
+ if self.session_token is not None: body['session_token'] = self.session_token
399
+ return body
400
+
308
401
  @classmethod
309
402
  def from_dict(cls, d: Dict[str, any]) -> AwsCredentials:
310
403
  """Deserializes the AwsCredentials from a dictionary."""
@@ -336,6 +429,14 @@ class AwsIamRole:
336
429
  if self.unity_catalog_iam_arn is not None: body['unity_catalog_iam_arn'] = self.unity_catalog_iam_arn
337
430
  return body
338
431
 
432
+ def as_shallow_dict(self) -> dict:
433
+ """Serializes the AwsIamRole into a shallow dictionary of its immediate attributes."""
434
+ body = {}
435
+ if self.external_id is not None: body['external_id'] = self.external_id
436
+ if self.role_arn is not None: body['role_arn'] = self.role_arn
437
+ if self.unity_catalog_iam_arn is not None: body['unity_catalog_iam_arn'] = self.unity_catalog_iam_arn
438
+ return body
439
+
339
440
  @classmethod
340
441
  def from_dict(cls, d: Dict[str, any]) -> AwsIamRole:
341
442
  """Deserializes the AwsIamRole from a dictionary."""
@@ -355,6 +456,12 @@ class AwsIamRoleRequest:
355
456
  if self.role_arn is not None: body['role_arn'] = self.role_arn
356
457
  return body
357
458
 
459
+ def as_shallow_dict(self) -> dict:
460
+ """Serializes the AwsIamRoleRequest into a shallow dictionary of its immediate attributes."""
461
+ body = {}
462
+ if self.role_arn is not None: body['role_arn'] = self.role_arn
463
+ return body
464
+
358
465
  @classmethod
359
466
  def from_dict(cls, d: Dict[str, any]) -> AwsIamRoleRequest:
360
467
  """Deserializes the AwsIamRoleRequest from a dictionary."""
@@ -381,6 +488,14 @@ class AwsIamRoleResponse:
381
488
  if self.unity_catalog_iam_arn is not None: body['unity_catalog_iam_arn'] = self.unity_catalog_iam_arn
382
489
  return body
383
490
 
491
+ def as_shallow_dict(self) -> dict:
492
+ """Serializes the AwsIamRoleResponse into a shallow dictionary of its immediate attributes."""
493
+ body = {}
494
+ if self.external_id is not None: body['external_id'] = self.external_id
495
+ if self.role_arn is not None: body['role_arn'] = self.role_arn
496
+ if self.unity_catalog_iam_arn is not None: body['unity_catalog_iam_arn'] = self.unity_catalog_iam_arn
497
+ return body
498
+
384
499
  @classmethod
385
500
  def from_dict(cls, d: Dict[str, any]) -> AwsIamRoleResponse:
386
501
  """Deserializes the AwsIamRoleResponse from a dictionary."""
@@ -405,6 +520,12 @@ class AzureActiveDirectoryToken:
405
520
  if self.aad_token is not None: body['aad_token'] = self.aad_token
406
521
  return body
407
522
 
523
+ def as_shallow_dict(self) -> dict:
524
+ """Serializes the AzureActiveDirectoryToken into a shallow dictionary of its immediate attributes."""
525
+ body = {}
526
+ if self.aad_token is not None: body['aad_token'] = self.aad_token
527
+ return body
528
+
408
529
  @classmethod
409
530
  def from_dict(cls, d: Dict[str, any]) -> AzureActiveDirectoryToken:
410
531
  """Deserializes the AzureActiveDirectoryToken from a dictionary."""
@@ -415,7 +536,7 @@ class AzureActiveDirectoryToken:
415
536
  class AzureManagedIdentity:
416
537
  """The Azure managed identity configuration."""
417
538
 
418
- access_connector_id: Optional[str] = None
539
+ access_connector_id: str
419
540
  """The Azure resource ID of the Azure Databricks Access Connector. Use the format
420
541
  `/subscriptions/{guid}/resourceGroups/{rg-name}/providers/Microsoft.Databricks/accessConnectors/{connector-name}`."""
421
542
 
@@ -439,6 +560,14 @@ class AzureManagedIdentity:
439
560
  if self.managed_identity_id is not None: body['managed_identity_id'] = self.managed_identity_id
440
561
  return body
441
562
 
563
+ def as_shallow_dict(self) -> dict:
564
+ """Serializes the AzureManagedIdentity into a shallow dictionary of its immediate attributes."""
565
+ body = {}
566
+ if self.access_connector_id is not None: body['access_connector_id'] = self.access_connector_id
567
+ if self.credential_id is not None: body['credential_id'] = self.credential_id
568
+ if self.managed_identity_id is not None: body['managed_identity_id'] = self.managed_identity_id
569
+ return body
570
+
442
571
  @classmethod
443
572
  def from_dict(cls, d: Dict[str, any]) -> AzureManagedIdentity:
444
573
  """Deserializes the AzureManagedIdentity from a dictionary."""
@@ -467,6 +596,13 @@ class AzureManagedIdentityRequest:
467
596
  if self.managed_identity_id is not None: body['managed_identity_id'] = self.managed_identity_id
468
597
  return body
469
598
 
599
+ def as_shallow_dict(self) -> dict:
600
+ """Serializes the AzureManagedIdentityRequest into a shallow dictionary of its immediate attributes."""
601
+ body = {}
602
+ if self.access_connector_id is not None: body['access_connector_id'] = self.access_connector_id
603
+ if self.managed_identity_id is not None: body['managed_identity_id'] = self.managed_identity_id
604
+ return body
605
+
470
606
  @classmethod
471
607
  def from_dict(cls, d: Dict[str, any]) -> AzureManagedIdentityRequest:
472
608
  """Deserializes the AzureManagedIdentityRequest from a dictionary."""
@@ -498,6 +634,14 @@ class AzureManagedIdentityResponse:
498
634
  if self.managed_identity_id is not None: body['managed_identity_id'] = self.managed_identity_id
499
635
  return body
500
636
 
637
+ def as_shallow_dict(self) -> dict:
638
+ """Serializes the AzureManagedIdentityResponse into a shallow dictionary of its immediate attributes."""
639
+ body = {}
640
+ if self.access_connector_id is not None: body['access_connector_id'] = self.access_connector_id
641
+ if self.credential_id is not None: body['credential_id'] = self.credential_id
642
+ if self.managed_identity_id is not None: body['managed_identity_id'] = self.managed_identity_id
643
+ return body
644
+
501
645
  @classmethod
502
646
  def from_dict(cls, d: Dict[str, any]) -> AzureManagedIdentityResponse:
503
647
  """Deserializes the AzureManagedIdentityResponse from a dictionary."""
@@ -508,6 +652,8 @@ class AzureManagedIdentityResponse:
508
652
 
509
653
  @dataclass
510
654
  class AzureServicePrincipal:
655
+ """The Azure service principal configuration. Only applicable when purpose is **STORAGE**."""
656
+
511
657
  directory_id: str
512
658
  """The directory ID corresponding to the Azure Active Directory (AAD) tenant of the application."""
513
659
 
@@ -525,6 +671,14 @@ class AzureServicePrincipal:
525
671
  if self.directory_id is not None: body['directory_id'] = self.directory_id
526
672
  return body
527
673
 
674
+ def as_shallow_dict(self) -> dict:
675
+ """Serializes the AzureServicePrincipal into a shallow dictionary of its immediate attributes."""
676
+ body = {}
677
+ if self.application_id is not None: body['application_id'] = self.application_id
678
+ if self.client_secret is not None: body['client_secret'] = self.client_secret
679
+ if self.directory_id is not None: body['directory_id'] = self.directory_id
680
+ return body
681
+
528
682
  @classmethod
529
683
  def from_dict(cls, d: Dict[str, any]) -> AzureServicePrincipal:
530
684
  """Deserializes the AzureServicePrincipal from a dictionary."""
@@ -547,6 +701,12 @@ class AzureUserDelegationSas:
547
701
  if self.sas_token is not None: body['sas_token'] = self.sas_token
548
702
  return body
549
703
 
704
+ def as_shallow_dict(self) -> dict:
705
+ """Serializes the AzureUserDelegationSas into a shallow dictionary of its immediate attributes."""
706
+ body = {}
707
+ if self.sas_token is not None: body['sas_token'] = self.sas_token
708
+ return body
709
+
550
710
  @classmethod
551
711
  def from_dict(cls, d: Dict[str, any]) -> AzureUserDelegationSas:
552
712
  """Deserializes the AzureUserDelegationSas from a dictionary."""
@@ -561,6 +721,11 @@ class CancelRefreshResponse:
561
721
  body = {}
562
722
  return body
563
723
 
724
+ def as_shallow_dict(self) -> dict:
725
+ """Serializes the CancelRefreshResponse into a shallow dictionary of its immediate attributes."""
726
+ body = {}
727
+ return body
728
+
564
729
  @classmethod
565
730
  def from_dict(cls, d: Dict[str, any]) -> CancelRefreshResponse:
566
731
  """Deserializes the CancelRefreshResponse from a dictionary."""
@@ -675,6 +840,37 @@ class CatalogInfo:
675
840
  if self.updated_by is not None: body['updated_by'] = self.updated_by
676
841
  return body
677
842
 
843
+ def as_shallow_dict(self) -> dict:
844
+ """Serializes the CatalogInfo into a shallow dictionary of its immediate attributes."""
845
+ body = {}
846
+ if self.browse_only is not None: body['browse_only'] = self.browse_only
847
+ if self.catalog_type is not None: body['catalog_type'] = self.catalog_type
848
+ if self.comment is not None: body['comment'] = self.comment
849
+ if self.connection_name is not None: body['connection_name'] = self.connection_name
850
+ if self.created_at is not None: body['created_at'] = self.created_at
851
+ if self.created_by is not None: body['created_by'] = self.created_by
852
+ if self.effective_predictive_optimization_flag:
853
+ body['effective_predictive_optimization_flag'] = self.effective_predictive_optimization_flag
854
+ if self.enable_predictive_optimization is not None:
855
+ body['enable_predictive_optimization'] = self.enable_predictive_optimization
856
+ if self.full_name is not None: body['full_name'] = self.full_name
857
+ if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode
858
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
859
+ if self.name is not None: body['name'] = self.name
860
+ if self.options: body['options'] = self.options
861
+ if self.owner is not None: body['owner'] = self.owner
862
+ if self.properties: body['properties'] = self.properties
863
+ if self.provider_name is not None: body['provider_name'] = self.provider_name
864
+ if self.provisioning_info: body['provisioning_info'] = self.provisioning_info
865
+ if self.securable_kind is not None: body['securable_kind'] = self.securable_kind
866
+ if self.securable_type is not None: body['securable_type'] = self.securable_type
867
+ if self.share_name is not None: body['share_name'] = self.share_name
868
+ if self.storage_location is not None: body['storage_location'] = self.storage_location
869
+ if self.storage_root is not None: body['storage_root'] = self.storage_root
870
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
871
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
872
+ return body
873
+
678
874
  @classmethod
679
875
  def from_dict(cls, d: Dict[str, any]) -> CatalogInfo:
680
876
  """Deserializes the CatalogInfo from a dictionary."""
@@ -758,6 +954,14 @@ class CloudflareApiToken:
758
954
  if self.secret_access_key is not None: body['secret_access_key'] = self.secret_access_key
759
955
  return body
760
956
 
957
+ def as_shallow_dict(self) -> dict:
958
+ """Serializes the CloudflareApiToken into a shallow dictionary of its immediate attributes."""
959
+ body = {}
960
+ if self.access_key_id is not None: body['access_key_id'] = self.access_key_id
961
+ if self.account_id is not None: body['account_id'] = self.account_id
962
+ if self.secret_access_key is not None: body['secret_access_key'] = self.secret_access_key
963
+ return body
964
+
761
965
  @classmethod
762
966
  def from_dict(cls, d: Dict[str, any]) -> CloudflareApiToken:
763
967
  """Deserializes the CloudflareApiToken from a dictionary."""
@@ -792,7 +996,6 @@ class ColumnInfo:
792
996
  """Full data type specification, JSON-serialized."""
793
997
 
794
998
  type_name: Optional[ColumnTypeName] = None
795
- """Name of type (INT, STRUCT, MAP, etc.)."""
796
999
 
797
1000
  type_precision: Optional[int] = None
798
1001
  """Digits of precision; required for DecimalTypes."""
@@ -820,6 +1023,23 @@ class ColumnInfo:
820
1023
  if self.type_text is not None: body['type_text'] = self.type_text
821
1024
  return body
822
1025
 
1026
+ def as_shallow_dict(self) -> dict:
1027
+ """Serializes the ColumnInfo into a shallow dictionary of its immediate attributes."""
1028
+ body = {}
1029
+ if self.comment is not None: body['comment'] = self.comment
1030
+ if self.mask: body['mask'] = self.mask
1031
+ if self.name is not None: body['name'] = self.name
1032
+ if self.nullable is not None: body['nullable'] = self.nullable
1033
+ if self.partition_index is not None: body['partition_index'] = self.partition_index
1034
+ if self.position is not None: body['position'] = self.position
1035
+ if self.type_interval_type is not None: body['type_interval_type'] = self.type_interval_type
1036
+ if self.type_json is not None: body['type_json'] = self.type_json
1037
+ if self.type_name is not None: body['type_name'] = self.type_name
1038
+ if self.type_precision is not None: body['type_precision'] = self.type_precision
1039
+ if self.type_scale is not None: body['type_scale'] = self.type_scale
1040
+ if self.type_text is not None: body['type_text'] = self.type_text
1041
+ return body
1042
+
823
1043
  @classmethod
824
1044
  def from_dict(cls, d: Dict[str, any]) -> ColumnInfo:
825
1045
  """Deserializes the ColumnInfo from a dictionary."""
@@ -854,6 +1074,13 @@ class ColumnMask:
854
1074
  if self.using_column_names: body['using_column_names'] = [v for v in self.using_column_names]
855
1075
  return body
856
1076
 
1077
+ def as_shallow_dict(self) -> dict:
1078
+ """Serializes the ColumnMask into a shallow dictionary of its immediate attributes."""
1079
+ body = {}
1080
+ if self.function_name is not None: body['function_name'] = self.function_name
1081
+ if self.using_column_names: body['using_column_names'] = self.using_column_names
1082
+ return body
1083
+
857
1084
  @classmethod
858
1085
  def from_dict(cls, d: Dict[str, any]) -> ColumnMask:
859
1086
  """Deserializes the ColumnMask from a dictionary."""
@@ -862,7 +1089,6 @@ class ColumnMask:
862
1089
 
863
1090
 
864
1091
  class ColumnTypeName(Enum):
865
- """Name of type (INT, STRUCT, MAP, etc.)."""
866
1092
 
867
1093
  ARRAY = 'ARRAY'
868
1094
  BINARY = 'BINARY'
@@ -970,6 +1196,30 @@ class ConnectionInfo:
970
1196
  if self.url is not None: body['url'] = self.url
971
1197
  return body
972
1198
 
1199
+ def as_shallow_dict(self) -> dict:
1200
+ """Serializes the ConnectionInfo into a shallow dictionary of its immediate attributes."""
1201
+ body = {}
1202
+ if self.comment is not None: body['comment'] = self.comment
1203
+ if self.connection_id is not None: body['connection_id'] = self.connection_id
1204
+ if self.connection_type is not None: body['connection_type'] = self.connection_type
1205
+ if self.created_at is not None: body['created_at'] = self.created_at
1206
+ if self.created_by is not None: body['created_by'] = self.created_by
1207
+ if self.credential_type is not None: body['credential_type'] = self.credential_type
1208
+ if self.full_name is not None: body['full_name'] = self.full_name
1209
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
1210
+ if self.name is not None: body['name'] = self.name
1211
+ if self.options: body['options'] = self.options
1212
+ if self.owner is not None: body['owner'] = self.owner
1213
+ if self.properties: body['properties'] = self.properties
1214
+ if self.provisioning_info: body['provisioning_info'] = self.provisioning_info
1215
+ if self.read_only is not None: body['read_only'] = self.read_only
1216
+ if self.securable_kind is not None: body['securable_kind'] = self.securable_kind
1217
+ if self.securable_type is not None: body['securable_type'] = self.securable_type
1218
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
1219
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
1220
+ if self.url is not None: body['url'] = self.url
1221
+ return body
1222
+
973
1223
  @classmethod
974
1224
  def from_dict(cls, d: Dict[str, any]) -> ConnectionInfo:
975
1225
  """Deserializes the ConnectionInfo from a dictionary."""
@@ -1054,6 +1304,16 @@ class ContinuousUpdateStatus:
1054
1304
  if self.timestamp is not None: body['timestamp'] = self.timestamp
1055
1305
  return body
1056
1306
 
1307
+ def as_shallow_dict(self) -> dict:
1308
+ """Serializes the ContinuousUpdateStatus into a shallow dictionary of its immediate attributes."""
1309
+ body = {}
1310
+ if self.initial_pipeline_sync_progress:
1311
+ body['initial_pipeline_sync_progress'] = self.initial_pipeline_sync_progress
1312
+ if self.last_processed_commit_version is not None:
1313
+ body['last_processed_commit_version'] = self.last_processed_commit_version
1314
+ if self.timestamp is not None: body['timestamp'] = self.timestamp
1315
+ return body
1316
+
1057
1317
  @classmethod
1058
1318
  def from_dict(cls, d: Dict[str, any]) -> ContinuousUpdateStatus:
1059
1319
  """Deserializes the ContinuousUpdateStatus from a dictionary."""
@@ -1104,6 +1364,19 @@ class CreateCatalog:
1104
1364
  if self.storage_root is not None: body['storage_root'] = self.storage_root
1105
1365
  return body
1106
1366
 
1367
+ def as_shallow_dict(self) -> dict:
1368
+ """Serializes the CreateCatalog into a shallow dictionary of its immediate attributes."""
1369
+ body = {}
1370
+ if self.comment is not None: body['comment'] = self.comment
1371
+ if self.connection_name is not None: body['connection_name'] = self.connection_name
1372
+ if self.name is not None: body['name'] = self.name
1373
+ if self.options: body['options'] = self.options
1374
+ if self.properties: body['properties'] = self.properties
1375
+ if self.provider_name is not None: body['provider_name'] = self.provider_name
1376
+ if self.share_name is not None: body['share_name'] = self.share_name
1377
+ if self.storage_root is not None: body['storage_root'] = self.storage_root
1378
+ return body
1379
+
1107
1380
  @classmethod
1108
1381
  def from_dict(cls, d: Dict[str, any]) -> CreateCatalog:
1109
1382
  """Deserializes the CreateCatalog from a dictionary."""
@@ -1148,6 +1421,17 @@ class CreateConnection:
1148
1421
  if self.read_only is not None: body['read_only'] = self.read_only
1149
1422
  return body
1150
1423
 
1424
+ def as_shallow_dict(self) -> dict:
1425
+ """Serializes the CreateConnection into a shallow dictionary of its immediate attributes."""
1426
+ body = {}
1427
+ if self.comment is not None: body['comment'] = self.comment
1428
+ if self.connection_type is not None: body['connection_type'] = self.connection_type
1429
+ if self.name is not None: body['name'] = self.name
1430
+ if self.options: body['options'] = self.options
1431
+ if self.properties: body['properties'] = self.properties
1432
+ if self.read_only is not None: body['read_only'] = self.read_only
1433
+ return body
1434
+
1151
1435
  @classmethod
1152
1436
  def from_dict(cls, d: Dict[str, any]) -> CreateConnection:
1153
1437
  """Deserializes the CreateConnection from a dictionary."""
@@ -1161,22 +1445,32 @@ class CreateConnection:
1161
1445
 
1162
1446
  @dataclass
1163
1447
  class CreateCredentialRequest:
1448
+ name: str
1449
+ """The credential name. The name must be unique among storage and service credentials within the
1450
+ metastore."""
1451
+
1164
1452
  aws_iam_role: Optional[AwsIamRole] = None
1165
1453
  """The AWS IAM role configuration"""
1166
1454
 
1167
1455
  azure_managed_identity: Optional[AzureManagedIdentity] = None
1168
1456
  """The Azure managed identity configuration."""
1169
1457
 
1458
+ azure_service_principal: Optional[AzureServicePrincipal] = None
1459
+ """The Azure service principal configuration. Only applicable when purpose is **STORAGE**."""
1460
+
1170
1461
  comment: Optional[str] = None
1171
1462
  """Comment associated with the credential."""
1172
1463
 
1173
- name: Optional[str] = None
1174
- """The credential name. The name must be unique among storage and service credentials within the
1175
- metastore."""
1464
+ databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None
1465
+ """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
1176
1466
 
1177
1467
  purpose: Optional[CredentialPurpose] = None
1178
1468
  """Indicates the purpose of the credential."""
1179
1469
 
1470
+ read_only: Optional[bool] = None
1471
+ """Whether the credential is usable only for read operations. Only applicable when purpose is
1472
+ **STORAGE**."""
1473
+
1180
1474
  skip_validation: Optional[bool] = None
1181
1475
  """Optional. Supplying true to this argument skips validation of the created set of credentials."""
1182
1476
 
@@ -1185,9 +1479,29 @@ class CreateCredentialRequest:
1185
1479
  body = {}
1186
1480
  if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role.as_dict()
1187
1481
  if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity.as_dict()
1482
+ if self.azure_service_principal:
1483
+ body['azure_service_principal'] = self.azure_service_principal.as_dict()
1188
1484
  if self.comment is not None: body['comment'] = self.comment
1485
+ if self.databricks_gcp_service_account:
1486
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account.as_dict()
1189
1487
  if self.name is not None: body['name'] = self.name
1190
1488
  if self.purpose is not None: body['purpose'] = self.purpose.value
1489
+ if self.read_only is not None: body['read_only'] = self.read_only
1490
+ if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
1491
+ return body
1492
+
1493
+ def as_shallow_dict(self) -> dict:
1494
+ """Serializes the CreateCredentialRequest into a shallow dictionary of its immediate attributes."""
1495
+ body = {}
1496
+ if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role
1497
+ if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity
1498
+ if self.azure_service_principal: body['azure_service_principal'] = self.azure_service_principal
1499
+ if self.comment is not None: body['comment'] = self.comment
1500
+ if self.databricks_gcp_service_account:
1501
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account
1502
+ if self.name is not None: body['name'] = self.name
1503
+ if self.purpose is not None: body['purpose'] = self.purpose
1504
+ if self.read_only is not None: body['read_only'] = self.read_only
1191
1505
  if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
1192
1506
  return body
1193
1507
 
@@ -1196,9 +1510,13 @@ class CreateCredentialRequest:
1196
1510
  """Deserializes the CreateCredentialRequest from a dictionary."""
1197
1511
  return cls(aws_iam_role=_from_dict(d, 'aws_iam_role', AwsIamRole),
1198
1512
  azure_managed_identity=_from_dict(d, 'azure_managed_identity', AzureManagedIdentity),
1513
+ azure_service_principal=_from_dict(d, 'azure_service_principal', AzureServicePrincipal),
1199
1514
  comment=d.get('comment', None),
1515
+ databricks_gcp_service_account=_from_dict(d, 'databricks_gcp_service_account',
1516
+ DatabricksGcpServiceAccount),
1200
1517
  name=d.get('name', None),
1201
1518
  purpose=_enum(d, 'purpose', CredentialPurpose),
1519
+ read_only=d.get('read_only', None),
1202
1520
  skip_validation=d.get('skip_validation', None))
1203
1521
 
1204
1522
 
@@ -1247,6 +1565,20 @@ class CreateExternalLocation:
1247
1565
  if self.url is not None: body['url'] = self.url
1248
1566
  return body
1249
1567
 
1568
+ def as_shallow_dict(self) -> dict:
1569
+ """Serializes the CreateExternalLocation into a shallow dictionary of its immediate attributes."""
1570
+ body = {}
1571
+ if self.access_point is not None: body['access_point'] = self.access_point
1572
+ if self.comment is not None: body['comment'] = self.comment
1573
+ if self.credential_name is not None: body['credential_name'] = self.credential_name
1574
+ if self.encryption_details: body['encryption_details'] = self.encryption_details
1575
+ if self.fallback is not None: body['fallback'] = self.fallback
1576
+ if self.name is not None: body['name'] = self.name
1577
+ if self.read_only is not None: body['read_only'] = self.read_only
1578
+ if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
1579
+ if self.url is not None: body['url'] = self.url
1580
+ return body
1581
+
1250
1582
  @classmethod
1251
1583
  def from_dict(cls, d: Dict[str, any]) -> CreateExternalLocation:
1252
1584
  """Deserializes the CreateExternalLocation from a dictionary."""
@@ -1354,6 +1686,32 @@ class CreateFunction:
1354
1686
  if self.sql_path is not None: body['sql_path'] = self.sql_path
1355
1687
  return body
1356
1688
 
1689
+ def as_shallow_dict(self) -> dict:
1690
+ """Serializes the CreateFunction into a shallow dictionary of its immediate attributes."""
1691
+ body = {}
1692
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
1693
+ if self.comment is not None: body['comment'] = self.comment
1694
+ if self.data_type is not None: body['data_type'] = self.data_type
1695
+ if self.external_language is not None: body['external_language'] = self.external_language
1696
+ if self.external_name is not None: body['external_name'] = self.external_name
1697
+ if self.full_data_type is not None: body['full_data_type'] = self.full_data_type
1698
+ if self.input_params: body['input_params'] = self.input_params
1699
+ if self.is_deterministic is not None: body['is_deterministic'] = self.is_deterministic
1700
+ if self.is_null_call is not None: body['is_null_call'] = self.is_null_call
1701
+ if self.name is not None: body['name'] = self.name
1702
+ if self.parameter_style is not None: body['parameter_style'] = self.parameter_style
1703
+ if self.properties is not None: body['properties'] = self.properties
1704
+ if self.return_params: body['return_params'] = self.return_params
1705
+ if self.routine_body is not None: body['routine_body'] = self.routine_body
1706
+ if self.routine_definition is not None: body['routine_definition'] = self.routine_definition
1707
+ if self.routine_dependencies: body['routine_dependencies'] = self.routine_dependencies
1708
+ if self.schema_name is not None: body['schema_name'] = self.schema_name
1709
+ if self.security_type is not None: body['security_type'] = self.security_type
1710
+ if self.specific_name is not None: body['specific_name'] = self.specific_name
1711
+ if self.sql_data_access is not None: body['sql_data_access'] = self.sql_data_access
1712
+ if self.sql_path is not None: body['sql_path'] = self.sql_path
1713
+ return body
1714
+
1357
1715
  @classmethod
1358
1716
  def from_dict(cls, d: Dict[str, any]) -> CreateFunction:
1359
1717
  """Deserializes the CreateFunction from a dictionary."""
@@ -1397,6 +1755,12 @@ class CreateFunctionRequest:
1397
1755
  if self.function_info: body['function_info'] = self.function_info.as_dict()
1398
1756
  return body
1399
1757
 
1758
+ def as_shallow_dict(self) -> dict:
1759
+ """Serializes the CreateFunctionRequest into a shallow dictionary of its immediate attributes."""
1760
+ body = {}
1761
+ if self.function_info: body['function_info'] = self.function_info
1762
+ return body
1763
+
1400
1764
  @classmethod
1401
1765
  def from_dict(cls, d: Dict[str, any]) -> CreateFunctionRequest:
1402
1766
  """Deserializes the CreateFunctionRequest from a dictionary."""
@@ -1448,6 +1812,14 @@ class CreateMetastore:
1448
1812
  if self.storage_root is not None: body['storage_root'] = self.storage_root
1449
1813
  return body
1450
1814
 
1815
+ def as_shallow_dict(self) -> dict:
1816
+ """Serializes the CreateMetastore into a shallow dictionary of its immediate attributes."""
1817
+ body = {}
1818
+ if self.name is not None: body['name'] = self.name
1819
+ if self.region is not None: body['region'] = self.region
1820
+ if self.storage_root is not None: body['storage_root'] = self.storage_root
1821
+ return body
1822
+
1451
1823
  @classmethod
1452
1824
  def from_dict(cls, d: Dict[str, any]) -> CreateMetastore:
1453
1825
  """Deserializes the CreateMetastore from a dictionary."""
@@ -1476,6 +1848,14 @@ class CreateMetastoreAssignment:
1476
1848
  if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
1477
1849
  return body
1478
1850
 
1851
+ def as_shallow_dict(self) -> dict:
1852
+ """Serializes the CreateMetastoreAssignment into a shallow dictionary of its immediate attributes."""
1853
+ body = {}
1854
+ if self.default_catalog_name is not None: body['default_catalog_name'] = self.default_catalog_name
1855
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
1856
+ if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
1857
+ return body
1858
+
1479
1859
  @classmethod
1480
1860
  def from_dict(cls, d: Dict[str, any]) -> CreateMetastoreAssignment:
1481
1861
  """Deserializes the CreateMetastoreAssignment from a dictionary."""
@@ -1555,6 +1935,27 @@ class CreateMonitor:
1555
1935
  if self.warehouse_id is not None: body['warehouse_id'] = self.warehouse_id
1556
1936
  return body
1557
1937
 
1938
+ def as_shallow_dict(self) -> dict:
1939
+ """Serializes the CreateMonitor into a shallow dictionary of its immediate attributes."""
1940
+ body = {}
1941
+ if self.assets_dir is not None: body['assets_dir'] = self.assets_dir
1942
+ if self.baseline_table_name is not None: body['baseline_table_name'] = self.baseline_table_name
1943
+ if self.custom_metrics: body['custom_metrics'] = self.custom_metrics
1944
+ if self.data_classification_config:
1945
+ body['data_classification_config'] = self.data_classification_config
1946
+ if self.inference_log: body['inference_log'] = self.inference_log
1947
+ if self.notifications: body['notifications'] = self.notifications
1948
+ if self.output_schema_name is not None: body['output_schema_name'] = self.output_schema_name
1949
+ if self.schedule: body['schedule'] = self.schedule
1950
+ if self.skip_builtin_dashboard is not None:
1951
+ body['skip_builtin_dashboard'] = self.skip_builtin_dashboard
1952
+ if self.slicing_exprs: body['slicing_exprs'] = self.slicing_exprs
1953
+ if self.snapshot: body['snapshot'] = self.snapshot
1954
+ if self.table_name is not None: body['table_name'] = self.table_name
1955
+ if self.time_series: body['time_series'] = self.time_series
1956
+ if self.warehouse_id is not None: body['warehouse_id'] = self.warehouse_id
1957
+ return body
1958
+
1558
1959
  @classmethod
1559
1960
  def from_dict(cls, d: Dict[str, any]) -> CreateMonitor:
1560
1961
  """Deserializes the CreateMonitor from a dictionary."""
@@ -1602,6 +2003,16 @@ class CreateRegisteredModelRequest:
1602
2003
  if self.storage_location is not None: body['storage_location'] = self.storage_location
1603
2004
  return body
1604
2005
 
2006
+ def as_shallow_dict(self) -> dict:
2007
+ """Serializes the CreateRegisteredModelRequest into a shallow dictionary of its immediate attributes."""
2008
+ body = {}
2009
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
2010
+ if self.comment is not None: body['comment'] = self.comment
2011
+ if self.name is not None: body['name'] = self.name
2012
+ if self.schema_name is not None: body['schema_name'] = self.schema_name
2013
+ if self.storage_location is not None: body['storage_location'] = self.storage_location
2014
+ return body
2015
+
1605
2016
  @classmethod
1606
2017
  def from_dict(cls, d: Dict[str, any]) -> CreateRegisteredModelRequest:
1607
2018
  """Deserializes the CreateRegisteredModelRequest from a dictionary."""
@@ -1620,6 +2031,11 @@ class CreateResponse:
1620
2031
  body = {}
1621
2032
  return body
1622
2033
 
2034
+ def as_shallow_dict(self) -> dict:
2035
+ """Serializes the CreateResponse into a shallow dictionary of its immediate attributes."""
2036
+ body = {}
2037
+ return body
2038
+
1623
2039
  @classmethod
1624
2040
  def from_dict(cls, d: Dict[str, any]) -> CreateResponse:
1625
2041
  """Deserializes the CreateResponse from a dictionary."""
@@ -1653,6 +2069,16 @@ class CreateSchema:
1653
2069
  if self.storage_root is not None: body['storage_root'] = self.storage_root
1654
2070
  return body
1655
2071
 
2072
+ def as_shallow_dict(self) -> dict:
2073
+ """Serializes the CreateSchema into a shallow dictionary of its immediate attributes."""
2074
+ body = {}
2075
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
2076
+ if self.comment is not None: body['comment'] = self.comment
2077
+ if self.name is not None: body['name'] = self.name
2078
+ if self.properties: body['properties'] = self.properties
2079
+ if self.storage_root is not None: body['storage_root'] = self.storage_root
2080
+ return body
2081
+
1656
2082
  @classmethod
1657
2083
  def from_dict(cls, d: Dict[str, any]) -> CreateSchema:
1658
2084
  """Deserializes the CreateSchema from a dictionary."""
@@ -1708,6 +2134,21 @@ class CreateStorageCredential:
1708
2134
  if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
1709
2135
  return body
1710
2136
 
2137
+ def as_shallow_dict(self) -> dict:
2138
+ """Serializes the CreateStorageCredential into a shallow dictionary of its immediate attributes."""
2139
+ body = {}
2140
+ if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role
2141
+ if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity
2142
+ if self.azure_service_principal: body['azure_service_principal'] = self.azure_service_principal
2143
+ if self.cloudflare_api_token: body['cloudflare_api_token'] = self.cloudflare_api_token
2144
+ if self.comment is not None: body['comment'] = self.comment
2145
+ if self.databricks_gcp_service_account:
2146
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account
2147
+ if self.name is not None: body['name'] = self.name
2148
+ if self.read_only is not None: body['read_only'] = self.read_only
2149
+ if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
2150
+ return body
2151
+
1711
2152
  @classmethod
1712
2153
  def from_dict(cls, d: Dict[str, any]) -> CreateStorageCredential:
1713
2154
  """Deserializes the CreateStorageCredential from a dictionary."""
@@ -1740,6 +2181,13 @@ class CreateTableConstraint:
1740
2181
  if self.full_name_arg is not None: body['full_name_arg'] = self.full_name_arg
1741
2182
  return body
1742
2183
 
2184
+ def as_shallow_dict(self) -> dict:
2185
+ """Serializes the CreateTableConstraint into a shallow dictionary of its immediate attributes."""
2186
+ body = {}
2187
+ if self.constraint: body['constraint'] = self.constraint
2188
+ if self.full_name_arg is not None: body['full_name_arg'] = self.full_name_arg
2189
+ return body
2190
+
1743
2191
  @classmethod
1744
2192
  def from_dict(cls, d: Dict[str, any]) -> CreateTableConstraint:
1745
2193
  """Deserializes the CreateTableConstraint from a dictionary."""
@@ -1777,6 +2225,17 @@ class CreateVolumeRequestContent:
1777
2225
  if self.volume_type is not None: body['volume_type'] = self.volume_type.value
1778
2226
  return body
1779
2227
 
2228
+ def as_shallow_dict(self) -> dict:
2229
+ """Serializes the CreateVolumeRequestContent into a shallow dictionary of its immediate attributes."""
2230
+ body = {}
2231
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
2232
+ if self.comment is not None: body['comment'] = self.comment
2233
+ if self.name is not None: body['name'] = self.name
2234
+ if self.schema_name is not None: body['schema_name'] = self.schema_name
2235
+ if self.storage_location is not None: body['storage_location'] = self.storage_location
2236
+ if self.volume_type is not None: body['volume_type'] = self.volume_type
2237
+ return body
2238
+
1780
2239
  @classmethod
1781
2240
  def from_dict(cls, d: Dict[str, any]) -> CreateVolumeRequestContent:
1782
2241
  """Deserializes the CreateVolumeRequestContent from a dictionary."""
@@ -1796,6 +2255,9 @@ class CredentialInfo:
1796
2255
  azure_managed_identity: Optional[AzureManagedIdentity] = None
1797
2256
  """The Azure managed identity configuration."""
1798
2257
 
2258
+ azure_service_principal: Optional[AzureServicePrincipal] = None
2259
+ """The Azure service principal configuration. Only applicable when purpose is **STORAGE**."""
2260
+
1799
2261
  comment: Optional[str] = None
1800
2262
  """Comment associated with the credential."""
1801
2263
 
@@ -1805,6 +2267,9 @@ class CredentialInfo:
1805
2267
  created_by: Optional[str] = None
1806
2268
  """Username of credential creator."""
1807
2269
 
2270
+ databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None
2271
+ """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
2272
+
1808
2273
  full_name: Optional[str] = None
1809
2274
  """The full name of the credential."""
1810
2275
 
@@ -1827,20 +2292,32 @@ class CredentialInfo:
1827
2292
  purpose: Optional[CredentialPurpose] = None
1828
2293
  """Indicates the purpose of the credential."""
1829
2294
 
2295
+ read_only: Optional[bool] = None
2296
+ """Whether the credential is usable only for read operations. Only applicable when purpose is
2297
+ **STORAGE**."""
2298
+
1830
2299
  updated_at: Optional[int] = None
1831
2300
  """Time at which this credential was last modified, in epoch milliseconds."""
1832
2301
 
1833
2302
  updated_by: Optional[str] = None
1834
2303
  """Username of user who last modified the credential."""
1835
2304
 
2305
+ used_for_managed_storage: Optional[bool] = None
2306
+ """Whether this credential is the current metastore's root storage credential. Only applicable when
2307
+ purpose is **STORAGE**."""
2308
+
1836
2309
  def as_dict(self) -> dict:
1837
2310
  """Serializes the CredentialInfo into a dictionary suitable for use as a JSON request body."""
1838
2311
  body = {}
1839
2312
  if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role.as_dict()
1840
2313
  if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity.as_dict()
2314
+ if self.azure_service_principal:
2315
+ body['azure_service_principal'] = self.azure_service_principal.as_dict()
1841
2316
  if self.comment is not None: body['comment'] = self.comment
1842
2317
  if self.created_at is not None: body['created_at'] = self.created_at
1843
2318
  if self.created_by is not None: body['created_by'] = self.created_by
2319
+ if self.databricks_gcp_service_account:
2320
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account.as_dict()
1844
2321
  if self.full_name is not None: body['full_name'] = self.full_name
1845
2322
  if self.id is not None: body['id'] = self.id
1846
2323
  if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode.value
@@ -1848,8 +2325,36 @@ class CredentialInfo:
1848
2325
  if self.name is not None: body['name'] = self.name
1849
2326
  if self.owner is not None: body['owner'] = self.owner
1850
2327
  if self.purpose is not None: body['purpose'] = self.purpose.value
2328
+ if self.read_only is not None: body['read_only'] = self.read_only
1851
2329
  if self.updated_at is not None: body['updated_at'] = self.updated_at
1852
2330
  if self.updated_by is not None: body['updated_by'] = self.updated_by
2331
+ if self.used_for_managed_storage is not None:
2332
+ body['used_for_managed_storage'] = self.used_for_managed_storage
2333
+ return body
2334
+
2335
+ def as_shallow_dict(self) -> dict:
2336
+ """Serializes the CredentialInfo into a shallow dictionary of its immediate attributes."""
2337
+ body = {}
2338
+ if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role
2339
+ if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity
2340
+ if self.azure_service_principal: body['azure_service_principal'] = self.azure_service_principal
2341
+ if self.comment is not None: body['comment'] = self.comment
2342
+ if self.created_at is not None: body['created_at'] = self.created_at
2343
+ if self.created_by is not None: body['created_by'] = self.created_by
2344
+ if self.databricks_gcp_service_account:
2345
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account
2346
+ if self.full_name is not None: body['full_name'] = self.full_name
2347
+ if self.id is not None: body['id'] = self.id
2348
+ if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode
2349
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
2350
+ if self.name is not None: body['name'] = self.name
2351
+ if self.owner is not None: body['owner'] = self.owner
2352
+ if self.purpose is not None: body['purpose'] = self.purpose
2353
+ if self.read_only is not None: body['read_only'] = self.read_only
2354
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
2355
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
2356
+ if self.used_for_managed_storage is not None:
2357
+ body['used_for_managed_storage'] = self.used_for_managed_storage
1853
2358
  return body
1854
2359
 
1855
2360
  @classmethod
@@ -1857,9 +2362,12 @@ class CredentialInfo:
1857
2362
  """Deserializes the CredentialInfo from a dictionary."""
1858
2363
  return cls(aws_iam_role=_from_dict(d, 'aws_iam_role', AwsIamRole),
1859
2364
  azure_managed_identity=_from_dict(d, 'azure_managed_identity', AzureManagedIdentity),
2365
+ azure_service_principal=_from_dict(d, 'azure_service_principal', AzureServicePrincipal),
1860
2366
  comment=d.get('comment', None),
1861
2367
  created_at=d.get('created_at', None),
1862
2368
  created_by=d.get('created_by', None),
2369
+ databricks_gcp_service_account=_from_dict(d, 'databricks_gcp_service_account',
2370
+ DatabricksGcpServiceAccount),
1863
2371
  full_name=d.get('full_name', None),
1864
2372
  id=d.get('id', None),
1865
2373
  isolation_mode=_enum(d, 'isolation_mode', IsolationMode),
@@ -1867,13 +2375,16 @@ class CredentialInfo:
1867
2375
  name=d.get('name', None),
1868
2376
  owner=d.get('owner', None),
1869
2377
  purpose=_enum(d, 'purpose', CredentialPurpose),
2378
+ read_only=d.get('read_only', None),
1870
2379
  updated_at=d.get('updated_at', None),
1871
- updated_by=d.get('updated_by', None))
2380
+ updated_by=d.get('updated_by', None),
2381
+ used_for_managed_storage=d.get('used_for_managed_storage', None))
1872
2382
 
1873
2383
 
1874
2384
  class CredentialPurpose(Enum):
1875
2385
 
1876
2386
  SERVICE = 'SERVICE'
2387
+ STORAGE = 'STORAGE'
1877
2388
 
1878
2389
 
1879
2390
  class CredentialType(Enum):
@@ -1898,6 +2409,13 @@ class CredentialValidationResult:
1898
2409
  if self.result is not None: body['result'] = self.result.value
1899
2410
  return body
1900
2411
 
2412
+ def as_shallow_dict(self) -> dict:
2413
+ """Serializes the CredentialValidationResult into a shallow dictionary of its immediate attributes."""
2414
+ body = {}
2415
+ if self.message is not None: body['message'] = self.message
2416
+ if self.result is not None: body['result'] = self.result
2417
+ return body
2418
+
1901
2419
  @classmethod
1902
2420
  def from_dict(cls, d: Dict[str, any]) -> CredentialValidationResult:
1903
2421
  """Deserializes the CredentialValidationResult from a dictionary."""
@@ -1917,6 +2435,12 @@ class CurrentWorkspaceBindings:
1917
2435
  if self.workspaces: body['workspaces'] = [v for v in self.workspaces]
1918
2436
  return body
1919
2437
 
2438
+ def as_shallow_dict(self) -> dict:
2439
+ """Serializes the CurrentWorkspaceBindings into a shallow dictionary of its immediate attributes."""
2440
+ body = {}
2441
+ if self.workspaces: body['workspaces'] = self.workspaces
2442
+ return body
2443
+
1920
2444
  @classmethod
1921
2445
  def from_dict(cls, d: Dict[str, any]) -> CurrentWorkspaceBindings:
1922
2446
  """Deserializes the CurrentWorkspaceBindings from a dictionary."""
@@ -1951,6 +2475,45 @@ class DataSourceFormat(Enum):
1951
2475
  WORKDAY_RAAS_FORMAT = 'WORKDAY_RAAS_FORMAT'
1952
2476
 
1953
2477
 
2478
+ @dataclass
2479
+ class DatabricksGcpServiceAccount:
2480
+ """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
2481
+
2482
+ credential_id: Optional[str] = None
2483
+ """The Databricks internal ID that represents this managed identity. This field is only used to
2484
+ persist the credential_id once it is fetched from the credentials manager - as we only use the
2485
+ protobuf serializer to store credentials, this ID gets persisted to the database"""
2486
+
2487
+ email: Optional[str] = None
2488
+ """The email of the service account."""
2489
+
2490
+ private_key_id: Optional[str] = None
2491
+ """The ID that represents the private key for this Service Account"""
2492
+
2493
+ def as_dict(self) -> dict:
2494
+ """Serializes the DatabricksGcpServiceAccount into a dictionary suitable for use as a JSON request body."""
2495
+ body = {}
2496
+ if self.credential_id is not None: body['credential_id'] = self.credential_id
2497
+ if self.email is not None: body['email'] = self.email
2498
+ if self.private_key_id is not None: body['private_key_id'] = self.private_key_id
2499
+ return body
2500
+
2501
+ def as_shallow_dict(self) -> dict:
2502
+ """Serializes the DatabricksGcpServiceAccount into a shallow dictionary of its immediate attributes."""
2503
+ body = {}
2504
+ if self.credential_id is not None: body['credential_id'] = self.credential_id
2505
+ if self.email is not None: body['email'] = self.email
2506
+ if self.private_key_id is not None: body['private_key_id'] = self.private_key_id
2507
+ return body
2508
+
2509
+ @classmethod
2510
+ def from_dict(cls, d: Dict[str, any]) -> DatabricksGcpServiceAccount:
2511
+ """Deserializes the DatabricksGcpServiceAccount from a dictionary."""
2512
+ return cls(credential_id=d.get('credential_id', None),
2513
+ email=d.get('email', None),
2514
+ private_key_id=d.get('private_key_id', None))
2515
+
2516
+
1954
2517
  @dataclass
1955
2518
  class DatabricksGcpServiceAccountRequest:
1956
2519
 
@@ -1959,6 +2522,11 @@ class DatabricksGcpServiceAccountRequest:
1959
2522
  body = {}
1960
2523
  return body
1961
2524
 
2525
+ def as_shallow_dict(self) -> dict:
2526
+ """Serializes the DatabricksGcpServiceAccountRequest into a shallow dictionary of its immediate attributes."""
2527
+ body = {}
2528
+ return body
2529
+
1962
2530
  @classmethod
1963
2531
  def from_dict(cls, d: Dict[str, any]) -> DatabricksGcpServiceAccountRequest:
1964
2532
  """Deserializes the DatabricksGcpServiceAccountRequest from a dictionary."""
@@ -1980,6 +2548,13 @@ class DatabricksGcpServiceAccountResponse:
1980
2548
  if self.email is not None: body['email'] = self.email
1981
2549
  return body
1982
2550
 
2551
+ def as_shallow_dict(self) -> dict:
2552
+ """Serializes the DatabricksGcpServiceAccountResponse into a shallow dictionary of its immediate attributes."""
2553
+ body = {}
2554
+ if self.credential_id is not None: body['credential_id'] = self.credential_id
2555
+ if self.email is not None: body['email'] = self.email
2556
+ return body
2557
+
1983
2558
  @classmethod
1984
2559
  def from_dict(cls, d: Dict[str, any]) -> DatabricksGcpServiceAccountResponse:
1985
2560
  """Deserializes the DatabricksGcpServiceAccountResponse from a dictionary."""
@@ -1994,6 +2569,11 @@ class DeleteAliasResponse:
1994
2569
  body = {}
1995
2570
  return body
1996
2571
 
2572
+ def as_shallow_dict(self) -> dict:
2573
+ """Serializes the DeleteAliasResponse into a shallow dictionary of its immediate attributes."""
2574
+ body = {}
2575
+ return body
2576
+
1997
2577
  @classmethod
1998
2578
  def from_dict(cls, d: Dict[str, any]) -> DeleteAliasResponse:
1999
2579
  """Deserializes the DeleteAliasResponse from a dictionary."""
@@ -2008,6 +2588,11 @@ class DeleteCredentialResponse:
2008
2588
  body = {}
2009
2589
  return body
2010
2590
 
2591
+ def as_shallow_dict(self) -> dict:
2592
+ """Serializes the DeleteCredentialResponse into a shallow dictionary of its immediate attributes."""
2593
+ body = {}
2594
+ return body
2595
+
2011
2596
  @classmethod
2012
2597
  def from_dict(cls, d: Dict[str, any]) -> DeleteCredentialResponse:
2013
2598
  """Deserializes the DeleteCredentialResponse from a dictionary."""
@@ -2022,6 +2607,11 @@ class DeleteResponse:
2022
2607
  body = {}
2023
2608
  return body
2024
2609
 
2610
+ def as_shallow_dict(self) -> dict:
2611
+ """Serializes the DeleteResponse into a shallow dictionary of its immediate attributes."""
2612
+ body = {}
2613
+ return body
2614
+
2025
2615
  @classmethod
2026
2616
  def from_dict(cls, d: Dict[str, any]) -> DeleteResponse:
2027
2617
  """Deserializes the DeleteResponse from a dictionary."""
@@ -2042,6 +2632,12 @@ class DeltaRuntimePropertiesKvPairs:
2042
2632
  if self.delta_runtime_properties: body['delta_runtime_properties'] = self.delta_runtime_properties
2043
2633
  return body
2044
2634
 
2635
+ def as_shallow_dict(self) -> dict:
2636
+ """Serializes the DeltaRuntimePropertiesKvPairs into a shallow dictionary of its immediate attributes."""
2637
+ body = {}
2638
+ if self.delta_runtime_properties: body['delta_runtime_properties'] = self.delta_runtime_properties
2639
+ return body
2640
+
2045
2641
  @classmethod
2046
2642
  def from_dict(cls, d: Dict[str, any]) -> DeltaRuntimePropertiesKvPairs:
2047
2643
  """Deserializes the DeltaRuntimePropertiesKvPairs from a dictionary."""
@@ -2066,6 +2662,13 @@ class Dependency:
2066
2662
  if self.table: body['table'] = self.table.as_dict()
2067
2663
  return body
2068
2664
 
2665
+ def as_shallow_dict(self) -> dict:
2666
+ """Serializes the Dependency into a shallow dictionary of its immediate attributes."""
2667
+ body = {}
2668
+ if self.function: body['function'] = self.function
2669
+ if self.table: body['table'] = self.table
2670
+ return body
2671
+
2069
2672
  @classmethod
2070
2673
  def from_dict(cls, d: Dict[str, any]) -> Dependency:
2071
2674
  """Deserializes the Dependency from a dictionary."""
@@ -2086,6 +2689,12 @@ class DependencyList:
2086
2689
  if self.dependencies: body['dependencies'] = [v.as_dict() for v in self.dependencies]
2087
2690
  return body
2088
2691
 
2692
+ def as_shallow_dict(self) -> dict:
2693
+ """Serializes the DependencyList into a shallow dictionary of its immediate attributes."""
2694
+ body = {}
2695
+ if self.dependencies: body['dependencies'] = self.dependencies
2696
+ return body
2697
+
2089
2698
  @classmethod
2090
2699
  def from_dict(cls, d: Dict[str, any]) -> DependencyList:
2091
2700
  """Deserializes the DependencyList from a dictionary."""
@@ -2100,6 +2709,11 @@ class DisableResponse:
2100
2709
  body = {}
2101
2710
  return body
2102
2711
 
2712
+ def as_shallow_dict(self) -> dict:
2713
+ """Serializes the DisableResponse into a shallow dictionary of its immediate attributes."""
2714
+ body = {}
2715
+ return body
2716
+
2103
2717
  @classmethod
2104
2718
  def from_dict(cls, d: Dict[str, any]) -> DisableResponse:
2105
2719
  """Deserializes the DisableResponse from a dictionary."""
@@ -2118,6 +2732,12 @@ class EffectivePermissionsList:
2118
2732
  body['privilege_assignments'] = [v.as_dict() for v in self.privilege_assignments]
2119
2733
  return body
2120
2734
 
2735
+ def as_shallow_dict(self) -> dict:
2736
+ """Serializes the EffectivePermissionsList into a shallow dictionary of its immediate attributes."""
2737
+ body = {}
2738
+ if self.privilege_assignments: body['privilege_assignments'] = self.privilege_assignments
2739
+ return body
2740
+
2121
2741
  @classmethod
2122
2742
  def from_dict(cls, d: Dict[str, any]) -> EffectivePermissionsList:
2123
2743
  """Deserializes the EffectivePermissionsList from a dictionary."""
@@ -2146,6 +2766,14 @@ class EffectivePredictiveOptimizationFlag:
2146
2766
  if self.value is not None: body['value'] = self.value.value
2147
2767
  return body
2148
2768
 
2769
+ def as_shallow_dict(self) -> dict:
2770
+ """Serializes the EffectivePredictiveOptimizationFlag into a shallow dictionary of its immediate attributes."""
2771
+ body = {}
2772
+ if self.inherited_from_name is not None: body['inherited_from_name'] = self.inherited_from_name
2773
+ if self.inherited_from_type is not None: body['inherited_from_type'] = self.inherited_from_type
2774
+ if self.value is not None: body['value'] = self.value
2775
+ return body
2776
+
2149
2777
  @classmethod
2150
2778
  def from_dict(cls, d: Dict[str, any]) -> EffectivePredictiveOptimizationFlag:
2151
2779
  """Deserializes the EffectivePredictiveOptimizationFlag from a dictionary."""
@@ -2184,6 +2812,14 @@ class EffectivePrivilege:
2184
2812
  if self.privilege is not None: body['privilege'] = self.privilege.value
2185
2813
  return body
2186
2814
 
2815
+ def as_shallow_dict(self) -> dict:
2816
+ """Serializes the EffectivePrivilege into a shallow dictionary of its immediate attributes."""
2817
+ body = {}
2818
+ if self.inherited_from_name is not None: body['inherited_from_name'] = self.inherited_from_name
2819
+ if self.inherited_from_type is not None: body['inherited_from_type'] = self.inherited_from_type
2820
+ if self.privilege is not None: body['privilege'] = self.privilege
2821
+ return body
2822
+
2187
2823
  @classmethod
2188
2824
  def from_dict(cls, d: Dict[str, any]) -> EffectivePrivilege:
2189
2825
  """Deserializes the EffectivePrivilege from a dictionary."""
@@ -2207,6 +2843,13 @@ class EffectivePrivilegeAssignment:
2207
2843
  if self.privileges: body['privileges'] = [v.as_dict() for v in self.privileges]
2208
2844
  return body
2209
2845
 
2846
+ def as_shallow_dict(self) -> dict:
2847
+ """Serializes the EffectivePrivilegeAssignment into a shallow dictionary of its immediate attributes."""
2848
+ body = {}
2849
+ if self.principal is not None: body['principal'] = self.principal
2850
+ if self.privileges: body['privileges'] = self.privileges
2851
+ return body
2852
+
2210
2853
  @classmethod
2211
2854
  def from_dict(cls, d: Dict[str, any]) -> EffectivePrivilegeAssignment:
2212
2855
  """Deserializes the EffectivePrivilegeAssignment from a dictionary."""
@@ -2230,6 +2873,11 @@ class EnableResponse:
2230
2873
  body = {}
2231
2874
  return body
2232
2875
 
2876
+ def as_shallow_dict(self) -> dict:
2877
+ """Serializes the EnableResponse into a shallow dictionary of its immediate attributes."""
2878
+ body = {}
2879
+ return body
2880
+
2233
2881
  @classmethod
2234
2882
  def from_dict(cls, d: Dict[str, any]) -> EnableResponse:
2235
2883
  """Deserializes the EnableResponse from a dictionary."""
@@ -2249,6 +2897,12 @@ class EncryptionDetails:
2249
2897
  if self.sse_encryption_details: body['sse_encryption_details'] = self.sse_encryption_details.as_dict()
2250
2898
  return body
2251
2899
 
2900
+ def as_shallow_dict(self) -> dict:
2901
+ """Serializes the EncryptionDetails into a shallow dictionary of its immediate attributes."""
2902
+ body = {}
2903
+ if self.sse_encryption_details: body['sse_encryption_details'] = self.sse_encryption_details
2904
+ return body
2905
+
2252
2906
  @classmethod
2253
2907
  def from_dict(cls, d: Dict[str, any]) -> EncryptionDetails:
2254
2908
  """Deserializes the EncryptionDetails from a dictionary."""
@@ -2332,6 +2986,28 @@ class ExternalLocationInfo:
2332
2986
  if self.url is not None: body['url'] = self.url
2333
2987
  return body
2334
2988
 
2989
+ def as_shallow_dict(self) -> dict:
2990
+ """Serializes the ExternalLocationInfo into a shallow dictionary of its immediate attributes."""
2991
+ body = {}
2992
+ if self.access_point is not None: body['access_point'] = self.access_point
2993
+ if self.browse_only is not None: body['browse_only'] = self.browse_only
2994
+ if self.comment is not None: body['comment'] = self.comment
2995
+ if self.created_at is not None: body['created_at'] = self.created_at
2996
+ if self.created_by is not None: body['created_by'] = self.created_by
2997
+ if self.credential_id is not None: body['credential_id'] = self.credential_id
2998
+ if self.credential_name is not None: body['credential_name'] = self.credential_name
2999
+ if self.encryption_details: body['encryption_details'] = self.encryption_details
3000
+ if self.fallback is not None: body['fallback'] = self.fallback
3001
+ if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode
3002
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
3003
+ if self.name is not None: body['name'] = self.name
3004
+ if self.owner is not None: body['owner'] = self.owner
3005
+ if self.read_only is not None: body['read_only'] = self.read_only
3006
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
3007
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
3008
+ if self.url is not None: body['url'] = self.url
3009
+ return body
3010
+
2335
3011
  @classmethod
2336
3012
  def from_dict(cls, d: Dict[str, any]) -> ExternalLocationInfo:
2337
3013
  """Deserializes the ExternalLocationInfo from a dictionary."""
@@ -2376,6 +3052,14 @@ class FailedStatus:
2376
3052
  if self.timestamp is not None: body['timestamp'] = self.timestamp
2377
3053
  return body
2378
3054
 
3055
+ def as_shallow_dict(self) -> dict:
3056
+ """Serializes the FailedStatus into a shallow dictionary of its immediate attributes."""
3057
+ body = {}
3058
+ if self.last_processed_commit_version is not None:
3059
+ body['last_processed_commit_version'] = self.last_processed_commit_version
3060
+ if self.timestamp is not None: body['timestamp'] = self.timestamp
3061
+ return body
3062
+
2379
3063
  @classmethod
2380
3064
  def from_dict(cls, d: Dict[str, any]) -> FailedStatus:
2381
3065
  """Deserializes the FailedStatus from a dictionary."""
@@ -2406,6 +3090,15 @@ class ForeignKeyConstraint:
2406
3090
  if self.parent_table is not None: body['parent_table'] = self.parent_table
2407
3091
  return body
2408
3092
 
3093
+ def as_shallow_dict(self) -> dict:
3094
+ """Serializes the ForeignKeyConstraint into a shallow dictionary of its immediate attributes."""
3095
+ body = {}
3096
+ if self.child_columns: body['child_columns'] = self.child_columns
3097
+ if self.name is not None: body['name'] = self.name
3098
+ if self.parent_columns: body['parent_columns'] = self.parent_columns
3099
+ if self.parent_table is not None: body['parent_table'] = self.parent_table
3100
+ return body
3101
+
2409
3102
  @classmethod
2410
3103
  def from_dict(cls, d: Dict[str, any]) -> ForeignKeyConstraint:
2411
3104
  """Deserializes the ForeignKeyConstraint from a dictionary."""
@@ -2429,6 +3122,12 @@ class FunctionDependency:
2429
3122
  if self.function_full_name is not None: body['function_full_name'] = self.function_full_name
2430
3123
  return body
2431
3124
 
3125
+ def as_shallow_dict(self) -> dict:
3126
+ """Serializes the FunctionDependency into a shallow dictionary of its immediate attributes."""
3127
+ body = {}
3128
+ if self.function_full_name is not None: body['function_full_name'] = self.function_full_name
3129
+ return body
3130
+
2432
3131
  @classmethod
2433
3132
  def from_dict(cls, d: Dict[str, any]) -> FunctionDependency:
2434
3133
  """Deserializes the FunctionDependency from a dictionary."""
@@ -2565,6 +3264,41 @@ class FunctionInfo:
2565
3264
  if self.updated_by is not None: body['updated_by'] = self.updated_by
2566
3265
  return body
2567
3266
 
3267
+ def as_shallow_dict(self) -> dict:
3268
+ """Serializes the FunctionInfo into a shallow dictionary of its immediate attributes."""
3269
+ body = {}
3270
+ if self.browse_only is not None: body['browse_only'] = self.browse_only
3271
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
3272
+ if self.comment is not None: body['comment'] = self.comment
3273
+ if self.created_at is not None: body['created_at'] = self.created_at
3274
+ if self.created_by is not None: body['created_by'] = self.created_by
3275
+ if self.data_type is not None: body['data_type'] = self.data_type
3276
+ if self.external_language is not None: body['external_language'] = self.external_language
3277
+ if self.external_name is not None: body['external_name'] = self.external_name
3278
+ if self.full_data_type is not None: body['full_data_type'] = self.full_data_type
3279
+ if self.full_name is not None: body['full_name'] = self.full_name
3280
+ if self.function_id is not None: body['function_id'] = self.function_id
3281
+ if self.input_params: body['input_params'] = self.input_params
3282
+ if self.is_deterministic is not None: body['is_deterministic'] = self.is_deterministic
3283
+ if self.is_null_call is not None: body['is_null_call'] = self.is_null_call
3284
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
3285
+ if self.name is not None: body['name'] = self.name
3286
+ if self.owner is not None: body['owner'] = self.owner
3287
+ if self.parameter_style is not None: body['parameter_style'] = self.parameter_style
3288
+ if self.properties is not None: body['properties'] = self.properties
3289
+ if self.return_params: body['return_params'] = self.return_params
3290
+ if self.routine_body is not None: body['routine_body'] = self.routine_body
3291
+ if self.routine_definition is not None: body['routine_definition'] = self.routine_definition
3292
+ if self.routine_dependencies: body['routine_dependencies'] = self.routine_dependencies
3293
+ if self.schema_name is not None: body['schema_name'] = self.schema_name
3294
+ if self.security_type is not None: body['security_type'] = self.security_type
3295
+ if self.specific_name is not None: body['specific_name'] = self.specific_name
3296
+ if self.sql_data_access is not None: body['sql_data_access'] = self.sql_data_access
3297
+ if self.sql_path is not None: body['sql_path'] = self.sql_path
3298
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
3299
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
3300
+ return body
3301
+
2568
3302
  @classmethod
2569
3303
  def from_dict(cls, d: Dict[str, any]) -> FunctionInfo:
2570
3304
  """Deserializes the FunctionInfo from a dictionary."""
@@ -2639,7 +3373,6 @@ class FunctionParameterInfo:
2639
3373
  """Full data type spec, SQL/catalogString text."""
2640
3374
 
2641
3375
  type_name: ColumnTypeName
2642
- """Name of type (INT, STRUCT, MAP, etc.)."""
2643
3376
 
2644
3377
  position: int
2645
3378
  """Ordinal position of column (starting at position 0)."""
@@ -2685,6 +3418,23 @@ class FunctionParameterInfo:
2685
3418
  if self.type_text is not None: body['type_text'] = self.type_text
2686
3419
  return body
2687
3420
 
3421
+ def as_shallow_dict(self) -> dict:
3422
+ """Serializes the FunctionParameterInfo into a shallow dictionary of its immediate attributes."""
3423
+ body = {}
3424
+ if self.comment is not None: body['comment'] = self.comment
3425
+ if self.name is not None: body['name'] = self.name
3426
+ if self.parameter_default is not None: body['parameter_default'] = self.parameter_default
3427
+ if self.parameter_mode is not None: body['parameter_mode'] = self.parameter_mode
3428
+ if self.parameter_type is not None: body['parameter_type'] = self.parameter_type
3429
+ if self.position is not None: body['position'] = self.position
3430
+ if self.type_interval_type is not None: body['type_interval_type'] = self.type_interval_type
3431
+ if self.type_json is not None: body['type_json'] = self.type_json
3432
+ if self.type_name is not None: body['type_name'] = self.type_name
3433
+ if self.type_precision is not None: body['type_precision'] = self.type_precision
3434
+ if self.type_scale is not None: body['type_scale'] = self.type_scale
3435
+ if self.type_text is not None: body['type_text'] = self.type_text
3436
+ return body
3437
+
2688
3438
  @classmethod
2689
3439
  def from_dict(cls, d: Dict[str, any]) -> FunctionParameterInfo:
2690
3440
  """Deserializes the FunctionParameterInfo from a dictionary."""
@@ -2713,6 +3463,12 @@ class FunctionParameterInfos:
2713
3463
  if self.parameters: body['parameters'] = [v.as_dict() for v in self.parameters]
2714
3464
  return body
2715
3465
 
3466
+ def as_shallow_dict(self) -> dict:
3467
+ """Serializes the FunctionParameterInfos into a shallow dictionary of its immediate attributes."""
3468
+ body = {}
3469
+ if self.parameters: body['parameters'] = self.parameters
3470
+ return body
3471
+
2716
3472
  @classmethod
2717
3473
  def from_dict(cls, d: Dict[str, any]) -> FunctionParameterInfos:
2718
3474
  """Deserializes the FunctionParameterInfos from a dictionary."""
@@ -2745,6 +3501,12 @@ class GcpOauthToken:
2745
3501
  if self.oauth_token is not None: body['oauth_token'] = self.oauth_token
2746
3502
  return body
2747
3503
 
3504
+ def as_shallow_dict(self) -> dict:
3505
+ """Serializes the GcpOauthToken into a shallow dictionary of its immediate attributes."""
3506
+ body = {}
3507
+ if self.oauth_token is not None: body['oauth_token'] = self.oauth_token
3508
+ return body
3509
+
2748
3510
  @classmethod
2749
3511
  def from_dict(cls, d: Dict[str, any]) -> GcpOauthToken:
2750
3512
  """Deserializes the GcpOauthToken from a dictionary."""
@@ -2753,7 +3515,7 @@ class GcpOauthToken:
2753
3515
 
2754
3516
  @dataclass
2755
3517
  class GenerateTemporaryServiceCredentialAzureOptions:
2756
- """Options to customize the requested temporary credential"""
3518
+ """The Azure cloud options to customize the requested temporary credential"""
2757
3519
 
2758
3520
  resources: Optional[List[str]] = None
2759
3521
  """The resources to which the temporary Azure credential should apply. These resources are the
@@ -2766,25 +3528,70 @@ class GenerateTemporaryServiceCredentialAzureOptions:
2766
3528
  if self.resources: body['resources'] = [v for v in self.resources]
2767
3529
  return body
2768
3530
 
3531
+ def as_shallow_dict(self) -> dict:
3532
+ """Serializes the GenerateTemporaryServiceCredentialAzureOptions into a shallow dictionary of its immediate attributes."""
3533
+ body = {}
3534
+ if self.resources: body['resources'] = self.resources
3535
+ return body
3536
+
2769
3537
  @classmethod
2770
3538
  def from_dict(cls, d: Dict[str, any]) -> GenerateTemporaryServiceCredentialAzureOptions:
2771
3539
  """Deserializes the GenerateTemporaryServiceCredentialAzureOptions from a dictionary."""
2772
3540
  return cls(resources=d.get('resources', None))
2773
3541
 
2774
3542
 
3543
+ @dataclass
3544
+ class GenerateTemporaryServiceCredentialGcpOptions:
3545
+ """The GCP cloud options to customize the requested temporary credential"""
3546
+
3547
+ scopes: Optional[List[str]] = None
3548
+ """The scopes to which the temporary GCP credential should apply. These resources are the scopes
3549
+ that are passed to the token provider (see
3550
+ https://google-auth.readthedocs.io/en/latest/reference/google.auth.html#google.auth.credentials.Credentials)"""
3551
+
3552
+ def as_dict(self) -> dict:
3553
+ """Serializes the GenerateTemporaryServiceCredentialGcpOptions into a dictionary suitable for use as a JSON request body."""
3554
+ body = {}
3555
+ if self.scopes: body['scopes'] = [v for v in self.scopes]
3556
+ return body
3557
+
3558
+ def as_shallow_dict(self) -> dict:
3559
+ """Serializes the GenerateTemporaryServiceCredentialGcpOptions into a shallow dictionary of its immediate attributes."""
3560
+ body = {}
3561
+ if self.scopes: body['scopes'] = self.scopes
3562
+ return body
3563
+
3564
+ @classmethod
3565
+ def from_dict(cls, d: Dict[str, any]) -> GenerateTemporaryServiceCredentialGcpOptions:
3566
+ """Deserializes the GenerateTemporaryServiceCredentialGcpOptions from a dictionary."""
3567
+ return cls(scopes=d.get('scopes', None))
3568
+
3569
+
2775
3570
  @dataclass
2776
3571
  class GenerateTemporaryServiceCredentialRequest:
3572
+ credential_name: str
3573
+ """The name of the service credential used to generate a temporary credential"""
3574
+
2777
3575
  azure_options: Optional[GenerateTemporaryServiceCredentialAzureOptions] = None
2778
- """Options to customize the requested temporary credential"""
3576
+ """The Azure cloud options to customize the requested temporary credential"""
2779
3577
 
2780
- credential_name: Optional[str] = None
2781
- """The name of the service credential used to generate a temporary credential"""
3578
+ gcp_options: Optional[GenerateTemporaryServiceCredentialGcpOptions] = None
3579
+ """The GCP cloud options to customize the requested temporary credential"""
2782
3580
 
2783
3581
  def as_dict(self) -> dict:
2784
3582
  """Serializes the GenerateTemporaryServiceCredentialRequest into a dictionary suitable for use as a JSON request body."""
2785
3583
  body = {}
2786
3584
  if self.azure_options: body['azure_options'] = self.azure_options.as_dict()
2787
3585
  if self.credential_name is not None: body['credential_name'] = self.credential_name
3586
+ if self.gcp_options: body['gcp_options'] = self.gcp_options.as_dict()
3587
+ return body
3588
+
3589
+ def as_shallow_dict(self) -> dict:
3590
+ """Serializes the GenerateTemporaryServiceCredentialRequest into a shallow dictionary of its immediate attributes."""
3591
+ body = {}
3592
+ if self.azure_options: body['azure_options'] = self.azure_options
3593
+ if self.credential_name is not None: body['credential_name'] = self.credential_name
3594
+ if self.gcp_options: body['gcp_options'] = self.gcp_options
2788
3595
  return body
2789
3596
 
2790
3597
  @classmethod
@@ -2792,7 +3599,8 @@ class GenerateTemporaryServiceCredentialRequest:
2792
3599
  """Deserializes the GenerateTemporaryServiceCredentialRequest from a dictionary."""
2793
3600
  return cls(azure_options=_from_dict(d, 'azure_options',
2794
3601
  GenerateTemporaryServiceCredentialAzureOptions),
2795
- credential_name=d.get('credential_name', None))
3602
+ credential_name=d.get('credential_name', None),
3603
+ gcp_options=_from_dict(d, 'gcp_options', GenerateTemporaryServiceCredentialGcpOptions))
2796
3604
 
2797
3605
 
2798
3606
  @dataclass
@@ -2812,6 +3620,13 @@ class GenerateTemporaryTableCredentialRequest:
2812
3620
  if self.table_id is not None: body['table_id'] = self.table_id
2813
3621
  return body
2814
3622
 
3623
+ def as_shallow_dict(self) -> dict:
3624
+ """Serializes the GenerateTemporaryTableCredentialRequest into a shallow dictionary of its immediate attributes."""
3625
+ body = {}
3626
+ if self.operation is not None: body['operation'] = self.operation
3627
+ if self.table_id is not None: body['table_id'] = self.table_id
3628
+ return body
3629
+
2815
3630
  @classmethod
2816
3631
  def from_dict(cls, d: Dict[str, any]) -> GenerateTemporaryTableCredentialRequest:
2817
3632
  """Deserializes the GenerateTemporaryTableCredentialRequest from a dictionary."""
@@ -2861,6 +3676,18 @@ class GenerateTemporaryTableCredentialResponse:
2861
3676
  if self.url is not None: body['url'] = self.url
2862
3677
  return body
2863
3678
 
3679
+ def as_shallow_dict(self) -> dict:
3680
+ """Serializes the GenerateTemporaryTableCredentialResponse into a shallow dictionary of its immediate attributes."""
3681
+ body = {}
3682
+ if self.aws_temp_credentials: body['aws_temp_credentials'] = self.aws_temp_credentials
3683
+ if self.azure_aad: body['azure_aad'] = self.azure_aad
3684
+ if self.azure_user_delegation_sas: body['azure_user_delegation_sas'] = self.azure_user_delegation_sas
3685
+ if self.expiration_time is not None: body['expiration_time'] = self.expiration_time
3686
+ if self.gcp_oauth_token: body['gcp_oauth_token'] = self.gcp_oauth_token
3687
+ if self.r2_temp_credentials: body['r2_temp_credentials'] = self.r2_temp_credentials
3688
+ if self.url is not None: body['url'] = self.url
3689
+ return body
3690
+
2864
3691
  @classmethod
2865
3692
  def from_dict(cls, d: Dict[str, any]) -> GenerateTemporaryTableCredentialResponse:
2866
3693
  """Deserializes the GenerateTemporaryTableCredentialResponse from a dictionary."""
@@ -2974,6 +3801,38 @@ class GetMetastoreSummaryResponse:
2974
3801
  if self.updated_by is not None: body['updated_by'] = self.updated_by
2975
3802
  return body
2976
3803
 
3804
+ def as_shallow_dict(self) -> dict:
3805
+ """Serializes the GetMetastoreSummaryResponse into a shallow dictionary of its immediate attributes."""
3806
+ body = {}
3807
+ if self.cloud is not None: body['cloud'] = self.cloud
3808
+ if self.created_at is not None: body['created_at'] = self.created_at
3809
+ if self.created_by is not None: body['created_by'] = self.created_by
3810
+ if self.default_data_access_config_id is not None:
3811
+ body['default_data_access_config_id'] = self.default_data_access_config_id
3812
+ if self.delta_sharing_organization_name is not None:
3813
+ body['delta_sharing_organization_name'] = self.delta_sharing_organization_name
3814
+ if self.delta_sharing_recipient_token_lifetime_in_seconds is not None:
3815
+ body[
3816
+ 'delta_sharing_recipient_token_lifetime_in_seconds'] = self.delta_sharing_recipient_token_lifetime_in_seconds
3817
+ if self.delta_sharing_scope is not None: body['delta_sharing_scope'] = self.delta_sharing_scope
3818
+ if self.external_access_enabled is not None:
3819
+ body['external_access_enabled'] = self.external_access_enabled
3820
+ if self.global_metastore_id is not None: body['global_metastore_id'] = self.global_metastore_id
3821
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
3822
+ if self.name is not None: body['name'] = self.name
3823
+ if self.owner is not None: body['owner'] = self.owner
3824
+ if self.privilege_model_version is not None:
3825
+ body['privilege_model_version'] = self.privilege_model_version
3826
+ if self.region is not None: body['region'] = self.region
3827
+ if self.storage_root is not None: body['storage_root'] = self.storage_root
3828
+ if self.storage_root_credential_id is not None:
3829
+ body['storage_root_credential_id'] = self.storage_root_credential_id
3830
+ if self.storage_root_credential_name is not None:
3831
+ body['storage_root_credential_name'] = self.storage_root_credential_name
3832
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
3833
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
3834
+ return body
3835
+
2977
3836
  @classmethod
2978
3837
  def from_dict(cls, d: Dict[str, any]) -> GetMetastoreSummaryResponse:
2979
3838
  """Deserializes the GetMetastoreSummaryResponse from a dictionary."""
@@ -3018,6 +3877,12 @@ class GetQuotaResponse:
3018
3877
  if self.quota_info: body['quota_info'] = self.quota_info.as_dict()
3019
3878
  return body
3020
3879
 
3880
+ def as_shallow_dict(self) -> dict:
3881
+ """Serializes the GetQuotaResponse into a shallow dictionary of its immediate attributes."""
3882
+ body = {}
3883
+ if self.quota_info: body['quota_info'] = self.quota_info
3884
+ return body
3885
+
3021
3886
  @classmethod
3022
3887
  def from_dict(cls, d: Dict[str, any]) -> GetQuotaResponse:
3023
3888
  """Deserializes the GetQuotaResponse from a dictionary."""
@@ -3042,6 +3907,12 @@ class ListAccountMetastoreAssignmentsResponse:
3042
3907
  if self.workspace_ids: body['workspace_ids'] = [v for v in self.workspace_ids]
3043
3908
  return body
3044
3909
 
3910
+ def as_shallow_dict(self) -> dict:
3911
+ """Serializes the ListAccountMetastoreAssignmentsResponse into a shallow dictionary of its immediate attributes."""
3912
+ body = {}
3913
+ if self.workspace_ids: body['workspace_ids'] = self.workspace_ids
3914
+ return body
3915
+
3045
3916
  @classmethod
3046
3917
  def from_dict(cls, d: Dict[str, any]) -> ListAccountMetastoreAssignmentsResponse:
3047
3918
  """Deserializes the ListAccountMetastoreAssignmentsResponse from a dictionary."""
@@ -3060,6 +3931,12 @@ class ListAccountStorageCredentialsResponse:
3060
3931
  body['storage_credentials'] = [v.as_dict() for v in self.storage_credentials]
3061
3932
  return body
3062
3933
 
3934
+ def as_shallow_dict(self) -> dict:
3935
+ """Serializes the ListAccountStorageCredentialsResponse into a shallow dictionary of its immediate attributes."""
3936
+ body = {}
3937
+ if self.storage_credentials: body['storage_credentials'] = self.storage_credentials
3938
+ return body
3939
+
3063
3940
  @classmethod
3064
3941
  def from_dict(cls, d: Dict[str, any]) -> ListAccountStorageCredentialsResponse:
3065
3942
  """Deserializes the ListAccountStorageCredentialsResponse from a dictionary."""
@@ -3082,6 +3959,13 @@ class ListCatalogsResponse:
3082
3959
  if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
3083
3960
  return body
3084
3961
 
3962
+ def as_shallow_dict(self) -> dict:
3963
+ """Serializes the ListCatalogsResponse into a shallow dictionary of its immediate attributes."""
3964
+ body = {}
3965
+ if self.catalogs: body['catalogs'] = self.catalogs
3966
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
3967
+ return body
3968
+
3085
3969
  @classmethod
3086
3970
  def from_dict(cls, d: Dict[str, any]) -> ListCatalogsResponse:
3087
3971
  """Deserializes the ListCatalogsResponse from a dictionary."""
@@ -3105,6 +3989,13 @@ class ListConnectionsResponse:
3105
3989
  if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
3106
3990
  return body
3107
3991
 
3992
+ def as_shallow_dict(self) -> dict:
3993
+ """Serializes the ListConnectionsResponse into a shallow dictionary of its immediate attributes."""
3994
+ body = {}
3995
+ if self.connections: body['connections'] = self.connections
3996
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
3997
+ return body
3998
+
3108
3999
  @classmethod
3109
4000
  def from_dict(cls, d: Dict[str, any]) -> ListConnectionsResponse:
3110
4001
  """Deserializes the ListConnectionsResponse from a dictionary."""
@@ -3127,6 +4018,13 @@ class ListCredentialsResponse:
3127
4018
  if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
3128
4019
  return body
3129
4020
 
4021
+ def as_shallow_dict(self) -> dict:
4022
+ """Serializes the ListCredentialsResponse into a shallow dictionary of its immediate attributes."""
4023
+ body = {}
4024
+ if self.credentials: body['credentials'] = self.credentials
4025
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4026
+ return body
4027
+
3130
4028
  @classmethod
3131
4029
  def from_dict(cls, d: Dict[str, any]) -> ListCredentialsResponse:
3132
4030
  """Deserializes the ListCredentialsResponse from a dictionary."""
@@ -3151,6 +4049,13 @@ class ListExternalLocationsResponse:
3151
4049
  if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
3152
4050
  return body
3153
4051
 
4052
+ def as_shallow_dict(self) -> dict:
4053
+ """Serializes the ListExternalLocationsResponse into a shallow dictionary of its immediate attributes."""
4054
+ body = {}
4055
+ if self.external_locations: body['external_locations'] = self.external_locations
4056
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4057
+ return body
4058
+
3154
4059
  @classmethod
3155
4060
  def from_dict(cls, d: Dict[str, any]) -> ListExternalLocationsResponse:
3156
4061
  """Deserializes the ListExternalLocationsResponse from a dictionary."""
@@ -3174,6 +4079,13 @@ class ListFunctionsResponse:
3174
4079
  if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
3175
4080
  return body
3176
4081
 
4082
+ def as_shallow_dict(self) -> dict:
4083
+ """Serializes the ListFunctionsResponse into a shallow dictionary of its immediate attributes."""
4084
+ body = {}
4085
+ if self.functions: body['functions'] = self.functions
4086
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4087
+ return body
4088
+
3177
4089
  @classmethod
3178
4090
  def from_dict(cls, d: Dict[str, any]) -> ListFunctionsResponse:
3179
4091
  """Deserializes the ListFunctionsResponse from a dictionary."""
@@ -3192,6 +4104,12 @@ class ListMetastoresResponse:
3192
4104
  if self.metastores: body['metastores'] = [v.as_dict() for v in self.metastores]
3193
4105
  return body
3194
4106
 
4107
+ def as_shallow_dict(self) -> dict:
4108
+ """Serializes the ListMetastoresResponse into a shallow dictionary of its immediate attributes."""
4109
+ body = {}
4110
+ if self.metastores: body['metastores'] = self.metastores
4111
+ return body
4112
+
3195
4113
  @classmethod
3196
4114
  def from_dict(cls, d: Dict[str, any]) -> ListMetastoresResponse:
3197
4115
  """Deserializes the ListMetastoresResponse from a dictionary."""
@@ -3213,6 +4131,13 @@ class ListModelVersionsResponse:
3213
4131
  if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
3214
4132
  return body
3215
4133
 
4134
+ def as_shallow_dict(self) -> dict:
4135
+ """Serializes the ListModelVersionsResponse into a shallow dictionary of its immediate attributes."""
4136
+ body = {}
4137
+ if self.model_versions: body['model_versions'] = self.model_versions
4138
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4139
+ return body
4140
+
3216
4141
  @classmethod
3217
4142
  def from_dict(cls, d: Dict[str, any]) -> ListModelVersionsResponse:
3218
4143
  """Deserializes the ListModelVersionsResponse from a dictionary."""
@@ -3236,6 +4161,13 @@ class ListQuotasResponse:
3236
4161
  if self.quotas: body['quotas'] = [v.as_dict() for v in self.quotas]
3237
4162
  return body
3238
4163
 
4164
+ def as_shallow_dict(self) -> dict:
4165
+ """Serializes the ListQuotasResponse into a shallow dictionary of its immediate attributes."""
4166
+ body = {}
4167
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4168
+ if self.quotas: body['quotas'] = self.quotas
4169
+ return body
4170
+
3239
4171
  @classmethod
3240
4172
  def from_dict(cls, d: Dict[str, any]) -> ListQuotasResponse:
3241
4173
  """Deserializes the ListQuotasResponse from a dictionary."""
@@ -3258,6 +4190,13 @@ class ListRegisteredModelsResponse:
3258
4190
  if self.registered_models: body['registered_models'] = [v.as_dict() for v in self.registered_models]
3259
4191
  return body
3260
4192
 
4193
+ def as_shallow_dict(self) -> dict:
4194
+ """Serializes the ListRegisteredModelsResponse into a shallow dictionary of its immediate attributes."""
4195
+ body = {}
4196
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4197
+ if self.registered_models: body['registered_models'] = self.registered_models
4198
+ return body
4199
+
3261
4200
  @classmethod
3262
4201
  def from_dict(cls, d: Dict[str, any]) -> ListRegisteredModelsResponse:
3263
4202
  """Deserializes the ListRegisteredModelsResponse from a dictionary."""
@@ -3281,6 +4220,13 @@ class ListSchemasResponse:
3281
4220
  if self.schemas: body['schemas'] = [v.as_dict() for v in self.schemas]
3282
4221
  return body
3283
4222
 
4223
+ def as_shallow_dict(self) -> dict:
4224
+ """Serializes the ListSchemasResponse into a shallow dictionary of its immediate attributes."""
4225
+ body = {}
4226
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4227
+ if self.schemas: body['schemas'] = self.schemas
4228
+ return body
4229
+
3284
4230
  @classmethod
3285
4231
  def from_dict(cls, d: Dict[str, any]) -> ListSchemasResponse:
3286
4232
  """Deserializes the ListSchemasResponse from a dictionary."""
@@ -3304,6 +4250,13 @@ class ListStorageCredentialsResponse:
3304
4250
  body['storage_credentials'] = [v.as_dict() for v in self.storage_credentials]
3305
4251
  return body
3306
4252
 
4253
+ def as_shallow_dict(self) -> dict:
4254
+ """Serializes the ListStorageCredentialsResponse into a shallow dictionary of its immediate attributes."""
4255
+ body = {}
4256
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4257
+ if self.storage_credentials: body['storage_credentials'] = self.storage_credentials
4258
+ return body
4259
+
3307
4260
  @classmethod
3308
4261
  def from_dict(cls, d: Dict[str, any]) -> ListStorageCredentialsResponse:
3309
4262
  """Deserializes the ListStorageCredentialsResponse from a dictionary."""
@@ -3327,6 +4280,13 @@ class ListSystemSchemasResponse:
3327
4280
  if self.schemas: body['schemas'] = [v.as_dict() for v in self.schemas]
3328
4281
  return body
3329
4282
 
4283
+ def as_shallow_dict(self) -> dict:
4284
+ """Serializes the ListSystemSchemasResponse into a shallow dictionary of its immediate attributes."""
4285
+ body = {}
4286
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4287
+ if self.schemas: body['schemas'] = self.schemas
4288
+ return body
4289
+
3330
4290
  @classmethod
3331
4291
  def from_dict(cls, d: Dict[str, any]) -> ListSystemSchemasResponse:
3332
4292
  """Deserializes the ListSystemSchemasResponse from a dictionary."""
@@ -3350,6 +4310,13 @@ class ListTableSummariesResponse:
3350
4310
  if self.tables: body['tables'] = [v.as_dict() for v in self.tables]
3351
4311
  return body
3352
4312
 
4313
+ def as_shallow_dict(self) -> dict:
4314
+ """Serializes the ListTableSummariesResponse into a shallow dictionary of its immediate attributes."""
4315
+ body = {}
4316
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4317
+ if self.tables: body['tables'] = self.tables
4318
+ return body
4319
+
3353
4320
  @classmethod
3354
4321
  def from_dict(cls, d: Dict[str, any]) -> ListTableSummariesResponse:
3355
4322
  """Deserializes the ListTableSummariesResponse from a dictionary."""
@@ -3373,6 +4340,13 @@ class ListTablesResponse:
3373
4340
  if self.tables: body['tables'] = [v.as_dict() for v in self.tables]
3374
4341
  return body
3375
4342
 
4343
+ def as_shallow_dict(self) -> dict:
4344
+ """Serializes the ListTablesResponse into a shallow dictionary of its immediate attributes."""
4345
+ body = {}
4346
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4347
+ if self.tables: body['tables'] = self.tables
4348
+ return body
4349
+
3376
4350
  @classmethod
3377
4351
  def from_dict(cls, d: Dict[str, any]) -> ListTablesResponse:
3378
4352
  """Deserializes the ListTablesResponse from a dictionary."""
@@ -3396,6 +4370,13 @@ class ListVolumesResponseContent:
3396
4370
  if self.volumes: body['volumes'] = [v.as_dict() for v in self.volumes]
3397
4371
  return body
3398
4372
 
4373
+ def as_shallow_dict(self) -> dict:
4374
+ """Serializes the ListVolumesResponseContent into a shallow dictionary of its immediate attributes."""
4375
+ body = {}
4376
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
4377
+ if self.volumes: body['volumes'] = self.volumes
4378
+ return body
4379
+
3399
4380
  @classmethod
3400
4381
  def from_dict(cls, d: Dict[str, any]) -> ListVolumesResponseContent:
3401
4382
  """Deserializes the ListVolumesResponseContent from a dictionary."""
@@ -3428,6 +4409,14 @@ class MetastoreAssignment:
3428
4409
  if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
3429
4410
  return body
3430
4411
 
4412
+ def as_shallow_dict(self) -> dict:
4413
+ """Serializes the MetastoreAssignment into a shallow dictionary of its immediate attributes."""
4414
+ body = {}
4415
+ if self.default_catalog_name is not None: body['default_catalog_name'] = self.default_catalog_name
4416
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
4417
+ if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
4418
+ return body
4419
+
3431
4420
  @classmethod
3432
4421
  def from_dict(cls, d: Dict[str, any]) -> MetastoreAssignment:
3433
4422
  """Deserializes the MetastoreAssignment from a dictionary."""
@@ -3528,6 +4517,38 @@ class MetastoreInfo:
3528
4517
  if self.updated_by is not None: body['updated_by'] = self.updated_by
3529
4518
  return body
3530
4519
 
4520
+ def as_shallow_dict(self) -> dict:
4521
+ """Serializes the MetastoreInfo into a shallow dictionary of its immediate attributes."""
4522
+ body = {}
4523
+ if self.cloud is not None: body['cloud'] = self.cloud
4524
+ if self.created_at is not None: body['created_at'] = self.created_at
4525
+ if self.created_by is not None: body['created_by'] = self.created_by
4526
+ if self.default_data_access_config_id is not None:
4527
+ body['default_data_access_config_id'] = self.default_data_access_config_id
4528
+ if self.delta_sharing_organization_name is not None:
4529
+ body['delta_sharing_organization_name'] = self.delta_sharing_organization_name
4530
+ if self.delta_sharing_recipient_token_lifetime_in_seconds is not None:
4531
+ body[
4532
+ 'delta_sharing_recipient_token_lifetime_in_seconds'] = self.delta_sharing_recipient_token_lifetime_in_seconds
4533
+ if self.delta_sharing_scope is not None: body['delta_sharing_scope'] = self.delta_sharing_scope
4534
+ if self.external_access_enabled is not None:
4535
+ body['external_access_enabled'] = self.external_access_enabled
4536
+ if self.global_metastore_id is not None: body['global_metastore_id'] = self.global_metastore_id
4537
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
4538
+ if self.name is not None: body['name'] = self.name
4539
+ if self.owner is not None: body['owner'] = self.owner
4540
+ if self.privilege_model_version is not None:
4541
+ body['privilege_model_version'] = self.privilege_model_version
4542
+ if self.region is not None: body['region'] = self.region
4543
+ if self.storage_root is not None: body['storage_root'] = self.storage_root
4544
+ if self.storage_root_credential_id is not None:
4545
+ body['storage_root_credential_id'] = self.storage_root_credential_id
4546
+ if self.storage_root_credential_name is not None:
4547
+ body['storage_root_credential_name'] = self.storage_root_credential_name
4548
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
4549
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
4550
+ return body
4551
+
3531
4552
  @classmethod
3532
4553
  def from_dict(cls, d: Dict[str, any]) -> MetastoreInfo:
3533
4554
  """Deserializes the MetastoreInfo from a dictionary."""
@@ -3647,6 +4668,31 @@ class ModelVersionInfo:
3647
4668
  if self.version is not None: body['version'] = self.version
3648
4669
  return body
3649
4670
 
4671
+ def as_shallow_dict(self) -> dict:
4672
+ """Serializes the ModelVersionInfo into a shallow dictionary of its immediate attributes."""
4673
+ body = {}
4674
+ if self.aliases: body['aliases'] = self.aliases
4675
+ if self.browse_only is not None: body['browse_only'] = self.browse_only
4676
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
4677
+ if self.comment is not None: body['comment'] = self.comment
4678
+ if self.created_at is not None: body['created_at'] = self.created_at
4679
+ if self.created_by is not None: body['created_by'] = self.created_by
4680
+ if self.id is not None: body['id'] = self.id
4681
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
4682
+ if self.model_name is not None: body['model_name'] = self.model_name
4683
+ if self.model_version_dependencies:
4684
+ body['model_version_dependencies'] = self.model_version_dependencies
4685
+ if self.run_id is not None: body['run_id'] = self.run_id
4686
+ if self.run_workspace_id is not None: body['run_workspace_id'] = self.run_workspace_id
4687
+ if self.schema_name is not None: body['schema_name'] = self.schema_name
4688
+ if self.source is not None: body['source'] = self.source
4689
+ if self.status is not None: body['status'] = self.status
4690
+ if self.storage_location is not None: body['storage_location'] = self.storage_location
4691
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
4692
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
4693
+ if self.version is not None: body['version'] = self.version
4694
+ return body
4695
+
3650
4696
  @classmethod
3651
4697
  def from_dict(cls, d: Dict[str, any]) -> ModelVersionInfo:
3652
4698
  """Deserializes the ModelVersionInfo from a dictionary."""
@@ -3703,6 +4749,15 @@ class MonitorCronSchedule:
3703
4749
  if self.timezone_id is not None: body['timezone_id'] = self.timezone_id
3704
4750
  return body
3705
4751
 
4752
+ def as_shallow_dict(self) -> dict:
4753
+ """Serializes the MonitorCronSchedule into a shallow dictionary of its immediate attributes."""
4754
+ body = {}
4755
+ if self.pause_status is not None: body['pause_status'] = self.pause_status
4756
+ if self.quartz_cron_expression is not None:
4757
+ body['quartz_cron_expression'] = self.quartz_cron_expression
4758
+ if self.timezone_id is not None: body['timezone_id'] = self.timezone_id
4759
+ return body
4760
+
3706
4761
  @classmethod
3707
4762
  def from_dict(cls, d: Dict[str, any]) -> MonitorCronSchedule:
3708
4763
  """Deserializes the MonitorCronSchedule from a dictionary."""
@@ -3729,6 +4784,12 @@ class MonitorDataClassificationConfig:
3729
4784
  if self.enabled is not None: body['enabled'] = self.enabled
3730
4785
  return body
3731
4786
 
4787
+ def as_shallow_dict(self) -> dict:
4788
+ """Serializes the MonitorDataClassificationConfig into a shallow dictionary of its immediate attributes."""
4789
+ body = {}
4790
+ if self.enabled is not None: body['enabled'] = self.enabled
4791
+ return body
4792
+
3732
4793
  @classmethod
3733
4794
  def from_dict(cls, d: Dict[str, any]) -> MonitorDataClassificationConfig:
3734
4795
  """Deserializes the MonitorDataClassificationConfig from a dictionary."""
@@ -3747,6 +4808,12 @@ class MonitorDestination:
3747
4808
  if self.email_addresses: body['email_addresses'] = [v for v in self.email_addresses]
3748
4809
  return body
3749
4810
 
4811
+ def as_shallow_dict(self) -> dict:
4812
+ """Serializes the MonitorDestination into a shallow dictionary of its immediate attributes."""
4813
+ body = {}
4814
+ if self.email_addresses: body['email_addresses'] = self.email_addresses
4815
+ return body
4816
+
3750
4817
  @classmethod
3751
4818
  def from_dict(cls, d: Dict[str, any]) -> MonitorDestination:
3752
4819
  """Deserializes the MonitorDestination from a dictionary."""
@@ -3798,6 +4865,18 @@ class MonitorInferenceLog:
3798
4865
  if self.timestamp_col is not None: body['timestamp_col'] = self.timestamp_col
3799
4866
  return body
3800
4867
 
4868
+ def as_shallow_dict(self) -> dict:
4869
+ """Serializes the MonitorInferenceLog into a shallow dictionary of its immediate attributes."""
4870
+ body = {}
4871
+ if self.granularities: body['granularities'] = self.granularities
4872
+ if self.label_col is not None: body['label_col'] = self.label_col
4873
+ if self.model_id_col is not None: body['model_id_col'] = self.model_id_col
4874
+ if self.prediction_col is not None: body['prediction_col'] = self.prediction_col
4875
+ if self.prediction_proba_col is not None: body['prediction_proba_col'] = self.prediction_proba_col
4876
+ if self.problem_type is not None: body['problem_type'] = self.problem_type
4877
+ if self.timestamp_col is not None: body['timestamp_col'] = self.timestamp_col
4878
+ return body
4879
+
3801
4880
  @classmethod
3802
4881
  def from_dict(cls, d: Dict[str, any]) -> MonitorInferenceLog:
3803
4882
  """Deserializes the MonitorInferenceLog from a dictionary."""
@@ -3887,26 +4966,53 @@ class MonitorInfo:
3887
4966
  body = {}
3888
4967
  if self.assets_dir is not None: body['assets_dir'] = self.assets_dir
3889
4968
  if self.baseline_table_name is not None: body['baseline_table_name'] = self.baseline_table_name
3890
- if self.custom_metrics: body['custom_metrics'] = [v.as_dict() for v in self.custom_metrics]
4969
+ if self.custom_metrics: body['custom_metrics'] = [v.as_dict() for v in self.custom_metrics]
4970
+ if self.dashboard_id is not None: body['dashboard_id'] = self.dashboard_id
4971
+ if self.data_classification_config:
4972
+ body['data_classification_config'] = self.data_classification_config.as_dict()
4973
+ if self.drift_metrics_table_name is not None:
4974
+ body['drift_metrics_table_name'] = self.drift_metrics_table_name
4975
+ if self.inference_log: body['inference_log'] = self.inference_log.as_dict()
4976
+ if self.latest_monitor_failure_msg is not None:
4977
+ body['latest_monitor_failure_msg'] = self.latest_monitor_failure_msg
4978
+ if self.monitor_version is not None: body['monitor_version'] = self.monitor_version
4979
+ if self.notifications: body['notifications'] = self.notifications.as_dict()
4980
+ if self.output_schema_name is not None: body['output_schema_name'] = self.output_schema_name
4981
+ if self.profile_metrics_table_name is not None:
4982
+ body['profile_metrics_table_name'] = self.profile_metrics_table_name
4983
+ if self.schedule: body['schedule'] = self.schedule.as_dict()
4984
+ if self.slicing_exprs: body['slicing_exprs'] = [v for v in self.slicing_exprs]
4985
+ if self.snapshot: body['snapshot'] = self.snapshot.as_dict()
4986
+ if self.status is not None: body['status'] = self.status.value
4987
+ if self.table_name is not None: body['table_name'] = self.table_name
4988
+ if self.time_series: body['time_series'] = self.time_series.as_dict()
4989
+ return body
4990
+
4991
+ def as_shallow_dict(self) -> dict:
4992
+ """Serializes the MonitorInfo into a shallow dictionary of its immediate attributes."""
4993
+ body = {}
4994
+ if self.assets_dir is not None: body['assets_dir'] = self.assets_dir
4995
+ if self.baseline_table_name is not None: body['baseline_table_name'] = self.baseline_table_name
4996
+ if self.custom_metrics: body['custom_metrics'] = self.custom_metrics
3891
4997
  if self.dashboard_id is not None: body['dashboard_id'] = self.dashboard_id
3892
4998
  if self.data_classification_config:
3893
- body['data_classification_config'] = self.data_classification_config.as_dict()
4999
+ body['data_classification_config'] = self.data_classification_config
3894
5000
  if self.drift_metrics_table_name is not None:
3895
5001
  body['drift_metrics_table_name'] = self.drift_metrics_table_name
3896
- if self.inference_log: body['inference_log'] = self.inference_log.as_dict()
5002
+ if self.inference_log: body['inference_log'] = self.inference_log
3897
5003
  if self.latest_monitor_failure_msg is not None:
3898
5004
  body['latest_monitor_failure_msg'] = self.latest_monitor_failure_msg
3899
5005
  if self.monitor_version is not None: body['monitor_version'] = self.monitor_version
3900
- if self.notifications: body['notifications'] = self.notifications.as_dict()
5006
+ if self.notifications: body['notifications'] = self.notifications
3901
5007
  if self.output_schema_name is not None: body['output_schema_name'] = self.output_schema_name
3902
5008
  if self.profile_metrics_table_name is not None:
3903
5009
  body['profile_metrics_table_name'] = self.profile_metrics_table_name
3904
- if self.schedule: body['schedule'] = self.schedule.as_dict()
3905
- if self.slicing_exprs: body['slicing_exprs'] = [v for v in self.slicing_exprs]
3906
- if self.snapshot: body['snapshot'] = self.snapshot.as_dict()
3907
- if self.status is not None: body['status'] = self.status.value
5010
+ if self.schedule: body['schedule'] = self.schedule
5011
+ if self.slicing_exprs: body['slicing_exprs'] = self.slicing_exprs
5012
+ if self.snapshot: body['snapshot'] = self.snapshot
5013
+ if self.status is not None: body['status'] = self.status
3908
5014
  if self.table_name is not None: body['table_name'] = self.table_name
3909
- if self.time_series: body['time_series'] = self.time_series.as_dict()
5015
+ if self.time_series: body['time_series'] = self.time_series
3910
5016
  return body
3911
5017
 
3912
5018
  @classmethod
@@ -3980,6 +5086,16 @@ class MonitorMetric:
3980
5086
  if self.type is not None: body['type'] = self.type.value
3981
5087
  return body
3982
5088
 
5089
+ def as_shallow_dict(self) -> dict:
5090
+ """Serializes the MonitorMetric into a shallow dictionary of its immediate attributes."""
5091
+ body = {}
5092
+ if self.definition is not None: body['definition'] = self.definition
5093
+ if self.input_columns: body['input_columns'] = self.input_columns
5094
+ if self.name is not None: body['name'] = self.name
5095
+ if self.output_data_type is not None: body['output_data_type'] = self.output_data_type
5096
+ if self.type is not None: body['type'] = self.type
5097
+ return body
5098
+
3983
5099
  @classmethod
3984
5100
  def from_dict(cls, d: Dict[str, any]) -> MonitorMetric:
3985
5101
  """Deserializes the MonitorMetric from a dictionary."""
@@ -4020,6 +5136,14 @@ class MonitorNotifications:
4020
5136
  body['on_new_classification_tag_detected'] = self.on_new_classification_tag_detected.as_dict()
4021
5137
  return body
4022
5138
 
5139
+ def as_shallow_dict(self) -> dict:
5140
+ """Serializes the MonitorNotifications into a shallow dictionary of its immediate attributes."""
5141
+ body = {}
5142
+ if self.on_failure: body['on_failure'] = self.on_failure
5143
+ if self.on_new_classification_tag_detected:
5144
+ body['on_new_classification_tag_detected'] = self.on_new_classification_tag_detected
5145
+ return body
5146
+
4023
5147
  @classmethod
4024
5148
  def from_dict(cls, d: Dict[str, any]) -> MonitorNotifications:
4025
5149
  """Deserializes the MonitorNotifications from a dictionary."""
@@ -4059,6 +5183,17 @@ class MonitorRefreshInfo:
4059
5183
  if self.trigger is not None: body['trigger'] = self.trigger.value
4060
5184
  return body
4061
5185
 
5186
+ def as_shallow_dict(self) -> dict:
5187
+ """Serializes the MonitorRefreshInfo into a shallow dictionary of its immediate attributes."""
5188
+ body = {}
5189
+ if self.end_time_ms is not None: body['end_time_ms'] = self.end_time_ms
5190
+ if self.message is not None: body['message'] = self.message
5191
+ if self.refresh_id is not None: body['refresh_id'] = self.refresh_id
5192
+ if self.start_time_ms is not None: body['start_time_ms'] = self.start_time_ms
5193
+ if self.state is not None: body['state'] = self.state
5194
+ if self.trigger is not None: body['trigger'] = self.trigger
5195
+ return body
5196
+
4062
5197
  @classmethod
4063
5198
  def from_dict(cls, d: Dict[str, any]) -> MonitorRefreshInfo:
4064
5199
  """Deserializes the MonitorRefreshInfo from a dictionary."""
@@ -4098,6 +5233,12 @@ class MonitorRefreshListResponse:
4098
5233
  if self.refreshes: body['refreshes'] = [v.as_dict() for v in self.refreshes]
4099
5234
  return body
4100
5235
 
5236
+ def as_shallow_dict(self) -> dict:
5237
+ """Serializes the MonitorRefreshListResponse into a shallow dictionary of its immediate attributes."""
5238
+ body = {}
5239
+ if self.refreshes: body['refreshes'] = self.refreshes
5240
+ return body
5241
+
4101
5242
  @classmethod
4102
5243
  def from_dict(cls, d: Dict[str, any]) -> MonitorRefreshListResponse:
4103
5244
  """Deserializes the MonitorRefreshListResponse from a dictionary."""
@@ -4112,6 +5253,11 @@ class MonitorSnapshot:
4112
5253
  body = {}
4113
5254
  return body
4114
5255
 
5256
+ def as_shallow_dict(self) -> dict:
5257
+ """Serializes the MonitorSnapshot into a shallow dictionary of its immediate attributes."""
5258
+ body = {}
5259
+ return body
5260
+
4115
5261
  @classmethod
4116
5262
  def from_dict(cls, d: Dict[str, any]) -> MonitorSnapshot:
4117
5263
  """Deserializes the MonitorSnapshot from a dictionary."""
@@ -4139,6 +5285,13 @@ class MonitorTimeSeries:
4139
5285
  if self.timestamp_col is not None: body['timestamp_col'] = self.timestamp_col
4140
5286
  return body
4141
5287
 
5288
+ def as_shallow_dict(self) -> dict:
5289
+ """Serializes the MonitorTimeSeries into a shallow dictionary of its immediate attributes."""
5290
+ body = {}
5291
+ if self.granularities: body['granularities'] = self.granularities
5292
+ if self.timestamp_col is not None: body['timestamp_col'] = self.timestamp_col
5293
+ return body
5294
+
4142
5295
  @classmethod
4143
5296
  def from_dict(cls, d: Dict[str, any]) -> MonitorTimeSeries:
4144
5297
  """Deserializes the MonitorTimeSeries from a dictionary."""
@@ -4156,6 +5309,12 @@ class NamedTableConstraint:
4156
5309
  if self.name is not None: body['name'] = self.name
4157
5310
  return body
4158
5311
 
5312
+ def as_shallow_dict(self) -> dict:
5313
+ """Serializes the NamedTableConstraint into a shallow dictionary of its immediate attributes."""
5314
+ body = {}
5315
+ if self.name is not None: body['name'] = self.name
5316
+ return body
5317
+
4159
5318
  @classmethod
4160
5319
  def from_dict(cls, d: Dict[str, any]) -> NamedTableConstraint:
4161
5320
  """Deserializes the NamedTableConstraint from a dictionary."""
@@ -4194,6 +5353,17 @@ class OnlineTable:
4194
5353
  body['unity_catalog_provisioning_state'] = self.unity_catalog_provisioning_state.value
4195
5354
  return body
4196
5355
 
5356
+ def as_shallow_dict(self) -> dict:
5357
+ """Serializes the OnlineTable into a shallow dictionary of its immediate attributes."""
5358
+ body = {}
5359
+ if self.name is not None: body['name'] = self.name
5360
+ if self.spec: body['spec'] = self.spec
5361
+ if self.status: body['status'] = self.status
5362
+ if self.table_serving_url is not None: body['table_serving_url'] = self.table_serving_url
5363
+ if self.unity_catalog_provisioning_state is not None:
5364
+ body['unity_catalog_provisioning_state'] = self.unity_catalog_provisioning_state
5365
+ return body
5366
+
4197
5367
  @classmethod
4198
5368
  def from_dict(cls, d: Dict[str, any]) -> OnlineTable:
4199
5369
  """Deserializes the OnlineTable from a dictionary."""
@@ -4249,6 +5419,19 @@ class OnlineTableSpec:
4249
5419
  if self.timeseries_key is not None: body['timeseries_key'] = self.timeseries_key
4250
5420
  return body
4251
5421
 
5422
+ def as_shallow_dict(self) -> dict:
5423
+ """Serializes the OnlineTableSpec into a shallow dictionary of its immediate attributes."""
5424
+ body = {}
5425
+ if self.perform_full_copy is not None: body['perform_full_copy'] = self.perform_full_copy
5426
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
5427
+ if self.primary_key_columns: body['primary_key_columns'] = self.primary_key_columns
5428
+ if self.run_continuously: body['run_continuously'] = self.run_continuously
5429
+ if self.run_triggered: body['run_triggered'] = self.run_triggered
5430
+ if self.source_table_full_name is not None:
5431
+ body['source_table_full_name'] = self.source_table_full_name
5432
+ if self.timeseries_key is not None: body['timeseries_key'] = self.timeseries_key
5433
+ return body
5434
+
4252
5435
  @classmethod
4253
5436
  def from_dict(cls, d: Dict[str, any]) -> OnlineTableSpec:
4254
5437
  """Deserializes the OnlineTableSpec from a dictionary."""
@@ -4270,6 +5453,11 @@ class OnlineTableSpecContinuousSchedulingPolicy:
4270
5453
  body = {}
4271
5454
  return body
4272
5455
 
5456
+ def as_shallow_dict(self) -> dict:
5457
+ """Serializes the OnlineTableSpecContinuousSchedulingPolicy into a shallow dictionary of its immediate attributes."""
5458
+ body = {}
5459
+ return body
5460
+
4273
5461
  @classmethod
4274
5462
  def from_dict(cls, d: Dict[str, any]) -> OnlineTableSpecContinuousSchedulingPolicy:
4275
5463
  """Deserializes the OnlineTableSpecContinuousSchedulingPolicy from a dictionary."""
@@ -4284,6 +5472,11 @@ class OnlineTableSpecTriggeredSchedulingPolicy:
4284
5472
  body = {}
4285
5473
  return body
4286
5474
 
5475
+ def as_shallow_dict(self) -> dict:
5476
+ """Serializes the OnlineTableSpecTriggeredSchedulingPolicy into a shallow dictionary of its immediate attributes."""
5477
+ body = {}
5478
+ return body
5479
+
4287
5480
  @classmethod
4288
5481
  def from_dict(cls, d: Dict[str, any]) -> OnlineTableSpecTriggeredSchedulingPolicy:
4289
5482
  """Deserializes the OnlineTableSpecTriggeredSchedulingPolicy from a dictionary."""
@@ -4345,6 +5538,17 @@ class OnlineTableStatus:
4345
5538
  body['triggered_update_status'] = self.triggered_update_status.as_dict()
4346
5539
  return body
4347
5540
 
5541
+ def as_shallow_dict(self) -> dict:
5542
+ """Serializes the OnlineTableStatus into a shallow dictionary of its immediate attributes."""
5543
+ body = {}
5544
+ if self.continuous_update_status: body['continuous_update_status'] = self.continuous_update_status
5545
+ if self.detailed_state is not None: body['detailed_state'] = self.detailed_state
5546
+ if self.failed_status: body['failed_status'] = self.failed_status
5547
+ if self.message is not None: body['message'] = self.message
5548
+ if self.provisioning_status: body['provisioning_status'] = self.provisioning_status
5549
+ if self.triggered_update_status: body['triggered_update_status'] = self.triggered_update_status
5550
+ return body
5551
+
4348
5552
  @classmethod
4349
5553
  def from_dict(cls, d: Dict[str, any]) -> OnlineTableStatus:
4350
5554
  """Deserializes the OnlineTableStatus from a dictionary."""
@@ -4375,6 +5579,14 @@ class PermissionsChange:
4375
5579
  if self.remove: body['remove'] = [v.value for v in self.remove]
4376
5580
  return body
4377
5581
 
5582
+ def as_shallow_dict(self) -> dict:
5583
+ """Serializes the PermissionsChange into a shallow dictionary of its immediate attributes."""
5584
+ body = {}
5585
+ if self.add: body['add'] = self.add
5586
+ if self.principal is not None: body['principal'] = self.principal
5587
+ if self.remove: body['remove'] = self.remove
5588
+ return body
5589
+
4378
5590
  @classmethod
4379
5591
  def from_dict(cls, d: Dict[str, any]) -> PermissionsChange:
4380
5592
  """Deserializes the PermissionsChange from a dictionary."""
@@ -4395,6 +5607,12 @@ class PermissionsList:
4395
5607
  body['privilege_assignments'] = [v.as_dict() for v in self.privilege_assignments]
4396
5608
  return body
4397
5609
 
5610
+ def as_shallow_dict(self) -> dict:
5611
+ """Serializes the PermissionsList into a shallow dictionary of its immediate attributes."""
5612
+ body = {}
5613
+ if self.privilege_assignments: body['privilege_assignments'] = self.privilege_assignments
5614
+ return body
5615
+
4398
5616
  @classmethod
4399
5617
  def from_dict(cls, d: Dict[str, any]) -> PermissionsList:
4400
5618
  """Deserializes the PermissionsList from a dictionary."""
@@ -4434,6 +5652,19 @@ class PipelineProgress:
4434
5652
  if self.total_row_count is not None: body['total_row_count'] = self.total_row_count
4435
5653
  return body
4436
5654
 
5655
+ def as_shallow_dict(self) -> dict:
5656
+ """Serializes the PipelineProgress into a shallow dictionary of its immediate attributes."""
5657
+ body = {}
5658
+ if self.estimated_completion_time_seconds is not None:
5659
+ body['estimated_completion_time_seconds'] = self.estimated_completion_time_seconds
5660
+ if self.latest_version_currently_processing is not None:
5661
+ body['latest_version_currently_processing'] = self.latest_version_currently_processing
5662
+ if self.sync_progress_completion is not None:
5663
+ body['sync_progress_completion'] = self.sync_progress_completion
5664
+ if self.synced_row_count is not None: body['synced_row_count'] = self.synced_row_count
5665
+ if self.total_row_count is not None: body['total_row_count'] = self.total_row_count
5666
+ return body
5667
+
4437
5668
  @classmethod
4438
5669
  def from_dict(cls, d: Dict[str, any]) -> PipelineProgress:
4439
5670
  """Deserializes the PipelineProgress from a dictionary."""
@@ -4459,6 +5690,13 @@ class PrimaryKeyConstraint:
4459
5690
  if self.name is not None: body['name'] = self.name
4460
5691
  return body
4461
5692
 
5693
+ def as_shallow_dict(self) -> dict:
5694
+ """Serializes the PrimaryKeyConstraint into a shallow dictionary of its immediate attributes."""
5695
+ body = {}
5696
+ if self.child_columns: body['child_columns'] = self.child_columns
5697
+ if self.name is not None: body['name'] = self.name
5698
+ return body
5699
+
4462
5700
  @classmethod
4463
5701
  def from_dict(cls, d: Dict[str, any]) -> PrimaryKeyConstraint:
4464
5702
  """Deserializes the PrimaryKeyConstraint from a dictionary."""
@@ -4477,6 +5715,7 @@ class Privilege(Enum):
4477
5715
  CREATE_EXTERNAL_TABLE = 'CREATE_EXTERNAL_TABLE'
4478
5716
  CREATE_EXTERNAL_VOLUME = 'CREATE_EXTERNAL_VOLUME'
4479
5717
  CREATE_FOREIGN_CATALOG = 'CREATE_FOREIGN_CATALOG'
5718
+ CREATE_FOREIGN_SECURABLE = 'CREATE_FOREIGN_SECURABLE'
4480
5719
  CREATE_FUNCTION = 'CREATE_FUNCTION'
4481
5720
  CREATE_MANAGED_STORAGE = 'CREATE_MANAGED_STORAGE'
4482
5721
  CREATE_MATERIALIZED_VIEW = 'CREATE_MATERIALIZED_VIEW'
@@ -4528,6 +5767,13 @@ class PrivilegeAssignment:
4528
5767
  if self.privileges: body['privileges'] = [v.value for v in self.privileges]
4529
5768
  return body
4530
5769
 
5770
+ def as_shallow_dict(self) -> dict:
5771
+ """Serializes the PrivilegeAssignment into a shallow dictionary of its immediate attributes."""
5772
+ body = {}
5773
+ if self.principal is not None: body['principal'] = self.principal
5774
+ if self.privileges: body['privileges'] = self.privileges
5775
+ return body
5776
+
4531
5777
  @classmethod
4532
5778
  def from_dict(cls, d: Dict[str, any]) -> PrivilegeAssignment:
4533
5779
  """Deserializes the PrivilegeAssignment from a dictionary."""
@@ -4549,6 +5795,12 @@ class ProvisioningInfo:
4549
5795
  if self.state is not None: body['state'] = self.state.value
4550
5796
  return body
4551
5797
 
5798
+ def as_shallow_dict(self) -> dict:
5799
+ """Serializes the ProvisioningInfo into a shallow dictionary of its immediate attributes."""
5800
+ body = {}
5801
+ if self.state is not None: body['state'] = self.state
5802
+ return body
5803
+
4552
5804
  @classmethod
4553
5805
  def from_dict(cls, d: Dict[str, any]) -> ProvisioningInfo:
4554
5806
  """Deserializes the ProvisioningInfo from a dictionary."""
@@ -4580,6 +5832,13 @@ class ProvisioningStatus:
4580
5832
  body['initial_pipeline_sync_progress'] = self.initial_pipeline_sync_progress.as_dict()
4581
5833
  return body
4582
5834
 
5835
+ def as_shallow_dict(self) -> dict:
5836
+ """Serializes the ProvisioningStatus into a shallow dictionary of its immediate attributes."""
5837
+ body = {}
5838
+ if self.initial_pipeline_sync_progress:
5839
+ body['initial_pipeline_sync_progress'] = self.initial_pipeline_sync_progress
5840
+ return body
5841
+
4583
5842
  @classmethod
4584
5843
  def from_dict(cls, d: Dict[str, any]) -> ProvisioningStatus:
4585
5844
  """Deserializes the ProvisioningStatus from a dictionary."""
@@ -4619,6 +5878,17 @@ class QuotaInfo:
4619
5878
  if self.quota_name is not None: body['quota_name'] = self.quota_name
4620
5879
  return body
4621
5880
 
5881
+ def as_shallow_dict(self) -> dict:
5882
+ """Serializes the QuotaInfo into a shallow dictionary of its immediate attributes."""
5883
+ body = {}
5884
+ if self.last_refreshed_at is not None: body['last_refreshed_at'] = self.last_refreshed_at
5885
+ if self.parent_full_name is not None: body['parent_full_name'] = self.parent_full_name
5886
+ if self.parent_securable_type is not None: body['parent_securable_type'] = self.parent_securable_type
5887
+ if self.quota_count is not None: body['quota_count'] = self.quota_count
5888
+ if self.quota_limit is not None: body['quota_limit'] = self.quota_limit
5889
+ if self.quota_name is not None: body['quota_name'] = self.quota_name
5890
+ return body
5891
+
4622
5892
  @classmethod
4623
5893
  def from_dict(cls, d: Dict[str, any]) -> QuotaInfo:
4624
5894
  """Deserializes the QuotaInfo from a dictionary."""
@@ -4652,6 +5922,14 @@ class R2Credentials:
4652
5922
  if self.session_token is not None: body['session_token'] = self.session_token
4653
5923
  return body
4654
5924
 
5925
+ def as_shallow_dict(self) -> dict:
5926
+ """Serializes the R2Credentials into a shallow dictionary of its immediate attributes."""
5927
+ body = {}
5928
+ if self.access_key_id is not None: body['access_key_id'] = self.access_key_id
5929
+ if self.secret_access_key is not None: body['secret_access_key'] = self.secret_access_key
5930
+ if self.session_token is not None: body['session_token'] = self.session_token
5931
+ return body
5932
+
4655
5933
  @classmethod
4656
5934
  def from_dict(cls, d: Dict[str, any]) -> R2Credentials:
4657
5935
  """Deserializes the R2Credentials from a dictionary."""
@@ -4676,6 +5954,13 @@ class RegenerateDashboardRequest:
4676
5954
  if self.warehouse_id is not None: body['warehouse_id'] = self.warehouse_id
4677
5955
  return body
4678
5956
 
5957
+ def as_shallow_dict(self) -> dict:
5958
+ """Serializes the RegenerateDashboardRequest into a shallow dictionary of its immediate attributes."""
5959
+ body = {}
5960
+ if self.table_name is not None: body['table_name'] = self.table_name
5961
+ if self.warehouse_id is not None: body['warehouse_id'] = self.warehouse_id
5962
+ return body
5963
+
4679
5964
  @classmethod
4680
5965
  def from_dict(cls, d: Dict[str, any]) -> RegenerateDashboardRequest:
4681
5966
  """Deserializes the RegenerateDashboardRequest from a dictionary."""
@@ -4697,6 +5982,13 @@ class RegenerateDashboardResponse:
4697
5982
  if self.parent_folder is not None: body['parent_folder'] = self.parent_folder
4698
5983
  return body
4699
5984
 
5985
+ def as_shallow_dict(self) -> dict:
5986
+ """Serializes the RegenerateDashboardResponse into a shallow dictionary of its immediate attributes."""
5987
+ body = {}
5988
+ if self.dashboard_id is not None: body['dashboard_id'] = self.dashboard_id
5989
+ if self.parent_folder is not None: body['parent_folder'] = self.parent_folder
5990
+ return body
5991
+
4700
5992
  @classmethod
4701
5993
  def from_dict(cls, d: Dict[str, any]) -> RegenerateDashboardResponse:
4702
5994
  """Deserializes the RegenerateDashboardResponse from a dictionary."""
@@ -4720,6 +6012,13 @@ class RegisteredModelAlias:
4720
6012
  if self.version_num is not None: body['version_num'] = self.version_num
4721
6013
  return body
4722
6014
 
6015
+ def as_shallow_dict(self) -> dict:
6016
+ """Serializes the RegisteredModelAlias into a shallow dictionary of its immediate attributes."""
6017
+ body = {}
6018
+ if self.alias_name is not None: body['alias_name'] = self.alias_name
6019
+ if self.version_num is not None: body['version_num'] = self.version_num
6020
+ return body
6021
+
4723
6022
  @classmethod
4724
6023
  def from_dict(cls, d: Dict[str, any]) -> RegisteredModelAlias:
4725
6024
  """Deserializes the RegisteredModelAlias from a dictionary."""
@@ -4790,6 +6089,25 @@ class RegisteredModelInfo:
4790
6089
  if self.updated_by is not None: body['updated_by'] = self.updated_by
4791
6090
  return body
4792
6091
 
6092
+ def as_shallow_dict(self) -> dict:
6093
+ """Serializes the RegisteredModelInfo into a shallow dictionary of its immediate attributes."""
6094
+ body = {}
6095
+ if self.aliases: body['aliases'] = self.aliases
6096
+ if self.browse_only is not None: body['browse_only'] = self.browse_only
6097
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
6098
+ if self.comment is not None: body['comment'] = self.comment
6099
+ if self.created_at is not None: body['created_at'] = self.created_at
6100
+ if self.created_by is not None: body['created_by'] = self.created_by
6101
+ if self.full_name is not None: body['full_name'] = self.full_name
6102
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
6103
+ if self.name is not None: body['name'] = self.name
6104
+ if self.owner is not None: body['owner'] = self.owner
6105
+ if self.schema_name is not None: body['schema_name'] = self.schema_name
6106
+ if self.storage_location is not None: body['storage_location'] = self.storage_location
6107
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
6108
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
6109
+ return body
6110
+
4793
6111
  @classmethod
4794
6112
  def from_dict(cls, d: Dict[str, any]) -> RegisteredModelInfo:
4795
6113
  """Deserializes the RegisteredModelInfo from a dictionary."""
@@ -4892,6 +6210,31 @@ class SchemaInfo:
4892
6210
  if self.updated_by is not None: body['updated_by'] = self.updated_by
4893
6211
  return body
4894
6212
 
6213
+ def as_shallow_dict(self) -> dict:
6214
+ """Serializes the SchemaInfo into a shallow dictionary of its immediate attributes."""
6215
+ body = {}
6216
+ if self.browse_only is not None: body['browse_only'] = self.browse_only
6217
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
6218
+ if self.catalog_type is not None: body['catalog_type'] = self.catalog_type
6219
+ if self.comment is not None: body['comment'] = self.comment
6220
+ if self.created_at is not None: body['created_at'] = self.created_at
6221
+ if self.created_by is not None: body['created_by'] = self.created_by
6222
+ if self.effective_predictive_optimization_flag:
6223
+ body['effective_predictive_optimization_flag'] = self.effective_predictive_optimization_flag
6224
+ if self.enable_predictive_optimization is not None:
6225
+ body['enable_predictive_optimization'] = self.enable_predictive_optimization
6226
+ if self.full_name is not None: body['full_name'] = self.full_name
6227
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
6228
+ if self.name is not None: body['name'] = self.name
6229
+ if self.owner is not None: body['owner'] = self.owner
6230
+ if self.properties: body['properties'] = self.properties
6231
+ if self.schema_id is not None: body['schema_id'] = self.schema_id
6232
+ if self.storage_location is not None: body['storage_location'] = self.storage_location
6233
+ if self.storage_root is not None: body['storage_root'] = self.storage_root
6234
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
6235
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
6236
+ return body
6237
+
4895
6238
  @classmethod
4896
6239
  def from_dict(cls, d: Dict[str, any]) -> SchemaInfo:
4897
6240
  """Deserializes the SchemaInfo from a dictionary."""
@@ -4956,6 +6299,13 @@ class SetArtifactAllowlist:
4956
6299
  if self.artifact_type is not None: body['artifact_type'] = self.artifact_type.value
4957
6300
  return body
4958
6301
 
6302
+ def as_shallow_dict(self) -> dict:
6303
+ """Serializes the SetArtifactAllowlist into a shallow dictionary of its immediate attributes."""
6304
+ body = {}
6305
+ if self.artifact_matchers: body['artifact_matchers'] = self.artifact_matchers
6306
+ if self.artifact_type is not None: body['artifact_type'] = self.artifact_type
6307
+ return body
6308
+
4959
6309
  @classmethod
4960
6310
  def from_dict(cls, d: Dict[str, any]) -> SetArtifactAllowlist:
4961
6311
  """Deserializes the SetArtifactAllowlist from a dictionary."""
@@ -4982,6 +6332,14 @@ class SetRegisteredModelAliasRequest:
4982
6332
  if self.version_num is not None: body['version_num'] = self.version_num
4983
6333
  return body
4984
6334
 
6335
+ def as_shallow_dict(self) -> dict:
6336
+ """Serializes the SetRegisteredModelAliasRequest into a shallow dictionary of its immediate attributes."""
6337
+ body = {}
6338
+ if self.alias is not None: body['alias'] = self.alias
6339
+ if self.full_name is not None: body['full_name'] = self.full_name
6340
+ if self.version_num is not None: body['version_num'] = self.version_num
6341
+ return body
6342
+
4985
6343
  @classmethod
4986
6344
  def from_dict(cls, d: Dict[str, any]) -> SetRegisteredModelAliasRequest:
4987
6345
  """Deserializes the SetRegisteredModelAliasRequest from a dictionary."""
@@ -5007,6 +6365,13 @@ class SseEncryptionDetails:
5007
6365
  if self.aws_kms_key_arn is not None: body['aws_kms_key_arn'] = self.aws_kms_key_arn
5008
6366
  return body
5009
6367
 
6368
+ def as_shallow_dict(self) -> dict:
6369
+ """Serializes the SseEncryptionDetails into a shallow dictionary of its immediate attributes."""
6370
+ body = {}
6371
+ if self.algorithm is not None: body['algorithm'] = self.algorithm
6372
+ if self.aws_kms_key_arn is not None: body['aws_kms_key_arn'] = self.aws_kms_key_arn
6373
+ return body
6374
+
5010
6375
  @classmethod
5011
6376
  def from_dict(cls, d: Dict[str, any]) -> SseEncryptionDetails:
5012
6377
  """Deserializes the SseEncryptionDetails from a dictionary."""
@@ -5102,6 +6467,31 @@ class StorageCredentialInfo:
5102
6467
  body['used_for_managed_storage'] = self.used_for_managed_storage
5103
6468
  return body
5104
6469
 
6470
+ def as_shallow_dict(self) -> dict:
6471
+ """Serializes the StorageCredentialInfo into a shallow dictionary of its immediate attributes."""
6472
+ body = {}
6473
+ if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role
6474
+ if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity
6475
+ if self.azure_service_principal: body['azure_service_principal'] = self.azure_service_principal
6476
+ if self.cloudflare_api_token: body['cloudflare_api_token'] = self.cloudflare_api_token
6477
+ if self.comment is not None: body['comment'] = self.comment
6478
+ if self.created_at is not None: body['created_at'] = self.created_at
6479
+ if self.created_by is not None: body['created_by'] = self.created_by
6480
+ if self.databricks_gcp_service_account:
6481
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account
6482
+ if self.full_name is not None: body['full_name'] = self.full_name
6483
+ if self.id is not None: body['id'] = self.id
6484
+ if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode
6485
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
6486
+ if self.name is not None: body['name'] = self.name
6487
+ if self.owner is not None: body['owner'] = self.owner
6488
+ if self.read_only is not None: body['read_only'] = self.read_only
6489
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
6490
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
6491
+ if self.used_for_managed_storage is not None:
6492
+ body['used_for_managed_storage'] = self.used_for_managed_storage
6493
+ return body
6494
+
5105
6495
  @classmethod
5106
6496
  def from_dict(cls, d: Dict[str, any]) -> StorageCredentialInfo:
5107
6497
  """Deserializes the StorageCredentialInfo from a dictionary."""
@@ -5143,6 +6533,13 @@ class SystemSchemaInfo:
5143
6533
  if self.state is not None: body['state'] = self.state.value
5144
6534
  return body
5145
6535
 
6536
+ def as_shallow_dict(self) -> dict:
6537
+ """Serializes the SystemSchemaInfo into a shallow dictionary of its immediate attributes."""
6538
+ body = {}
6539
+ if self.schema is not None: body['schema'] = self.schema
6540
+ if self.state is not None: body['state'] = self.state
6541
+ return body
6542
+
5146
6543
  @classmethod
5147
6544
  def from_dict(cls, d: Dict[str, any]) -> SystemSchemaInfo:
5148
6545
  """Deserializes the SystemSchemaInfo from a dictionary."""
@@ -5179,6 +6576,14 @@ class TableConstraint:
5179
6576
  if self.primary_key_constraint: body['primary_key_constraint'] = self.primary_key_constraint.as_dict()
5180
6577
  return body
5181
6578
 
6579
+ def as_shallow_dict(self) -> dict:
6580
+ """Serializes the TableConstraint into a shallow dictionary of its immediate attributes."""
6581
+ body = {}
6582
+ if self.foreign_key_constraint: body['foreign_key_constraint'] = self.foreign_key_constraint
6583
+ if self.named_table_constraint: body['named_table_constraint'] = self.named_table_constraint
6584
+ if self.primary_key_constraint: body['primary_key_constraint'] = self.primary_key_constraint
6585
+ return body
6586
+
5182
6587
  @classmethod
5183
6588
  def from_dict(cls, d: Dict[str, any]) -> TableConstraint:
5184
6589
  """Deserializes the TableConstraint from a dictionary."""
@@ -5201,6 +6606,12 @@ class TableDependency:
5201
6606
  if self.table_full_name is not None: body['table_full_name'] = self.table_full_name
5202
6607
  return body
5203
6608
 
6609
+ def as_shallow_dict(self) -> dict:
6610
+ """Serializes the TableDependency into a shallow dictionary of its immediate attributes."""
6611
+ body = {}
6612
+ if self.table_full_name is not None: body['table_full_name'] = self.table_full_name
6613
+ return body
6614
+
5204
6615
  @classmethod
5205
6616
  def from_dict(cls, d: Dict[str, any]) -> TableDependency:
5206
6617
  """Deserializes the TableDependency from a dictionary."""
@@ -5218,6 +6629,12 @@ class TableExistsResponse:
5218
6629
  if self.table_exists is not None: body['table_exists'] = self.table_exists
5219
6630
  return body
5220
6631
 
6632
+ def as_shallow_dict(self) -> dict:
6633
+ """Serializes the TableExistsResponse into a shallow dictionary of its immediate attributes."""
6634
+ body = {}
6635
+ if self.table_exists is not None: body['table_exists'] = self.table_exists
6636
+ return body
6637
+
5221
6638
  @classmethod
5222
6639
  def from_dict(cls, d: Dict[str, any]) -> TableExistsResponse:
5223
6640
  """Deserializes the TableExistsResponse from a dictionary."""
@@ -5370,6 +6787,48 @@ class TableInfo:
5370
6787
  if self.view_dependencies: body['view_dependencies'] = self.view_dependencies.as_dict()
5371
6788
  return body
5372
6789
 
6790
+ def as_shallow_dict(self) -> dict:
6791
+ """Serializes the TableInfo into a shallow dictionary of its immediate attributes."""
6792
+ body = {}
6793
+ if self.access_point is not None: body['access_point'] = self.access_point
6794
+ if self.browse_only is not None: body['browse_only'] = self.browse_only
6795
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
6796
+ if self.columns: body['columns'] = self.columns
6797
+ if self.comment is not None: body['comment'] = self.comment
6798
+ if self.created_at is not None: body['created_at'] = self.created_at
6799
+ if self.created_by is not None: body['created_by'] = self.created_by
6800
+ if self.data_access_configuration_id is not None:
6801
+ body['data_access_configuration_id'] = self.data_access_configuration_id
6802
+ if self.data_source_format is not None: body['data_source_format'] = self.data_source_format
6803
+ if self.deleted_at is not None: body['deleted_at'] = self.deleted_at
6804
+ if self.delta_runtime_properties_kvpairs:
6805
+ body['delta_runtime_properties_kvpairs'] = self.delta_runtime_properties_kvpairs
6806
+ if self.effective_predictive_optimization_flag:
6807
+ body['effective_predictive_optimization_flag'] = self.effective_predictive_optimization_flag
6808
+ if self.enable_predictive_optimization is not None:
6809
+ body['enable_predictive_optimization'] = self.enable_predictive_optimization
6810
+ if self.encryption_details: body['encryption_details'] = self.encryption_details
6811
+ if self.full_name is not None: body['full_name'] = self.full_name
6812
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
6813
+ if self.name is not None: body['name'] = self.name
6814
+ if self.owner is not None: body['owner'] = self.owner
6815
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
6816
+ if self.properties: body['properties'] = self.properties
6817
+ if self.row_filter: body['row_filter'] = self.row_filter
6818
+ if self.schema_name is not None: body['schema_name'] = self.schema_name
6819
+ if self.sql_path is not None: body['sql_path'] = self.sql_path
6820
+ if self.storage_credential_name is not None:
6821
+ body['storage_credential_name'] = self.storage_credential_name
6822
+ if self.storage_location is not None: body['storage_location'] = self.storage_location
6823
+ if self.table_constraints: body['table_constraints'] = self.table_constraints
6824
+ if self.table_id is not None: body['table_id'] = self.table_id
6825
+ if self.table_type is not None: body['table_type'] = self.table_type
6826
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
6827
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
6828
+ if self.view_definition is not None: body['view_definition'] = self.view_definition
6829
+ if self.view_dependencies: body['view_dependencies'] = self.view_dependencies
6830
+ return body
6831
+
5373
6832
  @classmethod
5374
6833
  def from_dict(cls, d: Dict[str, any]) -> TableInfo:
5375
6834
  """Deserializes the TableInfo from a dictionary."""
@@ -5432,6 +6891,13 @@ class TableRowFilter:
5432
6891
  if self.input_column_names: body['input_column_names'] = [v for v in self.input_column_names]
5433
6892
  return body
5434
6893
 
6894
+ def as_shallow_dict(self) -> dict:
6895
+ """Serializes the TableRowFilter into a shallow dictionary of its immediate attributes."""
6896
+ body = {}
6897
+ if self.function_name is not None: body['function_name'] = self.function_name
6898
+ if self.input_column_names: body['input_column_names'] = self.input_column_names
6899
+ return body
6900
+
5435
6901
  @classmethod
5436
6902
  def from_dict(cls, d: Dict[str, any]) -> TableRowFilter:
5437
6903
  """Deserializes the TableRowFilter from a dictionary."""
@@ -5453,6 +6919,13 @@ class TableSummary:
5453
6919
  if self.table_type is not None: body['table_type'] = self.table_type.value
5454
6920
  return body
5455
6921
 
6922
+ def as_shallow_dict(self) -> dict:
6923
+ """Serializes the TableSummary into a shallow dictionary of its immediate attributes."""
6924
+ body = {}
6925
+ if self.full_name is not None: body['full_name'] = self.full_name
6926
+ if self.table_type is not None: body['table_type'] = self.table_type
6927
+ return body
6928
+
5456
6929
  @classmethod
5457
6930
  def from_dict(cls, d: Dict[str, any]) -> TableSummary:
5458
6931
  """Deserializes the TableSummary from a dictionary."""
@@ -5494,6 +6967,14 @@ class TemporaryCredentials:
5494
6967
  if self.expiration_time is not None: body['expiration_time'] = self.expiration_time
5495
6968
  return body
5496
6969
 
6970
+ def as_shallow_dict(self) -> dict:
6971
+ """Serializes the TemporaryCredentials into a shallow dictionary of its immediate attributes."""
6972
+ body = {}
6973
+ if self.aws_temp_credentials: body['aws_temp_credentials'] = self.aws_temp_credentials
6974
+ if self.azure_aad: body['azure_aad'] = self.azure_aad
6975
+ if self.expiration_time is not None: body['expiration_time'] = self.expiration_time
6976
+ return body
6977
+
5497
6978
  @classmethod
5498
6979
  def from_dict(cls, d: Dict[str, any]) -> TemporaryCredentials:
5499
6980
  """Deserializes the TemporaryCredentials from a dictionary."""
@@ -5528,6 +7009,15 @@ class TriggeredUpdateStatus:
5528
7009
  body['triggered_update_progress'] = self.triggered_update_progress.as_dict()
5529
7010
  return body
5530
7011
 
7012
+ def as_shallow_dict(self) -> dict:
7013
+ """Serializes the TriggeredUpdateStatus into a shallow dictionary of its immediate attributes."""
7014
+ body = {}
7015
+ if self.last_processed_commit_version is not None:
7016
+ body['last_processed_commit_version'] = self.last_processed_commit_version
7017
+ if self.timestamp is not None: body['timestamp'] = self.timestamp
7018
+ if self.triggered_update_progress: body['triggered_update_progress'] = self.triggered_update_progress
7019
+ return body
7020
+
5531
7021
  @classmethod
5532
7022
  def from_dict(cls, d: Dict[str, any]) -> TriggeredUpdateStatus:
5533
7023
  """Deserializes the TriggeredUpdateStatus from a dictionary."""
@@ -5544,6 +7034,11 @@ class UnassignResponse:
5544
7034
  body = {}
5545
7035
  return body
5546
7036
 
7037
+ def as_shallow_dict(self) -> dict:
7038
+ """Serializes the UnassignResponse into a shallow dictionary of its immediate attributes."""
7039
+ body = {}
7040
+ return body
7041
+
5547
7042
  @classmethod
5548
7043
  def from_dict(cls, d: Dict[str, any]) -> UnassignResponse:
5549
7044
  """Deserializes the UnassignResponse from a dictionary."""
@@ -5558,6 +7053,11 @@ class UpdateAssignmentResponse:
5558
7053
  body = {}
5559
7054
  return body
5560
7055
 
7056
+ def as_shallow_dict(self) -> dict:
7057
+ """Serializes the UpdateAssignmentResponse into a shallow dictionary of its immediate attributes."""
7058
+ body = {}
7059
+ return body
7060
+
5561
7061
  @classmethod
5562
7062
  def from_dict(cls, d: Dict[str, any]) -> UpdateAssignmentResponse:
5563
7063
  """Deserializes the UpdateAssignmentResponse from a dictionary."""
@@ -5608,6 +7108,19 @@ class UpdateCatalog:
5608
7108
  if self.properties: body['properties'] = self.properties
5609
7109
  return body
5610
7110
 
7111
+ def as_shallow_dict(self) -> dict:
7112
+ """Serializes the UpdateCatalog into a shallow dictionary of its immediate attributes."""
7113
+ body = {}
7114
+ if self.comment is not None: body['comment'] = self.comment
7115
+ if self.enable_predictive_optimization is not None:
7116
+ body['enable_predictive_optimization'] = self.enable_predictive_optimization
7117
+ if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode
7118
+ if self.name is not None: body['name'] = self.name
7119
+ if self.new_name is not None: body['new_name'] = self.new_name
7120
+ if self.owner is not None: body['owner'] = self.owner
7121
+ if self.properties: body['properties'] = self.properties
7122
+ return body
7123
+
5611
7124
  @classmethod
5612
7125
  def from_dict(cls, d: Dict[str, any]) -> UpdateCatalog:
5613
7126
  """Deserializes the UpdateCatalog from a dictionary."""
@@ -5644,6 +7157,15 @@ class UpdateConnection:
5644
7157
  if self.owner is not None: body['owner'] = self.owner
5645
7158
  return body
5646
7159
 
7160
+ def as_shallow_dict(self) -> dict:
7161
+ """Serializes the UpdateConnection into a shallow dictionary of its immediate attributes."""
7162
+ body = {}
7163
+ if self.name is not None: body['name'] = self.name
7164
+ if self.new_name is not None: body['new_name'] = self.new_name
7165
+ if self.options: body['options'] = self.options
7166
+ if self.owner is not None: body['owner'] = self.owner
7167
+ return body
7168
+
5647
7169
  @classmethod
5648
7170
  def from_dict(cls, d: Dict[str, any]) -> UpdateConnection:
5649
7171
  """Deserializes the UpdateConnection from a dictionary."""
@@ -5661,11 +7183,18 @@ class UpdateCredentialRequest:
5661
7183
  azure_managed_identity: Optional[AzureManagedIdentity] = None
5662
7184
  """The Azure managed identity configuration."""
5663
7185
 
7186
+ azure_service_principal: Optional[AzureServicePrincipal] = None
7187
+ """The Azure service principal configuration. Only applicable when purpose is **STORAGE**."""
7188
+
5664
7189
  comment: Optional[str] = None
5665
7190
  """Comment associated with the credential."""
5666
7191
 
7192
+ databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None
7193
+ """GCP long-lived credential. Databricks-created Google Cloud Storage service account."""
7194
+
5667
7195
  force: Optional[bool] = None
5668
- """Force update even if there are dependent services."""
7196
+ """Force an update even if there are dependent services (when purpose is **SERVICE**) or dependent
7197
+ external locations and external tables (when purpose is **STORAGE**)."""
5669
7198
 
5670
7199
  isolation_mode: Optional[IsolationMode] = None
5671
7200
  """Whether the current securable is accessible from all workspaces or a specific set of workspaces."""
@@ -5679,6 +7208,10 @@ class UpdateCredentialRequest:
5679
7208
  owner: Optional[str] = None
5680
7209
  """Username of current owner of credential."""
5681
7210
 
7211
+ read_only: Optional[bool] = None
7212
+ """Whether the credential is usable only for read operations. Only applicable when purpose is
7213
+ **STORAGE**."""
7214
+
5682
7215
  skip_validation: Optional[bool] = None
5683
7216
  """Supply true to this argument to skip validation of the updated credential."""
5684
7217
 
@@ -5687,12 +7220,35 @@ class UpdateCredentialRequest:
5687
7220
  body = {}
5688
7221
  if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role.as_dict()
5689
7222
  if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity.as_dict()
7223
+ if self.azure_service_principal:
7224
+ body['azure_service_principal'] = self.azure_service_principal.as_dict()
5690
7225
  if self.comment is not None: body['comment'] = self.comment
7226
+ if self.databricks_gcp_service_account:
7227
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account.as_dict()
5691
7228
  if self.force is not None: body['force'] = self.force
5692
7229
  if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode.value
5693
7230
  if self.name_arg is not None: body['name_arg'] = self.name_arg
5694
7231
  if self.new_name is not None: body['new_name'] = self.new_name
5695
7232
  if self.owner is not None: body['owner'] = self.owner
7233
+ if self.read_only is not None: body['read_only'] = self.read_only
7234
+ if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
7235
+ return body
7236
+
7237
+ def as_shallow_dict(self) -> dict:
7238
+ """Serializes the UpdateCredentialRequest into a shallow dictionary of its immediate attributes."""
7239
+ body = {}
7240
+ if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role
7241
+ if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity
7242
+ if self.azure_service_principal: body['azure_service_principal'] = self.azure_service_principal
7243
+ if self.comment is not None: body['comment'] = self.comment
7244
+ if self.databricks_gcp_service_account:
7245
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account
7246
+ if self.force is not None: body['force'] = self.force
7247
+ if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode
7248
+ if self.name_arg is not None: body['name_arg'] = self.name_arg
7249
+ if self.new_name is not None: body['new_name'] = self.new_name
7250
+ if self.owner is not None: body['owner'] = self.owner
7251
+ if self.read_only is not None: body['read_only'] = self.read_only
5696
7252
  if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
5697
7253
  return body
5698
7254
 
@@ -5701,12 +7257,16 @@ class UpdateCredentialRequest:
5701
7257
  """Deserializes the UpdateCredentialRequest from a dictionary."""
5702
7258
  return cls(aws_iam_role=_from_dict(d, 'aws_iam_role', AwsIamRole),
5703
7259
  azure_managed_identity=_from_dict(d, 'azure_managed_identity', AzureManagedIdentity),
7260
+ azure_service_principal=_from_dict(d, 'azure_service_principal', AzureServicePrincipal),
5704
7261
  comment=d.get('comment', None),
7262
+ databricks_gcp_service_account=_from_dict(d, 'databricks_gcp_service_account',
7263
+ DatabricksGcpServiceAccount),
5705
7264
  force=d.get('force', None),
5706
7265
  isolation_mode=_enum(d, 'isolation_mode', IsolationMode),
5707
7266
  name_arg=d.get('name_arg', None),
5708
7267
  new_name=d.get('new_name', None),
5709
7268
  owner=d.get('owner', None),
7269
+ read_only=d.get('read_only', None),
5710
7270
  skip_validation=d.get('skip_validation', None))
5711
7271
 
5712
7272
 
@@ -5770,6 +7330,24 @@ class UpdateExternalLocation:
5770
7330
  if self.url is not None: body['url'] = self.url
5771
7331
  return body
5772
7332
 
7333
+ def as_shallow_dict(self) -> dict:
7334
+ """Serializes the UpdateExternalLocation into a shallow dictionary of its immediate attributes."""
7335
+ body = {}
7336
+ if self.access_point is not None: body['access_point'] = self.access_point
7337
+ if self.comment is not None: body['comment'] = self.comment
7338
+ if self.credential_name is not None: body['credential_name'] = self.credential_name
7339
+ if self.encryption_details: body['encryption_details'] = self.encryption_details
7340
+ if self.fallback is not None: body['fallback'] = self.fallback
7341
+ if self.force is not None: body['force'] = self.force
7342
+ if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode
7343
+ if self.name is not None: body['name'] = self.name
7344
+ if self.new_name is not None: body['new_name'] = self.new_name
7345
+ if self.owner is not None: body['owner'] = self.owner
7346
+ if self.read_only is not None: body['read_only'] = self.read_only
7347
+ if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
7348
+ if self.url is not None: body['url'] = self.url
7349
+ return body
7350
+
5773
7351
  @classmethod
5774
7352
  def from_dict(cls, d: Dict[str, any]) -> UpdateExternalLocation:
5775
7353
  """Deserializes the UpdateExternalLocation from a dictionary."""
@@ -5804,6 +7382,13 @@ class UpdateFunction:
5804
7382
  if self.owner is not None: body['owner'] = self.owner
5805
7383
  return body
5806
7384
 
7385
+ def as_shallow_dict(self) -> dict:
7386
+ """Serializes the UpdateFunction into a shallow dictionary of its immediate attributes."""
7387
+ body = {}
7388
+ if self.name is not None: body['name'] = self.name
7389
+ if self.owner is not None: body['owner'] = self.owner
7390
+ return body
7391
+
5807
7392
  @classmethod
5808
7393
  def from_dict(cls, d: Dict[str, any]) -> UpdateFunction:
5809
7394
  """Deserializes the UpdateFunction from a dictionary."""
@@ -5855,6 +7440,24 @@ class UpdateMetastore:
5855
7440
  body['storage_root_credential_id'] = self.storage_root_credential_id
5856
7441
  return body
5857
7442
 
7443
+ def as_shallow_dict(self) -> dict:
7444
+ """Serializes the UpdateMetastore into a shallow dictionary of its immediate attributes."""
7445
+ body = {}
7446
+ if self.delta_sharing_organization_name is not None:
7447
+ body['delta_sharing_organization_name'] = self.delta_sharing_organization_name
7448
+ if self.delta_sharing_recipient_token_lifetime_in_seconds is not None:
7449
+ body[
7450
+ 'delta_sharing_recipient_token_lifetime_in_seconds'] = self.delta_sharing_recipient_token_lifetime_in_seconds
7451
+ if self.delta_sharing_scope is not None: body['delta_sharing_scope'] = self.delta_sharing_scope
7452
+ if self.id is not None: body['id'] = self.id
7453
+ if self.new_name is not None: body['new_name'] = self.new_name
7454
+ if self.owner is not None: body['owner'] = self.owner
7455
+ if self.privilege_model_version is not None:
7456
+ body['privilege_model_version'] = self.privilege_model_version
7457
+ if self.storage_root_credential_id is not None:
7458
+ body['storage_root_credential_id'] = self.storage_root_credential_id
7459
+ return body
7460
+
5858
7461
  @classmethod
5859
7462
  def from_dict(cls, d: Dict[str, any]) -> UpdateMetastore:
5860
7463
  """Deserializes the UpdateMetastore from a dictionary."""
@@ -5889,6 +7492,14 @@ class UpdateMetastoreAssignment:
5889
7492
  if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
5890
7493
  return body
5891
7494
 
7495
+ def as_shallow_dict(self) -> dict:
7496
+ """Serializes the UpdateMetastoreAssignment into a shallow dictionary of its immediate attributes."""
7497
+ body = {}
7498
+ if self.default_catalog_name is not None: body['default_catalog_name'] = self.default_catalog_name
7499
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
7500
+ if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
7501
+ return body
7502
+
5892
7503
  @classmethod
5893
7504
  def from_dict(cls, d: Dict[str, any]) -> UpdateMetastoreAssignment:
5894
7505
  """Deserializes the UpdateMetastoreAssignment from a dictionary."""
@@ -5923,6 +7534,14 @@ class UpdateModelVersionRequest:
5923
7534
  if self.version is not None: body['version'] = self.version
5924
7535
  return body
5925
7536
 
7537
+ def as_shallow_dict(self) -> dict:
7538
+ """Serializes the UpdateModelVersionRequest into a shallow dictionary of its immediate attributes."""
7539
+ body = {}
7540
+ if self.comment is not None: body['comment'] = self.comment
7541
+ if self.full_name is not None: body['full_name'] = self.full_name
7542
+ if self.version is not None: body['version'] = self.version
7543
+ return body
7544
+
5926
7545
  @classmethod
5927
7546
  def from_dict(cls, d: Dict[str, any]) -> UpdateModelVersionRequest:
5928
7547
  """Deserializes the UpdateModelVersionRequest from a dictionary."""
@@ -5993,6 +7612,24 @@ class UpdateMonitor:
5993
7612
  if self.time_series: body['time_series'] = self.time_series.as_dict()
5994
7613
  return body
5995
7614
 
7615
+ def as_shallow_dict(self) -> dict:
7616
+ """Serializes the UpdateMonitor into a shallow dictionary of its immediate attributes."""
7617
+ body = {}
7618
+ if self.baseline_table_name is not None: body['baseline_table_name'] = self.baseline_table_name
7619
+ if self.custom_metrics: body['custom_metrics'] = self.custom_metrics
7620
+ if self.dashboard_id is not None: body['dashboard_id'] = self.dashboard_id
7621
+ if self.data_classification_config:
7622
+ body['data_classification_config'] = self.data_classification_config
7623
+ if self.inference_log: body['inference_log'] = self.inference_log
7624
+ if self.notifications: body['notifications'] = self.notifications
7625
+ if self.output_schema_name is not None: body['output_schema_name'] = self.output_schema_name
7626
+ if self.schedule: body['schedule'] = self.schedule
7627
+ if self.slicing_exprs: body['slicing_exprs'] = self.slicing_exprs
7628
+ if self.snapshot: body['snapshot'] = self.snapshot
7629
+ if self.table_name is not None: body['table_name'] = self.table_name
7630
+ if self.time_series: body['time_series'] = self.time_series
7631
+ return body
7632
+
5996
7633
  @classmethod
5997
7634
  def from_dict(cls, d: Dict[str, any]) -> UpdateMonitor:
5998
7635
  """Deserializes the UpdateMonitor from a dictionary."""
@@ -6030,6 +7667,14 @@ class UpdatePermissions:
6030
7667
  if self.securable_type is not None: body['securable_type'] = self.securable_type.value
6031
7668
  return body
6032
7669
 
7670
+ def as_shallow_dict(self) -> dict:
7671
+ """Serializes the UpdatePermissions into a shallow dictionary of its immediate attributes."""
7672
+ body = {}
7673
+ if self.changes: body['changes'] = self.changes
7674
+ if self.full_name is not None: body['full_name'] = self.full_name
7675
+ if self.securable_type is not None: body['securable_type'] = self.securable_type
7676
+ return body
7677
+
6033
7678
  @classmethod
6034
7679
  def from_dict(cls, d: Dict[str, any]) -> UpdatePermissions:
6035
7680
  """Deserializes the UpdatePermissions from a dictionary."""
@@ -6061,6 +7706,15 @@ class UpdateRegisteredModelRequest:
6061
7706
  if self.owner is not None: body['owner'] = self.owner
6062
7707
  return body
6063
7708
 
7709
+ def as_shallow_dict(self) -> dict:
7710
+ """Serializes the UpdateRegisteredModelRequest into a shallow dictionary of its immediate attributes."""
7711
+ body = {}
7712
+ if self.comment is not None: body['comment'] = self.comment
7713
+ if self.full_name is not None: body['full_name'] = self.full_name
7714
+ if self.new_name is not None: body['new_name'] = self.new_name
7715
+ if self.owner is not None: body['owner'] = self.owner
7716
+ return body
7717
+
6064
7718
  @classmethod
6065
7719
  def from_dict(cls, d: Dict[str, any]) -> UpdateRegisteredModelRequest:
6066
7720
  """Deserializes the UpdateRegisteredModelRequest from a dictionary."""
@@ -6078,6 +7732,11 @@ class UpdateResponse:
6078
7732
  body = {}
6079
7733
  return body
6080
7734
 
7735
+ def as_shallow_dict(self) -> dict:
7736
+ """Serializes the UpdateResponse into a shallow dictionary of its immediate attributes."""
7737
+ body = {}
7738
+ return body
7739
+
6081
7740
  @classmethod
6082
7741
  def from_dict(cls, d: Dict[str, any]) -> UpdateResponse:
6083
7742
  """Deserializes the UpdateResponse from a dictionary."""
@@ -6116,6 +7775,18 @@ class UpdateSchema:
6116
7775
  if self.properties: body['properties'] = self.properties
6117
7776
  return body
6118
7777
 
7778
+ def as_shallow_dict(self) -> dict:
7779
+ """Serializes the UpdateSchema into a shallow dictionary of its immediate attributes."""
7780
+ body = {}
7781
+ if self.comment is not None: body['comment'] = self.comment
7782
+ if self.enable_predictive_optimization is not None:
7783
+ body['enable_predictive_optimization'] = self.enable_predictive_optimization
7784
+ if self.full_name is not None: body['full_name'] = self.full_name
7785
+ if self.new_name is not None: body['new_name'] = self.new_name
7786
+ if self.owner is not None: body['owner'] = self.owner
7787
+ if self.properties: body['properties'] = self.properties
7788
+ return body
7789
+
6119
7790
  @classmethod
6120
7791
  def from_dict(cls, d: Dict[str, any]) -> UpdateSchema:
6121
7792
  """Deserializes the UpdateSchema from a dictionary."""
@@ -6188,6 +7859,25 @@ class UpdateStorageCredential:
6188
7859
  if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
6189
7860
  return body
6190
7861
 
7862
+ def as_shallow_dict(self) -> dict:
7863
+ """Serializes the UpdateStorageCredential into a shallow dictionary of its immediate attributes."""
7864
+ body = {}
7865
+ if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role
7866
+ if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity
7867
+ if self.azure_service_principal: body['azure_service_principal'] = self.azure_service_principal
7868
+ if self.cloudflare_api_token: body['cloudflare_api_token'] = self.cloudflare_api_token
7869
+ if self.comment is not None: body['comment'] = self.comment
7870
+ if self.databricks_gcp_service_account:
7871
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account
7872
+ if self.force is not None: body['force'] = self.force
7873
+ if self.isolation_mode is not None: body['isolation_mode'] = self.isolation_mode
7874
+ if self.name is not None: body['name'] = self.name
7875
+ if self.new_name is not None: body['new_name'] = self.new_name
7876
+ if self.owner is not None: body['owner'] = self.owner
7877
+ if self.read_only is not None: body['read_only'] = self.read_only
7878
+ if self.skip_validation is not None: body['skip_validation'] = self.skip_validation
7879
+ return body
7880
+
6191
7881
  @classmethod
6192
7882
  def from_dict(cls, d: Dict[str, any]) -> UpdateStorageCredential:
6193
7883
  """Deserializes the UpdateStorageCredential from a dictionary."""
@@ -6231,6 +7921,15 @@ class UpdateVolumeRequestContent:
6231
7921
  if self.owner is not None: body['owner'] = self.owner
6232
7922
  return body
6233
7923
 
7924
+ def as_shallow_dict(self) -> dict:
7925
+ """Serializes the UpdateVolumeRequestContent into a shallow dictionary of its immediate attributes."""
7926
+ body = {}
7927
+ if self.comment is not None: body['comment'] = self.comment
7928
+ if self.name is not None: body['name'] = self.name
7929
+ if self.new_name is not None: body['new_name'] = self.new_name
7930
+ if self.owner is not None: body['owner'] = self.owner
7931
+ return body
7932
+
6234
7933
  @classmethod
6235
7934
  def from_dict(cls, d: Dict[str, any]) -> UpdateVolumeRequestContent:
6236
7935
  """Deserializes the UpdateVolumeRequestContent from a dictionary."""
@@ -6259,6 +7958,14 @@ class UpdateWorkspaceBindings:
6259
7958
  if self.unassign_workspaces: body['unassign_workspaces'] = [v for v in self.unassign_workspaces]
6260
7959
  return body
6261
7960
 
7961
+ def as_shallow_dict(self) -> dict:
7962
+ """Serializes the UpdateWorkspaceBindings into a shallow dictionary of its immediate attributes."""
7963
+ body = {}
7964
+ if self.assign_workspaces: body['assign_workspaces'] = self.assign_workspaces
7965
+ if self.name is not None: body['name'] = self.name
7966
+ if self.unassign_workspaces: body['unassign_workspaces'] = self.unassign_workspaces
7967
+ return body
7968
+
6262
7969
  @classmethod
6263
7970
  def from_dict(cls, d: Dict[str, any]) -> UpdateWorkspaceBindings:
6264
7971
  """Deserializes the UpdateWorkspaceBindings from a dictionary."""
@@ -6290,6 +7997,15 @@ class UpdateWorkspaceBindingsParameters:
6290
7997
  if self.securable_type is not None: body['securable_type'] = self.securable_type.value
6291
7998
  return body
6292
7999
 
8000
+ def as_shallow_dict(self) -> dict:
8001
+ """Serializes the UpdateWorkspaceBindingsParameters into a shallow dictionary of its immediate attributes."""
8002
+ body = {}
8003
+ if self.add: body['add'] = self.add
8004
+ if self.remove: body['remove'] = self.remove
8005
+ if self.securable_name is not None: body['securable_name'] = self.securable_name
8006
+ if self.securable_type is not None: body['securable_type'] = self.securable_type
8007
+ return body
8008
+
6293
8009
  @classmethod
6294
8010
  def from_dict(cls, d: Dict[str, any]) -> UpdateWorkspaceBindingsParameters:
6295
8011
  """Deserializes the UpdateWorkspaceBindingsParameters from a dictionary."""
@@ -6310,16 +8026,44 @@ class ValidateCredentialRequest:
6310
8026
  credential_name: Optional[str] = None
6311
8027
  """Required. The name of an existing credential or long-lived cloud credential to validate."""
6312
8028
 
8029
+ external_location_name: Optional[str] = None
8030
+ """The name of an existing external location to validate. Only applicable for storage credentials
8031
+ (purpose is **STORAGE**.)"""
8032
+
6313
8033
  purpose: Optional[CredentialPurpose] = None
6314
8034
  """The purpose of the credential. This should only be used when the credential is specified."""
6315
8035
 
8036
+ read_only: Optional[bool] = None
8037
+ """Whether the credential is only usable for read operations. Only applicable for storage
8038
+ credentials (purpose is **STORAGE**.)"""
8039
+
8040
+ url: Optional[str] = None
8041
+ """The external location url to validate. Only applicable when purpose is **STORAGE**."""
8042
+
6316
8043
  def as_dict(self) -> dict:
6317
8044
  """Serializes the ValidateCredentialRequest into a dictionary suitable for use as a JSON request body."""
6318
8045
  body = {}
6319
8046
  if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role.as_dict()
6320
8047
  if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity.as_dict()
6321
8048
  if self.credential_name is not None: body['credential_name'] = self.credential_name
8049
+ if self.external_location_name is not None:
8050
+ body['external_location_name'] = self.external_location_name
6322
8051
  if self.purpose is not None: body['purpose'] = self.purpose.value
8052
+ if self.read_only is not None: body['read_only'] = self.read_only
8053
+ if self.url is not None: body['url'] = self.url
8054
+ return body
8055
+
8056
+ def as_shallow_dict(self) -> dict:
8057
+ """Serializes the ValidateCredentialRequest into a shallow dictionary of its immediate attributes."""
8058
+ body = {}
8059
+ if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role
8060
+ if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity
8061
+ if self.credential_name is not None: body['credential_name'] = self.credential_name
8062
+ if self.external_location_name is not None:
8063
+ body['external_location_name'] = self.external_location_name
8064
+ if self.purpose is not None: body['purpose'] = self.purpose
8065
+ if self.read_only is not None: body['read_only'] = self.read_only
8066
+ if self.url is not None: body['url'] = self.url
6323
8067
  return body
6324
8068
 
6325
8069
  @classmethod
@@ -6328,24 +8072,40 @@ class ValidateCredentialRequest:
6328
8072
  return cls(aws_iam_role=_from_dict(d, 'aws_iam_role', AwsIamRole),
6329
8073
  azure_managed_identity=_from_dict(d, 'azure_managed_identity', AzureManagedIdentity),
6330
8074
  credential_name=d.get('credential_name', None),
6331
- purpose=_enum(d, 'purpose', CredentialPurpose))
8075
+ external_location_name=d.get('external_location_name', None),
8076
+ purpose=_enum(d, 'purpose', CredentialPurpose),
8077
+ read_only=d.get('read_only', None),
8078
+ url=d.get('url', None))
6332
8079
 
6333
8080
 
6334
8081
  @dataclass
6335
8082
  class ValidateCredentialResponse:
8083
+ is_dir: Optional[bool] = None
8084
+ """Whether the tested location is a directory in cloud storage. Only applicable for when purpose is
8085
+ **STORAGE**."""
8086
+
6336
8087
  results: Optional[List[CredentialValidationResult]] = None
6337
8088
  """The results of the validation check."""
6338
8089
 
6339
8090
  def as_dict(self) -> dict:
6340
8091
  """Serializes the ValidateCredentialResponse into a dictionary suitable for use as a JSON request body."""
6341
8092
  body = {}
8093
+ if self.is_dir is not None: body['isDir'] = self.is_dir
6342
8094
  if self.results: body['results'] = [v.as_dict() for v in self.results]
6343
8095
  return body
6344
8096
 
8097
+ def as_shallow_dict(self) -> dict:
8098
+ """Serializes the ValidateCredentialResponse into a shallow dictionary of its immediate attributes."""
8099
+ body = {}
8100
+ if self.is_dir is not None: body['isDir'] = self.is_dir
8101
+ if self.results: body['results'] = self.results
8102
+ return body
8103
+
6345
8104
  @classmethod
6346
8105
  def from_dict(cls, d: Dict[str, any]) -> ValidateCredentialResponse:
6347
8106
  """Deserializes the ValidateCredentialResponse from a dictionary."""
6348
- return cls(results=_repeated_dict(d, 'results', CredentialValidationResult))
8107
+ return cls(is_dir=d.get('isDir', None),
8108
+ results=_repeated_dict(d, 'results', CredentialValidationResult))
6349
8109
 
6350
8110
 
6351
8111
  class ValidateCredentialResult(Enum):
@@ -6403,6 +8163,23 @@ class ValidateStorageCredential:
6403
8163
  if self.url is not None: body['url'] = self.url
6404
8164
  return body
6405
8165
 
8166
+ def as_shallow_dict(self) -> dict:
8167
+ """Serializes the ValidateStorageCredential into a shallow dictionary of its immediate attributes."""
8168
+ body = {}
8169
+ if self.aws_iam_role: body['aws_iam_role'] = self.aws_iam_role
8170
+ if self.azure_managed_identity: body['azure_managed_identity'] = self.azure_managed_identity
8171
+ if self.azure_service_principal: body['azure_service_principal'] = self.azure_service_principal
8172
+ if self.cloudflare_api_token: body['cloudflare_api_token'] = self.cloudflare_api_token
8173
+ if self.databricks_gcp_service_account:
8174
+ body['databricks_gcp_service_account'] = self.databricks_gcp_service_account
8175
+ if self.external_location_name is not None:
8176
+ body['external_location_name'] = self.external_location_name
8177
+ if self.read_only is not None: body['read_only'] = self.read_only
8178
+ if self.storage_credential_name is not None:
8179
+ body['storage_credential_name'] = self.storage_credential_name
8180
+ if self.url is not None: body['url'] = self.url
8181
+ return body
8182
+
6406
8183
  @classmethod
6407
8184
  def from_dict(cls, d: Dict[str, any]) -> ValidateStorageCredential:
6408
8185
  """Deserializes the ValidateStorageCredential from a dictionary."""
@@ -6434,6 +8211,13 @@ class ValidateStorageCredentialResponse:
6434
8211
  if self.results: body['results'] = [v.as_dict() for v in self.results]
6435
8212
  return body
6436
8213
 
8214
+ def as_shallow_dict(self) -> dict:
8215
+ """Serializes the ValidateStorageCredentialResponse into a shallow dictionary of its immediate attributes."""
8216
+ body = {}
8217
+ if self.is_dir is not None: body['isDir'] = self.is_dir
8218
+ if self.results: body['results'] = self.results
8219
+ return body
8220
+
6437
8221
  @classmethod
6438
8222
  def from_dict(cls, d: Dict[str, any]) -> ValidateStorageCredentialResponse:
6439
8223
  """Deserializes the ValidateStorageCredentialResponse from a dictionary."""
@@ -6459,6 +8243,14 @@ class ValidationResult:
6459
8243
  if self.result is not None: body['result'] = self.result.value
6460
8244
  return body
6461
8245
 
8246
+ def as_shallow_dict(self) -> dict:
8247
+ """Serializes the ValidationResult into a shallow dictionary of its immediate attributes."""
8248
+ body = {}
8249
+ if self.message is not None: body['message'] = self.message
8250
+ if self.operation is not None: body['operation'] = self.operation
8251
+ if self.result is not None: body['result'] = self.result
8252
+ return body
8253
+
6462
8254
  @classmethod
6463
8255
  def from_dict(cls, d: Dict[str, any]) -> ValidationResult:
6464
8256
  """Deserializes the ValidationResult from a dictionary."""
@@ -6558,6 +8350,28 @@ class VolumeInfo:
6558
8350
  if self.volume_type is not None: body['volume_type'] = self.volume_type.value
6559
8351
  return body
6560
8352
 
8353
+ def as_shallow_dict(self) -> dict:
8354
+ """Serializes the VolumeInfo into a shallow dictionary of its immediate attributes."""
8355
+ body = {}
8356
+ if self.access_point is not None: body['access_point'] = self.access_point
8357
+ if self.browse_only is not None: body['browse_only'] = self.browse_only
8358
+ if self.catalog_name is not None: body['catalog_name'] = self.catalog_name
8359
+ if self.comment is not None: body['comment'] = self.comment
8360
+ if self.created_at is not None: body['created_at'] = self.created_at
8361
+ if self.created_by is not None: body['created_by'] = self.created_by
8362
+ if self.encryption_details: body['encryption_details'] = self.encryption_details
8363
+ if self.full_name is not None: body['full_name'] = self.full_name
8364
+ if self.metastore_id is not None: body['metastore_id'] = self.metastore_id
8365
+ if self.name is not None: body['name'] = self.name
8366
+ if self.owner is not None: body['owner'] = self.owner
8367
+ if self.schema_name is not None: body['schema_name'] = self.schema_name
8368
+ if self.storage_location is not None: body['storage_location'] = self.storage_location
8369
+ if self.updated_at is not None: body['updated_at'] = self.updated_at
8370
+ if self.updated_by is not None: body['updated_by'] = self.updated_by
8371
+ if self.volume_id is not None: body['volume_id'] = self.volume_id
8372
+ if self.volume_type is not None: body['volume_type'] = self.volume_type
8373
+ return body
8374
+
6561
8375
  @classmethod
6562
8376
  def from_dict(cls, d: Dict[str, any]) -> VolumeInfo:
6563
8377
  """Deserializes the VolumeInfo from a dictionary."""
@@ -6599,6 +8413,13 @@ class WorkspaceBinding:
6599
8413
  if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
6600
8414
  return body
6601
8415
 
8416
+ def as_shallow_dict(self) -> dict:
8417
+ """Serializes the WorkspaceBinding into a shallow dictionary of its immediate attributes."""
8418
+ body = {}
8419
+ if self.binding_type is not None: body['binding_type'] = self.binding_type
8420
+ if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
8421
+ return body
8422
+
6602
8423
  @classmethod
6603
8424
  def from_dict(cls, d: Dict[str, any]) -> WorkspaceBinding:
6604
8425
  """Deserializes the WorkspaceBinding from a dictionary."""
@@ -6630,6 +8451,13 @@ class WorkspaceBindingsResponse:
6630
8451
  if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
6631
8452
  return body
6632
8453
 
8454
+ def as_shallow_dict(self) -> dict:
8455
+ """Serializes the WorkspaceBindingsResponse into a shallow dictionary of its immediate attributes."""
8456
+ body = {}
8457
+ if self.bindings: body['bindings'] = self.bindings
8458
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
8459
+ return body
8460
+
6633
8461
  @classmethod
6634
8462
  def from_dict(cls, d: Dict[str, any]) -> WorkspaceBindingsResponse:
6635
8463
  """Deserializes the WorkspaceBindingsResponse from a dictionary."""
@@ -7397,36 +9225,50 @@ class CredentialsAPI:
7397
9225
  tenant. Each credential is subject to Unity Catalog access-control policies that control which users and
7398
9226
  groups can access the credential.
7399
9227
 
7400
- To create credentials, you must be a Databricks account admin or have the `CREATE SERVICE CREDENTIAL
9228
+ To create credentials, you must be a Databricks account admin or have the `CREATE SERVICE CREDENTIAL`
7401
9229
  privilege. The user who creates the credential can delegate ownership to another user or group to manage
7402
- permissions on it"""
9230
+ permissions on it."""
7403
9231
 
7404
9232
  def __init__(self, api_client):
7405
9233
  self._api = api_client
7406
9234
 
7407
9235
  def create_credential(self,
9236
+ name: str,
7408
9237
  *,
7409
9238
  aws_iam_role: Optional[AwsIamRole] = None,
7410
9239
  azure_managed_identity: Optional[AzureManagedIdentity] = None,
9240
+ azure_service_principal: Optional[AzureServicePrincipal] = None,
7411
9241
  comment: Optional[str] = None,
7412
- name: Optional[str] = None,
9242
+ databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None,
7413
9243
  purpose: Optional[CredentialPurpose] = None,
9244
+ read_only: Optional[bool] = None,
7414
9245
  skip_validation: Optional[bool] = None) -> CredentialInfo:
7415
9246
  """Create a credential.
7416
9247
 
7417
- Creates a new credential.
9248
+ Creates a new credential. The type of credential to be created is determined by the **purpose** field,
9249
+ which should be either **SERVICE** or **STORAGE**.
7418
9250
 
9251
+ The caller must be a metastore admin or have the metastore privilege **CREATE_STORAGE_CREDENTIAL** for
9252
+ storage credentials, or **CREATE_SERVICE_CREDENTIAL** for service credentials.
9253
+
9254
+ :param name: str
9255
+ The credential name. The name must be unique among storage and service credentials within the
9256
+ metastore.
7419
9257
  :param aws_iam_role: :class:`AwsIamRole` (optional)
7420
9258
  The AWS IAM role configuration
7421
9259
  :param azure_managed_identity: :class:`AzureManagedIdentity` (optional)
7422
9260
  The Azure managed identity configuration.
9261
+ :param azure_service_principal: :class:`AzureServicePrincipal` (optional)
9262
+ The Azure service principal configuration. Only applicable when purpose is **STORAGE**.
7423
9263
  :param comment: str (optional)
7424
9264
  Comment associated with the credential.
7425
- :param name: str (optional)
7426
- The credential name. The name must be unique among storage and service credentials within the
7427
- metastore.
9265
+ :param databricks_gcp_service_account: :class:`DatabricksGcpServiceAccount` (optional)
9266
+ GCP long-lived credential. Databricks-created Google Cloud Storage service account.
7428
9267
  :param purpose: :class:`CredentialPurpose` (optional)
7429
9268
  Indicates the purpose of the credential.
9269
+ :param read_only: bool (optional)
9270
+ Whether the credential is usable only for read operations. Only applicable when purpose is
9271
+ **STORAGE**.
7430
9272
  :param skip_validation: bool (optional)
7431
9273
  Optional. Supplying true to this argument skips validation of the created set of credentials.
7432
9274
 
@@ -7436,9 +9278,14 @@ class CredentialsAPI:
7436
9278
  if aws_iam_role is not None: body['aws_iam_role'] = aws_iam_role.as_dict()
7437
9279
  if azure_managed_identity is not None:
7438
9280
  body['azure_managed_identity'] = azure_managed_identity.as_dict()
9281
+ if azure_service_principal is not None:
9282
+ body['azure_service_principal'] = azure_service_principal.as_dict()
7439
9283
  if comment is not None: body['comment'] = comment
9284
+ if databricks_gcp_service_account is not None:
9285
+ body['databricks_gcp_service_account'] = databricks_gcp_service_account.as_dict()
7440
9286
  if name is not None: body['name'] = name
7441
9287
  if purpose is not None: body['purpose'] = purpose.value
9288
+ if read_only is not None: body['read_only'] = read_only
7442
9289
  if skip_validation is not None: body['skip_validation'] = skip_validation
7443
9290
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7444
9291
 
@@ -7448,12 +9295,14 @@ class CredentialsAPI:
7448
9295
  def delete_credential(self, name_arg: str, *, force: Optional[bool] = None):
7449
9296
  """Delete a credential.
7450
9297
 
7451
- Deletes a credential from the metastore. The caller must be an owner of the credential.
9298
+ Deletes a service or storage credential from the metastore. The caller must be an owner of the
9299
+ credential.
7452
9300
 
7453
9301
  :param name_arg: str
7454
9302
  Name of the credential.
7455
9303
  :param force: bool (optional)
7456
- Force deletion even if there are dependent services.
9304
+ Force an update even if there are dependent services (when purpose is **SERVICE**) or dependent
9305
+ external locations and external tables (when purpose is **STORAGE**).
7457
9306
 
7458
9307
 
7459
9308
  """
@@ -7466,24 +9315,29 @@ class CredentialsAPI:
7466
9315
 
7467
9316
  def generate_temporary_service_credential(
7468
9317
  self,
9318
+ credential_name: str,
7469
9319
  *,
7470
9320
  azure_options: Optional[GenerateTemporaryServiceCredentialAzureOptions] = None,
7471
- credential_name: Optional[str] = None) -> TemporaryCredentials:
9321
+ gcp_options: Optional[GenerateTemporaryServiceCredentialGcpOptions] = None
9322
+ ) -> TemporaryCredentials:
7472
9323
  """Generate a temporary service credential.
7473
9324
 
7474
9325
  Returns a set of temporary credentials generated using the specified service credential. The caller
7475
9326
  must be a metastore admin or have the metastore privilege **ACCESS** on the service credential.
7476
9327
 
7477
- :param azure_options: :class:`GenerateTemporaryServiceCredentialAzureOptions` (optional)
7478
- Options to customize the requested temporary credential
7479
- :param credential_name: str (optional)
9328
+ :param credential_name: str
7480
9329
  The name of the service credential used to generate a temporary credential
9330
+ :param azure_options: :class:`GenerateTemporaryServiceCredentialAzureOptions` (optional)
9331
+ The Azure cloud options to customize the requested temporary credential
9332
+ :param gcp_options: :class:`GenerateTemporaryServiceCredentialGcpOptions` (optional)
9333
+ The GCP cloud options to customize the requested temporary credential
7481
9334
 
7482
9335
  :returns: :class:`TemporaryCredentials`
7483
9336
  """
7484
9337
  body = {}
7485
9338
  if azure_options is not None: body['azure_options'] = azure_options.as_dict()
7486
9339
  if credential_name is not None: body['credential_name'] = credential_name
9340
+ if gcp_options is not None: body['gcp_options'] = gcp_options.as_dict()
7487
9341
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7488
9342
 
7489
9343
  res = self._api.do('POST',
@@ -7495,8 +9349,8 @@ class CredentialsAPI:
7495
9349
  def get_credential(self, name_arg: str) -> CredentialInfo:
7496
9350
  """Get a credential.
7497
9351
 
7498
- Gets a credential from the metastore. The caller must be a metastore admin, the owner of the
7499
- credential, or have any permission on the credential.
9352
+ Gets a service or storage credential from the metastore. The caller must be a metastore admin, the
9353
+ owner of the credential, or have any permission on the credential.
7500
9354
 
7501
9355
  :param name_arg: str
7502
9356
  Name of the credential.
@@ -7555,15 +9409,18 @@ class CredentialsAPI:
7555
9409
  *,
7556
9410
  aws_iam_role: Optional[AwsIamRole] = None,
7557
9411
  azure_managed_identity: Optional[AzureManagedIdentity] = None,
9412
+ azure_service_principal: Optional[AzureServicePrincipal] = None,
7558
9413
  comment: Optional[str] = None,
9414
+ databricks_gcp_service_account: Optional[DatabricksGcpServiceAccount] = None,
7559
9415
  force: Optional[bool] = None,
7560
9416
  isolation_mode: Optional[IsolationMode] = None,
7561
9417
  new_name: Optional[str] = None,
7562
9418
  owner: Optional[str] = None,
9419
+ read_only: Optional[bool] = None,
7563
9420
  skip_validation: Optional[bool] = None) -> CredentialInfo:
7564
9421
  """Update a credential.
7565
9422
 
7566
- Updates a credential on the metastore.
9423
+ Updates a service or storage credential on the metastore.
7567
9424
 
7568
9425
  The caller must be the owner of the credential or a metastore admin or have the `MANAGE` permission.
7569
9426
  If the caller is a metastore admin, only the __owner__ field can be changed.
@@ -7574,16 +9431,24 @@ class CredentialsAPI:
7574
9431
  The AWS IAM role configuration
7575
9432
  :param azure_managed_identity: :class:`AzureManagedIdentity` (optional)
7576
9433
  The Azure managed identity configuration.
9434
+ :param azure_service_principal: :class:`AzureServicePrincipal` (optional)
9435
+ The Azure service principal configuration. Only applicable when purpose is **STORAGE**.
7577
9436
  :param comment: str (optional)
7578
9437
  Comment associated with the credential.
9438
+ :param databricks_gcp_service_account: :class:`DatabricksGcpServiceAccount` (optional)
9439
+ GCP long-lived credential. Databricks-created Google Cloud Storage service account.
7579
9440
  :param force: bool (optional)
7580
- Force update even if there are dependent services.
9441
+ Force an update even if there are dependent services (when purpose is **SERVICE**) or dependent
9442
+ external locations and external tables (when purpose is **STORAGE**).
7581
9443
  :param isolation_mode: :class:`IsolationMode` (optional)
7582
9444
  Whether the current securable is accessible from all workspaces or a specific set of workspaces.
7583
9445
  :param new_name: str (optional)
7584
9446
  New name of credential.
7585
9447
  :param owner: str (optional)
7586
9448
  Username of current owner of credential.
9449
+ :param read_only: bool (optional)
9450
+ Whether the credential is usable only for read operations. Only applicable when purpose is
9451
+ **STORAGE**.
7587
9452
  :param skip_validation: bool (optional)
7588
9453
  Supply true to this argument to skip validation of the updated credential.
7589
9454
 
@@ -7593,11 +9458,16 @@ class CredentialsAPI:
7593
9458
  if aws_iam_role is not None: body['aws_iam_role'] = aws_iam_role.as_dict()
7594
9459
  if azure_managed_identity is not None:
7595
9460
  body['azure_managed_identity'] = azure_managed_identity.as_dict()
9461
+ if azure_service_principal is not None:
9462
+ body['azure_service_principal'] = azure_service_principal.as_dict()
7596
9463
  if comment is not None: body['comment'] = comment
9464
+ if databricks_gcp_service_account is not None:
9465
+ body['databricks_gcp_service_account'] = databricks_gcp_service_account.as_dict()
7597
9466
  if force is not None: body['force'] = force
7598
9467
  if isolation_mode is not None: body['isolation_mode'] = isolation_mode.value
7599
9468
  if new_name is not None: body['new_name'] = new_name
7600
9469
  if owner is not None: body['owner'] = owner
9470
+ if read_only is not None: body['read_only'] = read_only
7601
9471
  if skip_validation is not None: body['skip_validation'] = skip_validation
7602
9472
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7603
9473
 
@@ -7612,14 +9482,25 @@ class CredentialsAPI:
7612
9482
  aws_iam_role: Optional[AwsIamRole] = None,
7613
9483
  azure_managed_identity: Optional[AzureManagedIdentity] = None,
7614
9484
  credential_name: Optional[str] = None,
7615
- purpose: Optional[CredentialPurpose] = None) -> ValidateCredentialResponse:
9485
+ external_location_name: Optional[str] = None,
9486
+ purpose: Optional[CredentialPurpose] = None,
9487
+ read_only: Optional[bool] = None,
9488
+ url: Optional[str] = None) -> ValidateCredentialResponse:
7616
9489
  """Validate a credential.
7617
9490
 
7618
9491
  Validates a credential.
7619
9492
 
7620
- Either the __credential_name__ or the cloud-specific credential must be provided.
9493
+ For service credentials (purpose is **SERVICE**), either the __credential_name__ or the cloud-specific
9494
+ credential must be provided.
9495
+
9496
+ For storage credentials (purpose is **STORAGE**), at least one of __external_location_name__ and
9497
+ __url__ need to be provided. If only one of them is provided, it will be used for validation. And if
9498
+ both are provided, the __url__ will be used for validation, and __external_location_name__ will be
9499
+ ignored when checking overlapping urls. Either the __credential_name__ or the cloud-specific
9500
+ credential must be provided.
7621
9501
 
7622
- The caller must be a metastore admin or the credential owner.
9502
+ The caller must be a metastore admin or the credential owner or have the required permission on the
9503
+ metastore and the credential (e.g., **CREATE_EXTERNAL_LOCATION** when purpose is **STORAGE**).
7623
9504
 
7624
9505
  :param aws_iam_role: :class:`AwsIamRole` (optional)
7625
9506
  The AWS IAM role configuration
@@ -7627,8 +9508,16 @@ class CredentialsAPI:
7627
9508
  The Azure managed identity configuration.
7628
9509
  :param credential_name: str (optional)
7629
9510
  Required. The name of an existing credential or long-lived cloud credential to validate.
9511
+ :param external_location_name: str (optional)
9512
+ The name of an existing external location to validate. Only applicable for storage credentials
9513
+ (purpose is **STORAGE**.)
7630
9514
  :param purpose: :class:`CredentialPurpose` (optional)
7631
9515
  The purpose of the credential. This should only be used when the credential is specified.
9516
+ :param read_only: bool (optional)
9517
+ Whether the credential is only usable for read operations. Only applicable for storage credentials
9518
+ (purpose is **STORAGE**.)
9519
+ :param url: str (optional)
9520
+ The external location url to validate. Only applicable when purpose is **STORAGE**.
7632
9521
 
7633
9522
  :returns: :class:`ValidateCredentialResponse`
7634
9523
  """
@@ -7637,7 +9526,10 @@ class CredentialsAPI:
7637
9526
  if azure_managed_identity is not None:
7638
9527
  body['azure_managed_identity'] = azure_managed_identity.as_dict()
7639
9528
  if credential_name is not None: body['credential_name'] = credential_name
9529
+ if external_location_name is not None: body['external_location_name'] = external_location_name
7640
9530
  if purpose is not None: body['purpose'] = purpose.value
9531
+ if read_only is not None: body['read_only'] = read_only
9532
+ if url is not None: body['url'] = url
7641
9533
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7642
9534
 
7643
9535
  res = self._api.do('POST', '/api/2.1/unity-catalog/validate-credentials', body=body, headers=headers)
@@ -8640,7 +10532,7 @@ class OnlineTablesAPI:
8640
10532
  Long-running operation waiter for :class:`OnlineTable`.
8641
10533
  See :method:wait_get_online_table_active for more details.
8642
10534
  """
8643
- body = table
10535
+ body = table.as_dict()
8644
10536
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
8645
10537
 
8646
10538
  op_response = self._api.do('POST', '/api/2.0/online-tables', body=body, headers=headers)
@@ -10128,6 +12020,7 @@ class TablesAPI:
10128
12020
  max_results: Optional[int] = None,
10129
12021
  omit_columns: Optional[bool] = None,
10130
12022
  omit_properties: Optional[bool] = None,
12023
+ omit_username: Optional[bool] = None,
10131
12024
  page_token: Optional[str] = None) -> Iterator[TableInfo]:
10132
12025
  """List tables.
10133
12026
 
@@ -10157,6 +12050,9 @@ class TablesAPI:
10157
12050
  Whether to omit the columns of the table from the response or not.
10158
12051
  :param omit_properties: bool (optional)
10159
12052
  Whether to omit the properties of the table from the response or not.
12053
+ :param omit_username: bool (optional)
12054
+ Whether to omit the username of the table (e.g. owner, updated_by, created_by) from the response or
12055
+ not.
10160
12056
  :param page_token: str (optional)
10161
12057
  Opaque token to send for the next page of results (pagination).
10162
12058
 
@@ -10172,6 +12068,7 @@ class TablesAPI:
10172
12068
  if max_results is not None: query['max_results'] = max_results
10173
12069
  if omit_columns is not None: query['omit_columns'] = omit_columns
10174
12070
  if omit_properties is not None: query['omit_properties'] = omit_properties
12071
+ if omit_username is not None: query['omit_username'] = omit_username
10175
12072
  if page_token is not None: query['page_token'] = page_token
10176
12073
  if schema_name is not None: query['schema_name'] = schema_name
10177
12074
  headers = {'Accept': 'application/json', }