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.

Files changed (33) hide show
  1. databricks/sdk/__init__.py +21 -6
  2. databricks/sdk/_widgets/__init__.py +2 -2
  3. databricks/sdk/config.py +3 -2
  4. databricks/sdk/oauth.py +1 -1
  5. databricks/sdk/runtime/__init__.py +85 -11
  6. databricks/sdk/runtime/dbutils_stub.py +1 -1
  7. databricks/sdk/service/_internal.py +1 -1
  8. databricks/sdk/service/billing.py +42 -0
  9. databricks/sdk/service/catalog.py +245 -44
  10. databricks/sdk/service/compute.py +334 -13
  11. databricks/sdk/service/dashboards.py +14 -0
  12. databricks/sdk/service/files.py +154 -12
  13. databricks/sdk/service/iam.py +161 -0
  14. databricks/sdk/service/jobs.py +95 -8
  15. databricks/sdk/service/ml.py +350 -0
  16. databricks/sdk/service/oauth2.py +70 -0
  17. databricks/sdk/service/pipelines.py +66 -8
  18. databricks/sdk/service/provisioning.py +78 -36
  19. databricks/sdk/service/serving.py +28 -0
  20. databricks/sdk/service/settings.py +1292 -203
  21. databricks/sdk/service/sharing.py +56 -0
  22. databricks/sdk/service/sql.py +138 -11
  23. databricks/sdk/service/vectorsearch.py +95 -60
  24. databricks/sdk/service/workspace.py +141 -1
  25. databricks/sdk/version.py +1 -1
  26. {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/METADATA +3 -1
  27. databricks_sdk-0.21.0.dist-info/RECORD +53 -0
  28. databricks/sdk/runtime/stub.py +0 -48
  29. databricks_sdk-0.20.0.dist-info/RECORD +0 -54
  30. {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/LICENSE +0 -0
  31. {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/NOTICE +0 -0
  32. {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/WHEEL +0 -0
  33. {databricks_sdk-0.20.0.dist-info → databricks_sdk-0.21.0.dist-info}/top_level.txt +0 -0
@@ -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 directories. We support Unity Catalog
620
- volumes with paths starting with "/Volumes/<catalog>/<schema>/<volume>".
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 Files API is designed like a standard HTTP API, rather than as a JSON RPC API. This is intended to
623
- make it easier and more efficient to work with file contents as raw bytes.
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/&lt;catalog_name&gt;/&lt;schema_name&gt;/&lt;volume_name&gt;/&lt;path_to_file&gt;.
624
766
 
625
- Because the Files API is a standard HTTP API, the URI path is used to specify the file or directory to
626
- operate on. The path is always absolute.
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
- The Files API has separate endpoints for working with files, `/fs/files`, and working with directories,
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.
@@ -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.
@@ -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, run_id=run_id)
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)