databricks-sdk 0.20.0__py3-none-any.whl → 0.21.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.
- databricks/sdk/__init__.py +21 -6
- databricks/sdk/_widgets/__init__.py +2 -2
- databricks/sdk/config.py +3 -2
- databricks/sdk/oauth.py +1 -1
- databricks/sdk/runtime/__init__.py +85 -11
- databricks/sdk/runtime/dbutils_stub.py +1 -1
- databricks/sdk/service/_internal.py +1 -1
- databricks/sdk/service/billing.py +42 -0
- databricks/sdk/service/catalog.py +245 -44
- databricks/sdk/service/compute.py +334 -13
- databricks/sdk/service/dashboards.py +14 -0
- databricks/sdk/service/files.py +154 -12
- databricks/sdk/service/iam.py +161 -0
- databricks/sdk/service/jobs.py +95 -8
- databricks/sdk/service/ml.py +350 -0
- databricks/sdk/service/oauth2.py +70 -0
- databricks/sdk/service/pipelines.py +66 -8
- databricks/sdk/service/provisioning.py +78 -36
- databricks/sdk/service/serving.py +28 -0
- databricks/sdk/service/settings.py +1292 -203
- databricks/sdk/service/sharing.py +56 -0
- databricks/sdk/service/sql.py +138 -11
- databricks/sdk/service/vectorsearch.py +95 -60
- databricks/sdk/service/workspace.py +141 -1
- databricks/sdk/version.py +1 -1
- {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/METADATA +3 -1
- databricks_sdk-0.21.0.dist-info/RECORD +53 -0
- databricks/sdk/runtime/stub.py +0 -48
- databricks_sdk-0.20.0.dist-info/RECORD +0 -54
- {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/LICENSE +0 -0
- {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/NOTICE +0 -0
- {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/WHEEL +0 -0
- {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/top_level.txt +0 -0
databricks/sdk/service/files.py
CHANGED
|
@@ -34,6 +34,20 @@ class AddBlock:
|
|
|
34
34
|
return cls(data=d.get('data', None), handle=d.get('handle', None))
|
|
35
35
|
|
|
36
36
|
|
|
37
|
+
@dataclass
|
|
38
|
+
class AddBlockResponse:
|
|
39
|
+
|
|
40
|
+
def as_dict(self) -> dict:
|
|
41
|
+
"""Serializes the AddBlockResponse into a dictionary suitable for use as a JSON request body."""
|
|
42
|
+
body = {}
|
|
43
|
+
return body
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def from_dict(cls, d: Dict[str, any]) -> AddBlockResponse:
|
|
47
|
+
"""Deserializes the AddBlockResponse from a dictionary."""
|
|
48
|
+
return cls()
|
|
49
|
+
|
|
50
|
+
|
|
37
51
|
@dataclass
|
|
38
52
|
class Close:
|
|
39
53
|
handle: int
|
|
@@ -51,6 +65,20 @@ class Close:
|
|
|
51
65
|
return cls(handle=d.get('handle', None))
|
|
52
66
|
|
|
53
67
|
|
|
68
|
+
@dataclass
|
|
69
|
+
class CloseResponse:
|
|
70
|
+
|
|
71
|
+
def as_dict(self) -> dict:
|
|
72
|
+
"""Serializes the CloseResponse into a dictionary suitable for use as a JSON request body."""
|
|
73
|
+
body = {}
|
|
74
|
+
return body
|
|
75
|
+
|
|
76
|
+
@classmethod
|
|
77
|
+
def from_dict(cls, d: Dict[str, any]) -> CloseResponse:
|
|
78
|
+
"""Deserializes the CloseResponse from a dictionary."""
|
|
79
|
+
return cls()
|
|
80
|
+
|
|
81
|
+
|
|
54
82
|
@dataclass
|
|
55
83
|
class Create:
|
|
56
84
|
path: str
|
|
@@ -72,6 +100,20 @@ class Create:
|
|
|
72
100
|
return cls(overwrite=d.get('overwrite', None), path=d.get('path', None))
|
|
73
101
|
|
|
74
102
|
|
|
103
|
+
@dataclass
|
|
104
|
+
class CreateDirectoryResponse:
|
|
105
|
+
|
|
106
|
+
def as_dict(self) -> dict:
|
|
107
|
+
"""Serializes the CreateDirectoryResponse into a dictionary suitable for use as a JSON request body."""
|
|
108
|
+
body = {}
|
|
109
|
+
return body
|
|
110
|
+
|
|
111
|
+
@classmethod
|
|
112
|
+
def from_dict(cls, d: Dict[str, any]) -> CreateDirectoryResponse:
|
|
113
|
+
"""Deserializes the CreateDirectoryResponse from a dictionary."""
|
|
114
|
+
return cls()
|
|
115
|
+
|
|
116
|
+
|
|
75
117
|
@dataclass
|
|
76
118
|
class CreateResponse:
|
|
77
119
|
handle: Optional[int] = None
|
|
@@ -112,6 +154,34 @@ class Delete:
|
|
|
112
154
|
return cls(path=d.get('path', None), recursive=d.get('recursive', None))
|
|
113
155
|
|
|
114
156
|
|
|
157
|
+
@dataclass
|
|
158
|
+
class DeleteDirectoryResponse:
|
|
159
|
+
|
|
160
|
+
def as_dict(self) -> dict:
|
|
161
|
+
"""Serializes the DeleteDirectoryResponse into a dictionary suitable for use as a JSON request body."""
|
|
162
|
+
body = {}
|
|
163
|
+
return body
|
|
164
|
+
|
|
165
|
+
@classmethod
|
|
166
|
+
def from_dict(cls, d: Dict[str, any]) -> DeleteDirectoryResponse:
|
|
167
|
+
"""Deserializes the DeleteDirectoryResponse from a dictionary."""
|
|
168
|
+
return cls()
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
@dataclass
|
|
172
|
+
class DeleteResponse:
|
|
173
|
+
|
|
174
|
+
def as_dict(self) -> dict:
|
|
175
|
+
"""Serializes the DeleteResponse into a dictionary suitable for use as a JSON request body."""
|
|
176
|
+
body = {}
|
|
177
|
+
return body
|
|
178
|
+
|
|
179
|
+
@classmethod
|
|
180
|
+
def from_dict(cls, d: Dict[str, any]) -> DeleteResponse:
|
|
181
|
+
"""Deserializes the DeleteResponse from a dictionary."""
|
|
182
|
+
return cls()
|
|
183
|
+
|
|
184
|
+
|
|
115
185
|
@dataclass
|
|
116
186
|
class DirectoryEntry:
|
|
117
187
|
file_size: Optional[int] = None
|
|
@@ -171,7 +241,7 @@ class DownloadResponse:
|
|
|
171
241
|
@classmethod
|
|
172
242
|
def from_dict(cls, d: Dict[str, any]) -> DownloadResponse:
|
|
173
243
|
"""Deserializes the DownloadResponse from a dictionary."""
|
|
174
|
-
return cls(content_length=d.get('content-length', None),
|
|
244
|
+
return cls(content_length=int(d.get('content-length', None)),
|
|
175
245
|
content_type=d.get('content-type', None),
|
|
176
246
|
contents=d.get('contents', None),
|
|
177
247
|
last_modified=d.get('last-modified', None))
|
|
@@ -209,6 +279,20 @@ class FileInfo:
|
|
|
209
279
|
path=d.get('path', None))
|
|
210
280
|
|
|
211
281
|
|
|
282
|
+
@dataclass
|
|
283
|
+
class GetDirectoryMetadataResponse:
|
|
284
|
+
|
|
285
|
+
def as_dict(self) -> dict:
|
|
286
|
+
"""Serializes the GetDirectoryMetadataResponse into a dictionary suitable for use as a JSON request body."""
|
|
287
|
+
body = {}
|
|
288
|
+
return body
|
|
289
|
+
|
|
290
|
+
@classmethod
|
|
291
|
+
def from_dict(cls, d: Dict[str, any]) -> GetDirectoryMetadataResponse:
|
|
292
|
+
"""Deserializes the GetDirectoryMetadataResponse from a dictionary."""
|
|
293
|
+
return cls()
|
|
294
|
+
|
|
295
|
+
|
|
212
296
|
@dataclass
|
|
213
297
|
class GetMetadataResponse:
|
|
214
298
|
content_length: Optional[int] = None
|
|
@@ -228,7 +312,7 @@ class GetMetadataResponse:
|
|
|
228
312
|
@classmethod
|
|
229
313
|
def from_dict(cls, d: Dict[str, any]) -> GetMetadataResponse:
|
|
230
314
|
"""Deserializes the GetMetadataResponse from a dictionary."""
|
|
231
|
-
return cls(content_length=d.get('content-length', None),
|
|
315
|
+
return cls(content_length=int(d.get('content-length', None)),
|
|
232
316
|
content_type=d.get('content-type', None),
|
|
233
317
|
last_modified=d.get('last-modified', None))
|
|
234
318
|
|
|
@@ -289,6 +373,20 @@ class MkDirs:
|
|
|
289
373
|
return cls(path=d.get('path', None))
|
|
290
374
|
|
|
291
375
|
|
|
376
|
+
@dataclass
|
|
377
|
+
class MkDirsResponse:
|
|
378
|
+
|
|
379
|
+
def as_dict(self) -> dict:
|
|
380
|
+
"""Serializes the MkDirsResponse into a dictionary suitable for use as a JSON request body."""
|
|
381
|
+
body = {}
|
|
382
|
+
return body
|
|
383
|
+
|
|
384
|
+
@classmethod
|
|
385
|
+
def from_dict(cls, d: Dict[str, any]) -> MkDirsResponse:
|
|
386
|
+
"""Deserializes the MkDirsResponse from a dictionary."""
|
|
387
|
+
return cls()
|
|
388
|
+
|
|
389
|
+
|
|
292
390
|
@dataclass
|
|
293
391
|
class Move:
|
|
294
392
|
source_path: str
|
|
@@ -310,6 +408,20 @@ class Move:
|
|
|
310
408
|
return cls(destination_path=d.get('destination_path', None), source_path=d.get('source_path', None))
|
|
311
409
|
|
|
312
410
|
|
|
411
|
+
@dataclass
|
|
412
|
+
class MoveResponse:
|
|
413
|
+
|
|
414
|
+
def as_dict(self) -> dict:
|
|
415
|
+
"""Serializes the MoveResponse into a dictionary suitable for use as a JSON request body."""
|
|
416
|
+
body = {}
|
|
417
|
+
return body
|
|
418
|
+
|
|
419
|
+
@classmethod
|
|
420
|
+
def from_dict(cls, d: Dict[str, any]) -> MoveResponse:
|
|
421
|
+
"""Deserializes the MoveResponse from a dictionary."""
|
|
422
|
+
return cls()
|
|
423
|
+
|
|
424
|
+
|
|
313
425
|
@dataclass
|
|
314
426
|
class Put:
|
|
315
427
|
path: str
|
|
@@ -337,6 +449,20 @@ class Put:
|
|
|
337
449
|
path=d.get('path', None))
|
|
338
450
|
|
|
339
451
|
|
|
452
|
+
@dataclass
|
|
453
|
+
class PutResponse:
|
|
454
|
+
|
|
455
|
+
def as_dict(self) -> dict:
|
|
456
|
+
"""Serializes the PutResponse into a dictionary suitable for use as a JSON request body."""
|
|
457
|
+
body = {}
|
|
458
|
+
return body
|
|
459
|
+
|
|
460
|
+
@classmethod
|
|
461
|
+
def from_dict(cls, d: Dict[str, any]) -> PutResponse:
|
|
462
|
+
"""Deserializes the PutResponse from a dictionary."""
|
|
463
|
+
return cls()
|
|
464
|
+
|
|
465
|
+
|
|
340
466
|
@dataclass
|
|
341
467
|
class ReadResponse:
|
|
342
468
|
bytes_read: Optional[int] = None
|
|
@@ -359,6 +485,20 @@ class ReadResponse:
|
|
|
359
485
|
return cls(bytes_read=d.get('bytes_read', None), data=d.get('data', None))
|
|
360
486
|
|
|
361
487
|
|
|
488
|
+
@dataclass
|
|
489
|
+
class UploadResponse:
|
|
490
|
+
|
|
491
|
+
def as_dict(self) -> dict:
|
|
492
|
+
"""Serializes the UploadResponse into a dictionary suitable for use as a JSON request body."""
|
|
493
|
+
body = {}
|
|
494
|
+
return body
|
|
495
|
+
|
|
496
|
+
@classmethod
|
|
497
|
+
def from_dict(cls, d: Dict[str, any]) -> UploadResponse:
|
|
498
|
+
"""Deserializes the UploadResponse from a dictionary."""
|
|
499
|
+
return cls()
|
|
500
|
+
|
|
501
|
+
|
|
362
502
|
class DbfsAPI:
|
|
363
503
|
"""DBFS API makes it simple to interact with various data sources without having to include a users
|
|
364
504
|
credentials every time to read a file."""
|
|
@@ -616,18 +756,20 @@ class DbfsAPI:
|
|
|
616
756
|
|
|
617
757
|
|
|
618
758
|
class FilesAPI:
|
|
619
|
-
"""The Files API allows you to read, write, list, and delete files and
|
|
620
|
-
|
|
759
|
+
"""The Files API is a standard HTTP API that allows you to read, write, list, and delete files and
|
|
760
|
+
directories by referring to their URI. The API makes working with file content as raw bytes easier and
|
|
761
|
+
more efficient.
|
|
621
762
|
|
|
622
|
-
The
|
|
623
|
-
|
|
763
|
+
The API supports [Unity Catalog volumes], where files and directories to operate on are specified using
|
|
764
|
+
their volume URI path, which follows the format
|
|
765
|
+
/Volumes/<catalog_name>/<schema_name>/<volume_name>/<path_to_file>.
|
|
624
766
|
|
|
625
|
-
|
|
626
|
-
|
|
767
|
+
The Files API has two distinct endpoints, one for working with files (`/fs/files`) and another one for
|
|
768
|
+
working with directories (`/fs/directories`). Both endpoints, use the standard HTTP methods GET, HEAD,
|
|
769
|
+
PUT, and DELETE to manage files and directories specified using their URI path. The path is always
|
|
770
|
+
absolute.
|
|
627
771
|
|
|
628
|
-
|
|
629
|
-
`/fs/directories`. The standard HTTP methods `GET`, `HEAD`, `PUT`, and `DELETE` work as expected on these
|
|
630
|
-
endpoints."""
|
|
772
|
+
[Unity Catalog volumes]: https://docs.databricks.com/en/connect/unity-catalog/volumes.html"""
|
|
631
773
|
|
|
632
774
|
def __init__(self, api_client):
|
|
633
775
|
self._api = api_client
|
|
@@ -637,7 +779,7 @@ class FilesAPI:
|
|
|
637
779
|
|
|
638
780
|
Creates an empty directory. If necessary, also creates any parent directories of the new, empty
|
|
639
781
|
directory (like the shell command `mkdir -p`). If called on an existing directory, returns a success
|
|
640
|
-
response; this method is idempotent.
|
|
782
|
+
response; this method is idempotent (it will succeed if the directory already exists).
|
|
641
783
|
|
|
642
784
|
:param directory_path: str
|
|
643
785
|
The absolute path of a directory.
|
databricks/sdk/service/iam.py
CHANGED
|
@@ -117,6 +117,34 @@ class ComplexValue:
|
|
|
117
117
|
value=d.get('value', None))
|
|
118
118
|
|
|
119
119
|
|
|
120
|
+
@dataclass
|
|
121
|
+
class DeleteResponse:
|
|
122
|
+
|
|
123
|
+
def as_dict(self) -> dict:
|
|
124
|
+
"""Serializes the DeleteResponse into a dictionary suitable for use as a JSON request body."""
|
|
125
|
+
body = {}
|
|
126
|
+
return body
|
|
127
|
+
|
|
128
|
+
@classmethod
|
|
129
|
+
def from_dict(cls, d: Dict[str, any]) -> DeleteResponse:
|
|
130
|
+
"""Deserializes the DeleteResponse from a dictionary."""
|
|
131
|
+
return cls()
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
@dataclass
|
|
135
|
+
class DeleteWorkspaceAssignments:
|
|
136
|
+
|
|
137
|
+
def as_dict(self) -> dict:
|
|
138
|
+
"""Serializes the DeleteWorkspaceAssignments into a dictionary suitable for use as a JSON request body."""
|
|
139
|
+
body = {}
|
|
140
|
+
return body
|
|
141
|
+
|
|
142
|
+
@classmethod
|
|
143
|
+
def from_dict(cls, d: Dict[str, any]) -> DeleteWorkspaceAssignments:
|
|
144
|
+
"""Deserializes the DeleteWorkspaceAssignments from a dictionary."""
|
|
145
|
+
return cls()
|
|
146
|
+
|
|
147
|
+
|
|
120
148
|
@dataclass
|
|
121
149
|
class GetAssignableRolesForResourceResponse:
|
|
122
150
|
roles: Optional[List[Role]] = None
|
|
@@ -649,6 +677,20 @@ class PatchOp(Enum):
|
|
|
649
677
|
REPLACE = 'replace'
|
|
650
678
|
|
|
651
679
|
|
|
680
|
+
@dataclass
|
|
681
|
+
class PatchResponse:
|
|
682
|
+
|
|
683
|
+
def as_dict(self) -> dict:
|
|
684
|
+
"""Serializes the PatchResponse into a dictionary suitable for use as a JSON request body."""
|
|
685
|
+
body = {}
|
|
686
|
+
return body
|
|
687
|
+
|
|
688
|
+
@classmethod
|
|
689
|
+
def from_dict(cls, d: Dict[str, any]) -> PatchResponse:
|
|
690
|
+
"""Deserializes the PatchResponse from a dictionary."""
|
|
691
|
+
return cls()
|
|
692
|
+
|
|
693
|
+
|
|
652
694
|
class PatchSchema(Enum):
|
|
653
695
|
|
|
654
696
|
URN_IETF_PARAMS_SCIM_API_MESSAGES_2_0_PATCH_OP = 'urn:ietf:params:scim:api:messages:2.0:PatchOp'
|
|
@@ -744,6 +786,57 @@ class PermissionLevel(Enum):
|
|
|
744
786
|
IS_OWNER = 'IS_OWNER'
|
|
745
787
|
|
|
746
788
|
|
|
789
|
+
@dataclass
|
|
790
|
+
class PermissionMigrationRequest:
|
|
791
|
+
workspace_id: int
|
|
792
|
+
"""WorkspaceId of the associated workspace where the permission migration will occur. Both
|
|
793
|
+
workspace group and account group must be in this workspace."""
|
|
794
|
+
|
|
795
|
+
from_workspace_group_name: str
|
|
796
|
+
"""The name of the workspace group that permissions will be migrated from."""
|
|
797
|
+
|
|
798
|
+
to_account_group_name: str
|
|
799
|
+
"""The name of the account group that permissions will be migrated to."""
|
|
800
|
+
|
|
801
|
+
size: Optional[int] = None
|
|
802
|
+
"""The maximum number of permissions that will be migrated."""
|
|
803
|
+
|
|
804
|
+
def as_dict(self) -> dict:
|
|
805
|
+
"""Serializes the PermissionMigrationRequest into a dictionary suitable for use as a JSON request body."""
|
|
806
|
+
body = {}
|
|
807
|
+
if self.from_workspace_group_name is not None:
|
|
808
|
+
body['from_workspace_group_name'] = self.from_workspace_group_name
|
|
809
|
+
if self.size is not None: body['size'] = self.size
|
|
810
|
+
if self.to_account_group_name is not None: body['to_account_group_name'] = self.to_account_group_name
|
|
811
|
+
if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
|
|
812
|
+
return body
|
|
813
|
+
|
|
814
|
+
@classmethod
|
|
815
|
+
def from_dict(cls, d: Dict[str, any]) -> PermissionMigrationRequest:
|
|
816
|
+
"""Deserializes the PermissionMigrationRequest from a dictionary."""
|
|
817
|
+
return cls(from_workspace_group_name=d.get('from_workspace_group_name', None),
|
|
818
|
+
size=d.get('size', None),
|
|
819
|
+
to_account_group_name=d.get('to_account_group_name', None),
|
|
820
|
+
workspace_id=d.get('workspace_id', None))
|
|
821
|
+
|
|
822
|
+
|
|
823
|
+
@dataclass
|
|
824
|
+
class PermissionMigrationResponse:
|
|
825
|
+
permissions_migrated: Optional[int] = None
|
|
826
|
+
"""Number of permissions migrated."""
|
|
827
|
+
|
|
828
|
+
def as_dict(self) -> dict:
|
|
829
|
+
"""Serializes the PermissionMigrationResponse into a dictionary suitable for use as a JSON request body."""
|
|
830
|
+
body = {}
|
|
831
|
+
if self.permissions_migrated is not None: body['permissions_migrated'] = self.permissions_migrated
|
|
832
|
+
return body
|
|
833
|
+
|
|
834
|
+
@classmethod
|
|
835
|
+
def from_dict(cls, d: Dict[str, any]) -> PermissionMigrationResponse:
|
|
836
|
+
"""Deserializes the PermissionMigrationResponse from a dictionary."""
|
|
837
|
+
return cls(permissions_migrated=d.get('permissions_migrated', None))
|
|
838
|
+
|
|
839
|
+
|
|
747
840
|
@dataclass
|
|
748
841
|
class PermissionOutput:
|
|
749
842
|
description: Optional[str] = None
|
|
@@ -1004,6 +1097,20 @@ class ServicePrincipalSchema(Enum):
|
|
|
1004
1097
|
URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_SERVICE_PRINCIPAL = 'urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal'
|
|
1005
1098
|
|
|
1006
1099
|
|
|
1100
|
+
@dataclass
|
|
1101
|
+
class UpdateResponse:
|
|
1102
|
+
|
|
1103
|
+
def as_dict(self) -> dict:
|
|
1104
|
+
"""Serializes the UpdateResponse into a dictionary suitable for use as a JSON request body."""
|
|
1105
|
+
body = {}
|
|
1106
|
+
return body
|
|
1107
|
+
|
|
1108
|
+
@classmethod
|
|
1109
|
+
def from_dict(cls, d: Dict[str, any]) -> UpdateResponse:
|
|
1110
|
+
"""Deserializes the UpdateResponse from a dictionary."""
|
|
1111
|
+
return cls()
|
|
1112
|
+
|
|
1113
|
+
|
|
1007
1114
|
@dataclass
|
|
1008
1115
|
class UpdateRuleSetRequest:
|
|
1009
1116
|
name: str
|
|
@@ -1130,6 +1237,20 @@ class UserSchema(Enum):
|
|
|
1130
1237
|
URN_IETF_PARAMS_SCIM_SCHEMAS_EXTENSION_WORKSPACE_2_0_USER = 'urn:ietf:params:scim:schemas:extension:workspace:2.0:User'
|
|
1131
1238
|
|
|
1132
1239
|
|
|
1240
|
+
@dataclass
|
|
1241
|
+
class WorkspaceAssignmentsUpdated:
|
|
1242
|
+
|
|
1243
|
+
def as_dict(self) -> dict:
|
|
1244
|
+
"""Serializes the WorkspaceAssignmentsUpdated into a dictionary suitable for use as a JSON request body."""
|
|
1245
|
+
body = {}
|
|
1246
|
+
return body
|
|
1247
|
+
|
|
1248
|
+
@classmethod
|
|
1249
|
+
def from_dict(cls, d: Dict[str, any]) -> WorkspaceAssignmentsUpdated:
|
|
1250
|
+
"""Deserializes the WorkspaceAssignmentsUpdated from a dictionary."""
|
|
1251
|
+
return cls()
|
|
1252
|
+
|
|
1253
|
+
|
|
1133
1254
|
class WorkspacePermission(Enum):
|
|
1134
1255
|
|
|
1135
1256
|
ADMIN = 'ADMIN'
|
|
@@ -2384,6 +2505,46 @@ class GroupsAPI:
|
|
|
2384
2505
|
self._api.do('PUT', f'/api/2.0/preview/scim/v2/Groups/{id}', body=body, headers=headers)
|
|
2385
2506
|
|
|
2386
2507
|
|
|
2508
|
+
class PermissionMigrationAPI:
|
|
2509
|
+
"""This spec contains undocumented permission migration APIs used in https://github.com/databrickslabs/ucx."""
|
|
2510
|
+
|
|
2511
|
+
def __init__(self, api_client):
|
|
2512
|
+
self._api = api_client
|
|
2513
|
+
|
|
2514
|
+
def migrate_permissions(self,
|
|
2515
|
+
workspace_id: int,
|
|
2516
|
+
from_workspace_group_name: str,
|
|
2517
|
+
to_account_group_name: str,
|
|
2518
|
+
*,
|
|
2519
|
+
size: Optional[int] = None) -> PermissionMigrationResponse:
|
|
2520
|
+
"""Migrate Permissions.
|
|
2521
|
+
|
|
2522
|
+
Migrate a batch of permissions from a workspace local group to an account group.
|
|
2523
|
+
|
|
2524
|
+
:param workspace_id: int
|
|
2525
|
+
WorkspaceId of the associated workspace where the permission migration will occur. Both workspace
|
|
2526
|
+
group and account group must be in this workspace.
|
|
2527
|
+
:param from_workspace_group_name: str
|
|
2528
|
+
The name of the workspace group that permissions will be migrated from.
|
|
2529
|
+
:param to_account_group_name: str
|
|
2530
|
+
The name of the account group that permissions will be migrated to.
|
|
2531
|
+
:param size: int (optional)
|
|
2532
|
+
The maximum number of permissions that will be migrated.
|
|
2533
|
+
|
|
2534
|
+
:returns: :class:`PermissionMigrationResponse`
|
|
2535
|
+
"""
|
|
2536
|
+
body = {}
|
|
2537
|
+
if from_workspace_group_name is not None:
|
|
2538
|
+
body['from_workspace_group_name'] = from_workspace_group_name
|
|
2539
|
+
if size is not None: body['size'] = size
|
|
2540
|
+
if to_account_group_name is not None: body['to_account_group_name'] = to_account_group_name
|
|
2541
|
+
if workspace_id is not None: body['workspace_id'] = workspace_id
|
|
2542
|
+
headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
|
|
2543
|
+
|
|
2544
|
+
res = self._api.do('POST', '/api/2.0/permissionmigration', body=body, headers=headers)
|
|
2545
|
+
return PermissionMigrationResponse.from_dict(res)
|
|
2546
|
+
|
|
2547
|
+
|
|
2387
2548
|
class PermissionsAPI:
|
|
2388
2549
|
"""Permissions API are used to create read, write, edit, update and manage access for various users on
|
|
2389
2550
|
different objects and endpoints.
|
databricks/sdk/service/jobs.py
CHANGED
|
@@ -261,6 +261,20 @@ class CancelAllRuns:
|
|
|
261
261
|
return cls(all_queued_runs=d.get('all_queued_runs', None), job_id=d.get('job_id', None))
|
|
262
262
|
|
|
263
263
|
|
|
264
|
+
@dataclass
|
|
265
|
+
class CancelAllRunsResponse:
|
|
266
|
+
|
|
267
|
+
def as_dict(self) -> dict:
|
|
268
|
+
"""Serializes the CancelAllRunsResponse into a dictionary suitable for use as a JSON request body."""
|
|
269
|
+
body = {}
|
|
270
|
+
return body
|
|
271
|
+
|
|
272
|
+
@classmethod
|
|
273
|
+
def from_dict(cls, d: Dict[str, any]) -> CancelAllRunsResponse:
|
|
274
|
+
"""Deserializes the CancelAllRunsResponse from a dictionary."""
|
|
275
|
+
return cls()
|
|
276
|
+
|
|
277
|
+
|
|
264
278
|
@dataclass
|
|
265
279
|
class CancelRun:
|
|
266
280
|
run_id: int
|
|
@@ -278,6 +292,20 @@ class CancelRun:
|
|
|
278
292
|
return cls(run_id=d.get('run_id', None))
|
|
279
293
|
|
|
280
294
|
|
|
295
|
+
@dataclass
|
|
296
|
+
class CancelRunResponse:
|
|
297
|
+
|
|
298
|
+
def as_dict(self) -> dict:
|
|
299
|
+
"""Serializes the CancelRunResponse into a dictionary suitable for use as a JSON request body."""
|
|
300
|
+
body = {}
|
|
301
|
+
return body
|
|
302
|
+
|
|
303
|
+
@classmethod
|
|
304
|
+
def from_dict(cls, d: Dict[str, any]) -> CancelRunResponse:
|
|
305
|
+
"""Deserializes the CancelRunResponse from a dictionary."""
|
|
306
|
+
return cls()
|
|
307
|
+
|
|
308
|
+
|
|
281
309
|
@dataclass
|
|
282
310
|
class ClusterInstance:
|
|
283
311
|
cluster_id: Optional[str] = None
|
|
@@ -744,6 +772,20 @@ class DeleteJob:
|
|
|
744
772
|
return cls(job_id=d.get('job_id', None))
|
|
745
773
|
|
|
746
774
|
|
|
775
|
+
@dataclass
|
|
776
|
+
class DeleteResponse:
|
|
777
|
+
|
|
778
|
+
def as_dict(self) -> dict:
|
|
779
|
+
"""Serializes the DeleteResponse into a dictionary suitable for use as a JSON request body."""
|
|
780
|
+
body = {}
|
|
781
|
+
return body
|
|
782
|
+
|
|
783
|
+
@classmethod
|
|
784
|
+
def from_dict(cls, d: Dict[str, any]) -> DeleteResponse:
|
|
785
|
+
"""Deserializes the DeleteResponse from a dictionary."""
|
|
786
|
+
return cls()
|
|
787
|
+
|
|
788
|
+
|
|
747
789
|
@dataclass
|
|
748
790
|
class DeleteRun:
|
|
749
791
|
run_id: int
|
|
@@ -761,6 +803,20 @@ class DeleteRun:
|
|
|
761
803
|
return cls(run_id=d.get('run_id', None))
|
|
762
804
|
|
|
763
805
|
|
|
806
|
+
@dataclass
|
|
807
|
+
class DeleteRunResponse:
|
|
808
|
+
|
|
809
|
+
def as_dict(self) -> dict:
|
|
810
|
+
"""Serializes the DeleteRunResponse into a dictionary suitable for use as a JSON request body."""
|
|
811
|
+
body = {}
|
|
812
|
+
return body
|
|
813
|
+
|
|
814
|
+
@classmethod
|
|
815
|
+
def from_dict(cls, d: Dict[str, any]) -> DeleteRunResponse:
|
|
816
|
+
"""Deserializes the DeleteRunResponse from a dictionary."""
|
|
817
|
+
return cls()
|
|
818
|
+
|
|
819
|
+
|
|
764
820
|
@dataclass
|
|
765
821
|
class ExportRunOutput:
|
|
766
822
|
views: Optional[List[ViewItem]] = None
|
|
@@ -1777,13 +1833,13 @@ class ListJobsResponse:
|
|
|
1777
1833
|
"""If true, additional jobs matching the provided filter are available for listing."""
|
|
1778
1834
|
|
|
1779
1835
|
jobs: Optional[List[BaseJob]] = None
|
|
1780
|
-
"""The list of jobs."""
|
|
1836
|
+
"""The list of jobs. Only included in the response if there are jobs to list."""
|
|
1781
1837
|
|
|
1782
1838
|
next_page_token: Optional[str] = None
|
|
1783
|
-
"""A token that can be used to list the next page of jobs."""
|
|
1839
|
+
"""A token that can be used to list the next page of jobs (if applicable)."""
|
|
1784
1840
|
|
|
1785
1841
|
prev_page_token: Optional[str] = None
|
|
1786
|
-
"""A token that can be used to list the previous page of jobs."""
|
|
1842
|
+
"""A token that can be used to list the previous page of jobs (if applicable)."""
|
|
1787
1843
|
|
|
1788
1844
|
def as_dict(self) -> dict:
|
|
1789
1845
|
"""Serializes the ListJobsResponse into a dictionary suitable for use as a JSON request body."""
|
|
@@ -1809,13 +1865,14 @@ class ListRunsResponse:
|
|
|
1809
1865
|
"""If true, additional runs matching the provided filter are available for listing."""
|
|
1810
1866
|
|
|
1811
1867
|
next_page_token: Optional[str] = None
|
|
1812
|
-
"""A token that can be used to list the next page of runs."""
|
|
1868
|
+
"""A token that can be used to list the next page of runs (if applicable)."""
|
|
1813
1869
|
|
|
1814
1870
|
prev_page_token: Optional[str] = None
|
|
1815
|
-
"""A token that can be used to list the previous page of runs."""
|
|
1871
|
+
"""A token that can be used to list the previous page of runs (if applicable)."""
|
|
1816
1872
|
|
|
1817
1873
|
runs: Optional[List[BaseRun]] = None
|
|
1818
|
-
"""A list of runs, from most recently started to least.
|
|
1874
|
+
"""A list of runs, from most recently started to least. Only included in the response if there are
|
|
1875
|
+
runs to list."""
|
|
1819
1876
|
|
|
1820
1877
|
def as_dict(self) -> dict:
|
|
1821
1878
|
"""Serializes the ListRunsResponse into a dictionary suitable for use as a JSON request body."""
|
|
@@ -2248,6 +2305,20 @@ class ResetJob:
|
|
|
2248
2305
|
return cls(job_id=d.get('job_id', None), new_settings=_from_dict(d, 'new_settings', JobSettings))
|
|
2249
2306
|
|
|
2250
2307
|
|
|
2308
|
+
@dataclass
|
|
2309
|
+
class ResetResponse:
|
|
2310
|
+
|
|
2311
|
+
def as_dict(self) -> dict:
|
|
2312
|
+
"""Serializes the ResetResponse into a dictionary suitable for use as a JSON request body."""
|
|
2313
|
+
body = {}
|
|
2314
|
+
return body
|
|
2315
|
+
|
|
2316
|
+
@classmethod
|
|
2317
|
+
def from_dict(cls, d: Dict[str, any]) -> ResetResponse:
|
|
2318
|
+
"""Deserializes the ResetResponse from a dictionary."""
|
|
2319
|
+
return cls()
|
|
2320
|
+
|
|
2321
|
+
|
|
2251
2322
|
@dataclass
|
|
2252
2323
|
class ResolvedConditionTaskValues:
|
|
2253
2324
|
left: Optional[str] = None
|
|
@@ -4576,6 +4647,20 @@ class UpdateJob:
|
|
|
4576
4647
|
new_settings=_from_dict(d, 'new_settings', JobSettings))
|
|
4577
4648
|
|
|
4578
4649
|
|
|
4650
|
+
@dataclass
|
|
4651
|
+
class UpdateResponse:
|
|
4652
|
+
|
|
4653
|
+
def as_dict(self) -> dict:
|
|
4654
|
+
"""Serializes the UpdateResponse into a dictionary suitable for use as a JSON request body."""
|
|
4655
|
+
body = {}
|
|
4656
|
+
return body
|
|
4657
|
+
|
|
4658
|
+
@classmethod
|
|
4659
|
+
def from_dict(cls, d: Dict[str, any]) -> UpdateResponse:
|
|
4660
|
+
"""Deserializes the UpdateResponse from a dictionary."""
|
|
4661
|
+
return cls()
|
|
4662
|
+
|
|
4663
|
+
|
|
4579
4664
|
@dataclass
|
|
4580
4665
|
class ViewItem:
|
|
4581
4666
|
content: Optional[str] = None
|
|
@@ -4783,8 +4868,10 @@ class JobsAPI:
|
|
|
4783
4868
|
if run_id is not None: body['run_id'] = run_id
|
|
4784
4869
|
headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
|
|
4785
4870
|
|
|
4786
|
-
self._api.do('POST', '/api/2.1/jobs/runs/cancel', body=body, headers=headers)
|
|
4787
|
-
return Wait(self.wait_get_run_job_terminated_or_skipped,
|
|
4871
|
+
op_response = self._api.do('POST', '/api/2.1/jobs/runs/cancel', body=body, headers=headers)
|
|
4872
|
+
return Wait(self.wait_get_run_job_terminated_or_skipped,
|
|
4873
|
+
response=CancelRunResponse.from_dict(op_response),
|
|
4874
|
+
run_id=run_id)
|
|
4788
4875
|
|
|
4789
4876
|
def cancel_run_and_wait(self, run_id: int, timeout=timedelta(minutes=20)) -> Run:
|
|
4790
4877
|
return self.cancel_run(run_id=run_id).result(timeout=timeout)
|