databricks-sdk 0.19.1__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 (35) hide show
  1. databricks/sdk/__init__.py +28 -6
  2. databricks/sdk/_widgets/__init__.py +2 -2
  3. databricks/sdk/config.py +3 -2
  4. databricks/sdk/core.py +4 -2
  5. databricks/sdk/mixins/workspace.py +2 -1
  6. databricks/sdk/oauth.py +1 -1
  7. databricks/sdk/runtime/__init__.py +85 -11
  8. databricks/sdk/runtime/dbutils_stub.py +1 -1
  9. databricks/sdk/service/_internal.py +1 -1
  10. databricks/sdk/service/billing.py +64 -1
  11. databricks/sdk/service/catalog.py +796 -84
  12. databricks/sdk/service/compute.py +391 -13
  13. databricks/sdk/service/dashboards.py +15 -0
  14. databricks/sdk/service/files.py +289 -15
  15. databricks/sdk/service/iam.py +214 -0
  16. databricks/sdk/service/jobs.py +242 -143
  17. databricks/sdk/service/ml.py +407 -0
  18. databricks/sdk/service/oauth2.py +83 -0
  19. databricks/sdk/service/pipelines.py +78 -8
  20. databricks/sdk/service/provisioning.py +108 -36
  21. databricks/sdk/service/serving.py +101 -35
  22. databricks/sdk/service/settings.py +1316 -186
  23. databricks/sdk/service/sharing.py +94 -18
  24. databricks/sdk/service/sql.py +230 -13
  25. databricks/sdk/service/vectorsearch.py +105 -60
  26. databricks/sdk/service/workspace.py +175 -1
  27. databricks/sdk/version.py +1 -1
  28. {databricks_sdk-0.19.1.dist-info → databricks_sdk-0.21.0.dist-info}/METADATA +3 -1
  29. databricks_sdk-0.21.0.dist-info/RECORD +53 -0
  30. databricks/sdk/runtime/stub.py +0 -48
  31. databricks_sdk-0.19.1.dist-info/RECORD +0 -54
  32. {databricks_sdk-0.19.1.dist-info → databricks_sdk-0.21.0.dist-info}/LICENSE +0 -0
  33. {databricks_sdk-0.19.1.dist-info → databricks_sdk-0.21.0.dist-info}/NOTICE +0 -0
  34. {databricks_sdk-0.19.1.dist-info → databricks_sdk-0.21.0.dist-info}/WHEEL +0 -0
  35. {databricks_sdk-0.19.1.dist-info → databricks_sdk-0.21.0.dist-info}/top_level.txt +0 -0
@@ -64,6 +64,20 @@ class AddInstanceProfile:
64
64
  skip_validation=d.get('skip_validation', None))
65
65
 
66
66
 
67
+ @dataclass
68
+ class AddResponse:
69
+
70
+ def as_dict(self) -> dict:
71
+ """Serializes the AddResponse into a dictionary suitable for use as a JSON request body."""
72
+ body = {}
73
+ return body
74
+
75
+ @classmethod
76
+ def from_dict(cls, d: Dict[str, any]) -> AddResponse:
77
+ """Deserializes the AddResponse from a dictionary."""
78
+ return cls()
79
+
80
+
67
81
  @dataclass
68
82
  class Adlsgen2Info:
69
83
  destination: str
@@ -130,7 +144,8 @@ class AwsAttributes:
130
144
  will be overridden."""
131
145
 
132
146
  ebs_volume_iops: Optional[int] = None
133
- """<needs content added>"""
147
+ """If using gp3 volumes, what IOPS to use for the disk. If this is not set, the maximum performance
148
+ of a gp2 volume with the same volume size will be used."""
134
149
 
135
150
  ebs_volume_size: Optional[int] = None
136
151
  """The size of each EBS volume (in GiB) launched for each instance. For general purpose SSD, this
@@ -138,7 +153,8 @@ class AwsAttributes:
138
153
  within the range 500 - 4096."""
139
154
 
140
155
  ebs_volume_throughput: Optional[int] = None
141
- """<needs content added>"""
156
+ """If using gp3 volumes, what throughput to use for the disk. If this is not set, the maximum
157
+ performance of a gp2 volume with the same volume size will be used."""
142
158
 
143
159
  ebs_volume_type: Optional[EbsVolumeType] = None
144
160
  """The type of EBS volumes that will be launched with this cluster."""
@@ -302,6 +318,20 @@ class CancelCommand:
302
318
  context_id=d.get('contextId', None))
303
319
 
304
320
 
321
+ @dataclass
322
+ class CancelResponse:
323
+
324
+ def as_dict(self) -> dict:
325
+ """Serializes the CancelResponse into a dictionary suitable for use as a JSON request body."""
326
+ body = {}
327
+ return body
328
+
329
+ @classmethod
330
+ def from_dict(cls, d: Dict[str, any]) -> CancelResponse:
331
+ """Deserializes the CancelResponse from a dictionary."""
332
+ return cls()
333
+
334
+
305
335
  @dataclass
306
336
  class ChangeClusterOwner:
307
337
  cluster_id: str
@@ -323,6 +353,20 @@ class ChangeClusterOwner:
323
353
  return cls(cluster_id=d.get('cluster_id', None), owner_username=d.get('owner_username', None))
324
354
 
325
355
 
356
+ @dataclass
357
+ class ChangeClusterOwnerResponse:
358
+
359
+ def as_dict(self) -> dict:
360
+ """Serializes the ChangeClusterOwnerResponse into a dictionary suitable for use as a JSON request body."""
361
+ body = {}
362
+ return body
363
+
364
+ @classmethod
365
+ def from_dict(cls, d: Dict[str, any]) -> ChangeClusterOwnerResponse:
366
+ """Deserializes the ChangeClusterOwnerResponse from a dictionary."""
367
+ return cls()
368
+
369
+
326
370
  @dataclass
327
371
  class ClientsTypes:
328
372
  jobs: Optional[bool] = None
@@ -2263,6 +2307,20 @@ class DeleteCluster:
2263
2307
  return cls(cluster_id=d.get('cluster_id', None))
2264
2308
 
2265
2309
 
2310
+ @dataclass
2311
+ class DeleteClusterResponse:
2312
+
2313
+ def as_dict(self) -> dict:
2314
+ """Serializes the DeleteClusterResponse into a dictionary suitable for use as a JSON request body."""
2315
+ body = {}
2316
+ return body
2317
+
2318
+ @classmethod
2319
+ def from_dict(cls, d: Dict[str, any]) -> DeleteClusterResponse:
2320
+ """Deserializes the DeleteClusterResponse from a dictionary."""
2321
+ return cls()
2322
+
2323
+
2266
2324
  @dataclass
2267
2325
  class DeleteInstancePool:
2268
2326
  instance_pool_id: str
@@ -2280,6 +2338,20 @@ class DeleteInstancePool:
2280
2338
  return cls(instance_pool_id=d.get('instance_pool_id', None))
2281
2339
 
2282
2340
 
2341
+ @dataclass
2342
+ class DeleteInstancePoolResponse:
2343
+
2344
+ def as_dict(self) -> dict:
2345
+ """Serializes the DeleteInstancePoolResponse into a dictionary suitable for use as a JSON request body."""
2346
+ body = {}
2347
+ return body
2348
+
2349
+ @classmethod
2350
+ def from_dict(cls, d: Dict[str, any]) -> DeleteInstancePoolResponse:
2351
+ """Deserializes the DeleteInstancePoolResponse from a dictionary."""
2352
+ return cls()
2353
+
2354
+
2283
2355
  @dataclass
2284
2356
  class DeletePolicy:
2285
2357
  policy_id: str
@@ -2297,6 +2369,34 @@ class DeletePolicy:
2297
2369
  return cls(policy_id=d.get('policy_id', None))
2298
2370
 
2299
2371
 
2372
+ @dataclass
2373
+ class DeletePolicyResponse:
2374
+
2375
+ def as_dict(self) -> dict:
2376
+ """Serializes the DeletePolicyResponse into a dictionary suitable for use as a JSON request body."""
2377
+ body = {}
2378
+ return body
2379
+
2380
+ @classmethod
2381
+ def from_dict(cls, d: Dict[str, any]) -> DeletePolicyResponse:
2382
+ """Deserializes the DeletePolicyResponse from a dictionary."""
2383
+ return cls()
2384
+
2385
+
2386
+ @dataclass
2387
+ class DeleteResponse:
2388
+
2389
+ def as_dict(self) -> dict:
2390
+ """Serializes the DeleteResponse into a dictionary suitable for use as a JSON request body."""
2391
+ body = {}
2392
+ return body
2393
+
2394
+ @classmethod
2395
+ def from_dict(cls, d: Dict[str, any]) -> DeleteResponse:
2396
+ """Deserializes the DeleteResponse from a dictionary."""
2397
+ return cls()
2398
+
2399
+
2300
2400
  @dataclass
2301
2401
  class DestroyContext:
2302
2402
  cluster_id: str
@@ -2316,6 +2416,20 @@ class DestroyContext:
2316
2416
  return cls(cluster_id=d.get('clusterId', None), context_id=d.get('contextId', None))
2317
2417
 
2318
2418
 
2419
+ @dataclass
2420
+ class DestroyResponse:
2421
+
2422
+ def as_dict(self) -> dict:
2423
+ """Serializes the DestroyResponse into a dictionary suitable for use as a JSON request body."""
2424
+ body = {}
2425
+ return body
2426
+
2427
+ @classmethod
2428
+ def from_dict(cls, d: Dict[str, any]) -> DestroyResponse:
2429
+ """Deserializes the DestroyResponse from a dictionary."""
2430
+ return cls()
2431
+
2432
+
2319
2433
  @dataclass
2320
2434
  class DiskSpec:
2321
2435
  disk_count: Optional[int] = None
@@ -2670,6 +2784,20 @@ class EditCluster:
2670
2784
  workload_type=_from_dict(d, 'workload_type', WorkloadType))
2671
2785
 
2672
2786
 
2787
+ @dataclass
2788
+ class EditClusterResponse:
2789
+
2790
+ def as_dict(self) -> dict:
2791
+ """Serializes the EditClusterResponse into a dictionary suitable for use as a JSON request body."""
2792
+ body = {}
2793
+ return body
2794
+
2795
+ @classmethod
2796
+ def from_dict(cls, d: Dict[str, any]) -> EditClusterResponse:
2797
+ """Deserializes the EditClusterResponse from a dictionary."""
2798
+ return cls()
2799
+
2800
+
2673
2801
  @dataclass
2674
2802
  class EditInstancePool:
2675
2803
  instance_pool_id: str
@@ -2731,6 +2859,20 @@ class EditInstancePool:
2731
2859
  node_type_id=d.get('node_type_id', None))
2732
2860
 
2733
2861
 
2862
+ @dataclass
2863
+ class EditInstancePoolResponse:
2864
+
2865
+ def as_dict(self) -> dict:
2866
+ """Serializes the EditInstancePoolResponse into a dictionary suitable for use as a JSON request body."""
2867
+ body = {}
2868
+ return body
2869
+
2870
+ @classmethod
2871
+ def from_dict(cls, d: Dict[str, any]) -> EditInstancePoolResponse:
2872
+ """Deserializes the EditInstancePoolResponse from a dictionary."""
2873
+ return cls()
2874
+
2875
+
2734
2876
  @dataclass
2735
2877
  class EditPolicy:
2736
2878
  policy_id: str
@@ -2799,6 +2941,34 @@ class EditPolicy:
2799
2941
  policy_id=d.get('policy_id', None))
2800
2942
 
2801
2943
 
2944
+ @dataclass
2945
+ class EditPolicyResponse:
2946
+
2947
+ def as_dict(self) -> dict:
2948
+ """Serializes the EditPolicyResponse into a dictionary suitable for use as a JSON request body."""
2949
+ body = {}
2950
+ return body
2951
+
2952
+ @classmethod
2953
+ def from_dict(cls, d: Dict[str, any]) -> EditPolicyResponse:
2954
+ """Deserializes the EditPolicyResponse from a dictionary."""
2955
+ return cls()
2956
+
2957
+
2958
+ @dataclass
2959
+ class EditResponse:
2960
+
2961
+ def as_dict(self) -> dict:
2962
+ """Serializes the EditResponse into a dictionary suitable for use as a JSON request body."""
2963
+ body = {}
2964
+ return body
2965
+
2966
+ @classmethod
2967
+ def from_dict(cls, d: Dict[str, any]) -> EditResponse:
2968
+ """Deserializes the EditResponse from a dictionary."""
2969
+ return cls()
2970
+
2971
+
2802
2972
  @dataclass
2803
2973
  class EventDetails:
2804
2974
  attributes: Optional[ClusterAttributes] = None
@@ -3686,6 +3856,20 @@ class InstallLibraries:
3686
3856
  return cls(cluster_id=d.get('cluster_id', None), libraries=_repeated_dict(d, 'libraries', Library))
3687
3857
 
3688
3858
 
3859
+ @dataclass
3860
+ class InstallLibrariesResponse:
3861
+
3862
+ def as_dict(self) -> dict:
3863
+ """Serializes the InstallLibrariesResponse into a dictionary suitable for use as a JSON request body."""
3864
+ body = {}
3865
+ return body
3866
+
3867
+ @classmethod
3868
+ def from_dict(cls, d: Dict[str, any]) -> InstallLibrariesResponse:
3869
+ """Deserializes the InstallLibrariesResponse from a dictionary."""
3870
+ return cls()
3871
+
3872
+
3689
3873
  @dataclass
3690
3874
  class InstancePoolAccessControlRequest:
3691
3875
  group_name: Optional[str] = None
@@ -4763,6 +4947,20 @@ class PermanentDeleteCluster:
4763
4947
  return cls(cluster_id=d.get('cluster_id', None))
4764
4948
 
4765
4949
 
4950
+ @dataclass
4951
+ class PermanentDeleteClusterResponse:
4952
+
4953
+ def as_dict(self) -> dict:
4954
+ """Serializes the PermanentDeleteClusterResponse into a dictionary suitable for use as a JSON request body."""
4955
+ body = {}
4956
+ return body
4957
+
4958
+ @classmethod
4959
+ def from_dict(cls, d: Dict[str, any]) -> PermanentDeleteClusterResponse:
4960
+ """Deserializes the PermanentDeleteClusterResponse from a dictionary."""
4961
+ return cls()
4962
+
4963
+
4766
4964
  @dataclass
4767
4965
  class PinCluster:
4768
4966
  cluster_id: str
@@ -4780,6 +4978,20 @@ class PinCluster:
4780
4978
  return cls(cluster_id=d.get('cluster_id', None))
4781
4979
 
4782
4980
 
4981
+ @dataclass
4982
+ class PinClusterResponse:
4983
+
4984
+ def as_dict(self) -> dict:
4985
+ """Serializes the PinClusterResponse into a dictionary suitable for use as a JSON request body."""
4986
+ body = {}
4987
+ return body
4988
+
4989
+ @classmethod
4990
+ def from_dict(cls, d: Dict[str, any]) -> PinClusterResponse:
4991
+ """Deserializes the PinClusterResponse from a dictionary."""
4992
+ return cls()
4993
+
4994
+
4783
4995
  @dataclass
4784
4996
  class Policy:
4785
4997
  created_at_timestamp: Optional[int] = None
@@ -4955,6 +5167,20 @@ class RemoveInstanceProfile:
4955
5167
  return cls(instance_profile_arn=d.get('instance_profile_arn', None))
4956
5168
 
4957
5169
 
5170
+ @dataclass
5171
+ class RemoveResponse:
5172
+
5173
+ def as_dict(self) -> dict:
5174
+ """Serializes the RemoveResponse into a dictionary suitable for use as a JSON request body."""
5175
+ body = {}
5176
+ return body
5177
+
5178
+ @classmethod
5179
+ def from_dict(cls, d: Dict[str, any]) -> RemoveResponse:
5180
+ """Deserializes the RemoveResponse from a dictionary."""
5181
+ return cls()
5182
+
5183
+
4958
5184
  @dataclass
4959
5185
  class ResizeCluster:
4960
5186
  cluster_id: str
@@ -4990,6 +5216,20 @@ class ResizeCluster:
4990
5216
  num_workers=d.get('num_workers', None))
4991
5217
 
4992
5218
 
5219
+ @dataclass
5220
+ class ResizeClusterResponse:
5221
+
5222
+ def as_dict(self) -> dict:
5223
+ """Serializes the ResizeClusterResponse into a dictionary suitable for use as a JSON request body."""
5224
+ body = {}
5225
+ return body
5226
+
5227
+ @classmethod
5228
+ def from_dict(cls, d: Dict[str, any]) -> ResizeClusterResponse:
5229
+ """Deserializes the ResizeClusterResponse from a dictionary."""
5230
+ return cls()
5231
+
5232
+
4993
5233
  @dataclass
4994
5234
  class RestartCluster:
4995
5235
  cluster_id: str
@@ -5011,6 +5251,20 @@ class RestartCluster:
5011
5251
  return cls(cluster_id=d.get('cluster_id', None), restart_user=d.get('restart_user', None))
5012
5252
 
5013
5253
 
5254
+ @dataclass
5255
+ class RestartClusterResponse:
5256
+
5257
+ def as_dict(self) -> dict:
5258
+ """Serializes the RestartClusterResponse into a dictionary suitable for use as a JSON request body."""
5259
+ body = {}
5260
+ return body
5261
+
5262
+ @classmethod
5263
+ def from_dict(cls, d: Dict[str, any]) -> RestartClusterResponse:
5264
+ """Deserializes the RestartClusterResponse from a dictionary."""
5265
+ return cls()
5266
+
5267
+
5014
5268
  class ResultType(Enum):
5015
5269
 
5016
5270
  ERROR = 'error'
@@ -5261,6 +5515,20 @@ class StartCluster:
5261
5515
  return cls(cluster_id=d.get('cluster_id', None))
5262
5516
 
5263
5517
 
5518
+ @dataclass
5519
+ class StartClusterResponse:
5520
+
5521
+ def as_dict(self) -> dict:
5522
+ """Serializes the StartClusterResponse into a dictionary suitable for use as a JSON request body."""
5523
+ body = {}
5524
+ return body
5525
+
5526
+ @classmethod
5527
+ def from_dict(cls, d: Dict[str, any]) -> StartClusterResponse:
5528
+ """Deserializes the StartClusterResponse from a dictionary."""
5529
+ return cls()
5530
+
5531
+
5264
5532
  class State(Enum):
5265
5533
  """Current state of the cluster."""
5266
5534
 
@@ -5415,6 +5683,20 @@ class UninstallLibraries:
5415
5683
  return cls(cluster_id=d.get('cluster_id', None), libraries=_repeated_dict(d, 'libraries', Library))
5416
5684
 
5417
5685
 
5686
+ @dataclass
5687
+ class UninstallLibrariesResponse:
5688
+
5689
+ def as_dict(self) -> dict:
5690
+ """Serializes the UninstallLibrariesResponse into a dictionary suitable for use as a JSON request body."""
5691
+ body = {}
5692
+ return body
5693
+
5694
+ @classmethod
5695
+ def from_dict(cls, d: Dict[str, any]) -> UninstallLibrariesResponse:
5696
+ """Deserializes the UninstallLibrariesResponse from a dictionary."""
5697
+ return cls()
5698
+
5699
+
5418
5700
  @dataclass
5419
5701
  class UnpinCluster:
5420
5702
  cluster_id: str
@@ -5432,6 +5714,34 @@ class UnpinCluster:
5432
5714
  return cls(cluster_id=d.get('cluster_id', None))
5433
5715
 
5434
5716
 
5717
+ @dataclass
5718
+ class UnpinClusterResponse:
5719
+
5720
+ def as_dict(self) -> dict:
5721
+ """Serializes the UnpinClusterResponse into a dictionary suitable for use as a JSON request body."""
5722
+ body = {}
5723
+ return body
5724
+
5725
+ @classmethod
5726
+ def from_dict(cls, d: Dict[str, any]) -> UnpinClusterResponse:
5727
+ """Deserializes the UnpinClusterResponse from a dictionary."""
5728
+ return cls()
5729
+
5730
+
5731
+ @dataclass
5732
+ class UpdateResponse:
5733
+
5734
+ def as_dict(self) -> dict:
5735
+ """Serializes the UpdateResponse into a dictionary suitable for use as a JSON request body."""
5736
+ body = {}
5737
+ return body
5738
+
5739
+ @classmethod
5740
+ def from_dict(cls, d: Dict[str, any]) -> UpdateResponse:
5741
+ """Deserializes the UpdateResponse from a dictionary."""
5742
+ return cls()
5743
+
5744
+
5435
5745
  @dataclass
5436
5746
  class VolumesStorageInfo:
5437
5747
  destination: str
@@ -5560,6 +5870,7 @@ class ClusterPoliciesAPI:
5560
5870
  body['policy_family_definition_overrides'] = policy_family_definition_overrides
5561
5871
  if policy_family_id is not None: body['policy_family_id'] = policy_family_id
5562
5872
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
5873
+
5563
5874
  res = self._api.do('POST', '/api/2.0/policies/clusters/create', body=body, headers=headers)
5564
5875
  return CreatePolicyResponse.from_dict(res)
5565
5876
 
@@ -5576,6 +5887,7 @@ class ClusterPoliciesAPI:
5576
5887
  body = {}
5577
5888
  if policy_id is not None: body['policy_id'] = policy_id
5578
5889
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
5890
+
5579
5891
  self._api.do('POST', '/api/2.0/policies/clusters/delete', body=body, headers=headers)
5580
5892
 
5581
5893
  def edit(self,
@@ -5638,6 +5950,7 @@ class ClusterPoliciesAPI:
5638
5950
  if policy_family_id is not None: body['policy_family_id'] = policy_family_id
5639
5951
  if policy_id is not None: body['policy_id'] = policy_id
5640
5952
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
5953
+
5641
5954
  self._api.do('POST', '/api/2.0/policies/clusters/edit', body=body, headers=headers)
5642
5955
 
5643
5956
  def get(self, policy_id: str) -> Policy:
@@ -5654,6 +5967,7 @@ class ClusterPoliciesAPI:
5654
5967
  query = {}
5655
5968
  if policy_id is not None: query['policy_id'] = policy_id
5656
5969
  headers = {'Accept': 'application/json', }
5970
+
5657
5971
  res = self._api.do('GET', '/api/2.0/policies/clusters/get', query=query, headers=headers)
5658
5972
  return Policy.from_dict(res)
5659
5973
 
@@ -5669,6 +5983,7 @@ class ClusterPoliciesAPI:
5669
5983
  """
5670
5984
 
5671
5985
  headers = {'Accept': 'application/json', }
5986
+
5672
5987
  res = self._api.do('GET',
5673
5988
  f'/api/2.0/permissions/cluster-policies/{cluster_policy_id}/permissionLevels',
5674
5989
  headers=headers)
@@ -5687,6 +6002,7 @@ class ClusterPoliciesAPI:
5687
6002
  """
5688
6003
 
5689
6004
  headers = {'Accept': 'application/json', }
6005
+
5690
6006
  res = self._api.do('GET',
5691
6007
  f'/api/2.0/permissions/cluster-policies/{cluster_policy_id}',
5692
6008
  headers=headers)
@@ -5714,6 +6030,7 @@ class ClusterPoliciesAPI:
5714
6030
  if sort_column is not None: query['sort_column'] = sort_column.value
5715
6031
  if sort_order is not None: query['sort_order'] = sort_order.value
5716
6032
  headers = {'Accept': 'application/json', }
6033
+
5717
6034
  json = self._api.do('GET', '/api/2.0/policies/clusters/list', query=query, headers=headers)
5718
6035
  parsed = ListPoliciesResponse.from_dict(json).policies
5719
6036
  return parsed if parsed is not None else []
@@ -5738,6 +6055,7 @@ class ClusterPoliciesAPI:
5738
6055
  if access_control_list is not None:
5739
6056
  body['access_control_list'] = [v.as_dict() for v in access_control_list]
5740
6057
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6058
+
5741
6059
  res = self._api.do('PUT',
5742
6060
  f'/api/2.0/permissions/cluster-policies/{cluster_policy_id}',
5743
6061
  body=body,
@@ -5765,6 +6083,7 @@ class ClusterPoliciesAPI:
5765
6083
  if access_control_list is not None:
5766
6084
  body['access_control_list'] = [v.as_dict() for v in access_control_list]
5767
6085
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6086
+
5768
6087
  res = self._api.do('PATCH',
5769
6088
  f'/api/2.0/permissions/cluster-policies/{cluster_policy_id}',
5770
6089
  body=body,
@@ -5878,6 +6197,7 @@ class ClustersAPI:
5878
6197
  if cluster_id is not None: body['cluster_id'] = cluster_id
5879
6198
  if owner_username is not None: body['owner_username'] = owner_username
5880
6199
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6200
+
5881
6201
  self._api.do('POST', '/api/2.0/clusters/change-owner', body=body, headers=headers)
5882
6202
 
5883
6203
  def create(self,
@@ -6069,6 +6389,7 @@ class ClustersAPI:
6069
6389
  if ssh_public_keys is not None: body['ssh_public_keys'] = [v for v in ssh_public_keys]
6070
6390
  if workload_type is not None: body['workload_type'] = workload_type.as_dict()
6071
6391
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6392
+
6072
6393
  op_response = self._api.do('POST', '/api/2.0/clusters/create', body=body, headers=headers)
6073
6394
  return Wait(self.wait_get_cluster_running,
6074
6395
  response=CreateClusterResponse.from_dict(op_response),
@@ -6152,8 +6473,11 @@ class ClustersAPI:
6152
6473
  body = {}
6153
6474
  if cluster_id is not None: body['cluster_id'] = cluster_id
6154
6475
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6155
- self._api.do('POST', '/api/2.0/clusters/delete', body=body, headers=headers)
6156
- return Wait(self.wait_get_cluster_terminated, cluster_id=cluster_id)
6476
+
6477
+ op_response = self._api.do('POST', '/api/2.0/clusters/delete', body=body, headers=headers)
6478
+ return Wait(self.wait_get_cluster_terminated,
6479
+ response=DeleteClusterResponse.from_dict(op_response),
6480
+ cluster_id=cluster_id)
6157
6481
 
6158
6482
  def delete_and_wait(self, cluster_id: str, timeout=timedelta(minutes=20)) -> ClusterDetails:
6159
6483
  return self.delete(cluster_id=cluster_id).result(timeout=timeout)
@@ -6356,8 +6680,11 @@ class ClustersAPI:
6356
6680
  if ssh_public_keys is not None: body['ssh_public_keys'] = [v for v in ssh_public_keys]
6357
6681
  if workload_type is not None: body['workload_type'] = workload_type.as_dict()
6358
6682
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6359
- self._api.do('POST', '/api/2.0/clusters/edit', body=body, headers=headers)
6360
- return Wait(self.wait_get_cluster_running, cluster_id=cluster_id)
6683
+
6684
+ op_response = self._api.do('POST', '/api/2.0/clusters/edit', body=body, headers=headers)
6685
+ return Wait(self.wait_get_cluster_running,
6686
+ response=EditClusterResponse.from_dict(op_response),
6687
+ cluster_id=cluster_id)
6361
6688
 
6362
6689
  def edit_and_wait(
6363
6690
  self,
@@ -6490,6 +6817,7 @@ class ClustersAPI:
6490
6817
  query = {}
6491
6818
  if cluster_id is not None: query['cluster_id'] = cluster_id
6492
6819
  headers = {'Accept': 'application/json', }
6820
+
6493
6821
  res = self._api.do('GET', '/api/2.0/clusters/get', query=query, headers=headers)
6494
6822
  return ClusterDetails.from_dict(res)
6495
6823
 
@@ -6505,6 +6833,7 @@ class ClustersAPI:
6505
6833
  """
6506
6834
 
6507
6835
  headers = {'Accept': 'application/json', }
6836
+
6508
6837
  res = self._api.do('GET',
6509
6838
  f'/api/2.0/permissions/clusters/{cluster_id}/permissionLevels',
6510
6839
  headers=headers)
@@ -6522,6 +6851,7 @@ class ClustersAPI:
6522
6851
  """
6523
6852
 
6524
6853
  headers = {'Accept': 'application/json', }
6854
+
6525
6855
  res = self._api.do('GET', f'/api/2.0/permissions/clusters/{cluster_id}', headers=headers)
6526
6856
  return ClusterPermissions.from_dict(res)
6527
6857
 
@@ -6548,6 +6878,7 @@ class ClustersAPI:
6548
6878
  query = {}
6549
6879
  if can_use_client is not None: query['can_use_client'] = can_use_client
6550
6880
  headers = {'Accept': 'application/json', }
6881
+
6551
6882
  json = self._api.do('GET', '/api/2.0/clusters/list', query=query, headers=headers)
6552
6883
  parsed = ListClustersResponse.from_dict(json).clusters
6553
6884
  return parsed if parsed is not None else []
@@ -6561,6 +6892,7 @@ class ClustersAPI:
6561
6892
  """
6562
6893
 
6563
6894
  headers = {'Accept': 'application/json', }
6895
+
6564
6896
  res = self._api.do('GET', '/api/2.0/clusters/list-node-types', headers=headers)
6565
6897
  return ListNodeTypesResponse.from_dict(res)
6566
6898
 
@@ -6574,6 +6906,7 @@ class ClustersAPI:
6574
6906
  """
6575
6907
 
6576
6908
  headers = {'Accept': 'application/json', }
6909
+
6577
6910
  res = self._api.do('GET', '/api/2.0/clusters/list-zones', headers=headers)
6578
6911
  return ListAvailableZonesResponse.from_dict(res)
6579
6912
 
@@ -6594,6 +6927,7 @@ class ClustersAPI:
6594
6927
  body = {}
6595
6928
  if cluster_id is not None: body['cluster_id'] = cluster_id
6596
6929
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6930
+
6597
6931
  self._api.do('POST', '/api/2.0/clusters/permanent-delete', body=body, headers=headers)
6598
6932
 
6599
6933
  def pin(self, cluster_id: str):
@@ -6610,6 +6944,7 @@ class ClustersAPI:
6610
6944
  body = {}
6611
6945
  if cluster_id is not None: body['cluster_id'] = cluster_id
6612
6946
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6947
+
6613
6948
  self._api.do('POST', '/api/2.0/clusters/pin', body=body, headers=headers)
6614
6949
 
6615
6950
  def resize(self,
@@ -6646,8 +6981,11 @@ class ClustersAPI:
6646
6981
  if cluster_id is not None: body['cluster_id'] = cluster_id
6647
6982
  if num_workers is not None: body['num_workers'] = num_workers
6648
6983
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6649
- self._api.do('POST', '/api/2.0/clusters/resize', body=body, headers=headers)
6650
- return Wait(self.wait_get_cluster_running, cluster_id=cluster_id)
6984
+
6985
+ op_response = self._api.do('POST', '/api/2.0/clusters/resize', body=body, headers=headers)
6986
+ return Wait(self.wait_get_cluster_running,
6987
+ response=ResizeClusterResponse.from_dict(op_response),
6988
+ cluster_id=cluster_id)
6651
6989
 
6652
6990
  def resize_and_wait(self,
6653
6991
  cluster_id: str,
@@ -6677,8 +7015,11 @@ class ClustersAPI:
6677
7015
  if cluster_id is not None: body['cluster_id'] = cluster_id
6678
7016
  if restart_user is not None: body['restart_user'] = restart_user
6679
7017
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6680
- self._api.do('POST', '/api/2.0/clusters/restart', body=body, headers=headers)
6681
- return Wait(self.wait_get_cluster_running, cluster_id=cluster_id)
7018
+
7019
+ op_response = self._api.do('POST', '/api/2.0/clusters/restart', body=body, headers=headers)
7020
+ return Wait(self.wait_get_cluster_running,
7021
+ response=RestartClusterResponse.from_dict(op_response),
7022
+ cluster_id=cluster_id)
6682
7023
 
6683
7024
  def restart_and_wait(self,
6684
7025
  cluster_id: str,
@@ -6706,6 +7047,7 @@ class ClustersAPI:
6706
7047
  if access_control_list is not None:
6707
7048
  body['access_control_list'] = [v.as_dict() for v in access_control_list]
6708
7049
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7050
+
6709
7051
  res = self._api.do('PUT', f'/api/2.0/permissions/clusters/{cluster_id}', body=body, headers=headers)
6710
7052
  return ClusterPermissions.from_dict(res)
6711
7053
 
@@ -6718,6 +7060,7 @@ class ClustersAPI:
6718
7060
  """
6719
7061
 
6720
7062
  headers = {'Accept': 'application/json', }
7063
+
6721
7064
  res = self._api.do('GET', '/api/2.0/clusters/spark-versions', headers=headers)
6722
7065
  return GetSparkVersionsResponse.from_dict(res)
6723
7066
 
@@ -6741,8 +7084,11 @@ class ClustersAPI:
6741
7084
  body = {}
6742
7085
  if cluster_id is not None: body['cluster_id'] = cluster_id
6743
7086
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6744
- self._api.do('POST', '/api/2.0/clusters/start', body=body, headers=headers)
6745
- return Wait(self.wait_get_cluster_running, cluster_id=cluster_id)
7087
+
7088
+ op_response = self._api.do('POST', '/api/2.0/clusters/start', body=body, headers=headers)
7089
+ return Wait(self.wait_get_cluster_running,
7090
+ response=StartClusterResponse.from_dict(op_response),
7091
+ cluster_id=cluster_id)
6746
7092
 
6747
7093
  def start_and_wait(self, cluster_id: str, timeout=timedelta(minutes=20)) -> ClusterDetails:
6748
7094
  return self.start(cluster_id=cluster_id).result(timeout=timeout)
@@ -6762,6 +7108,7 @@ class ClustersAPI:
6762
7108
  body = {}
6763
7109
  if cluster_id is not None: body['cluster_id'] = cluster_id
6764
7110
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7111
+
6765
7112
  self._api.do('POST', '/api/2.0/clusters/unpin', body=body, headers=headers)
6766
7113
 
6767
7114
  def update_permissions(
@@ -6783,6 +7130,7 @@ class ClustersAPI:
6783
7130
  if access_control_list is not None:
6784
7131
  body['access_control_list'] = [v.as_dict() for v in access_control_list]
6785
7132
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7133
+
6786
7134
  res = self._api.do('PATCH', f'/api/2.0/permissions/clusters/{cluster_id}', body=body, headers=headers)
6787
7135
  return ClusterPermissions.from_dict(res)
6788
7136
 
@@ -6917,8 +7265,10 @@ class CommandExecutionAPI:
6917
7265
  if command_id is not None: body['commandId'] = command_id
6918
7266
  if context_id is not None: body['contextId'] = context_id
6919
7267
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
6920
- self._api.do('POST', '/api/1.2/commands/cancel', body=body, headers=headers)
7268
+
7269
+ op_response = self._api.do('POST', '/api/1.2/commands/cancel', body=body, headers=headers)
6921
7270
  return Wait(self.wait_command_status_command_execution_cancelled,
7271
+ response=CancelResponse.from_dict(op_response),
6922
7272
  cluster_id=cluster_id,
6923
7273
  command_id=command_id,
6924
7274
  context_id=context_id)
@@ -6952,6 +7302,7 @@ class CommandExecutionAPI:
6952
7302
  if command_id is not None: query['commandId'] = command_id
6953
7303
  if context_id is not None: query['contextId'] = context_id
6954
7304
  headers = {'Accept': 'application/json', }
7305
+
6955
7306
  res = self._api.do('GET', '/api/1.2/commands/status', query=query, headers=headers)
6956
7307
  return CommandStatusResponse.from_dict(res)
6957
7308
 
@@ -6970,6 +7321,7 @@ class CommandExecutionAPI:
6970
7321
  if cluster_id is not None: query['clusterId'] = cluster_id
6971
7322
  if context_id is not None: query['contextId'] = context_id
6972
7323
  headers = {'Accept': 'application/json', }
7324
+
6973
7325
  res = self._api.do('GET', '/api/1.2/contexts/status', query=query, headers=headers)
6974
7326
  return ContextStatusResponse.from_dict(res)
6975
7327
 
@@ -6995,6 +7347,7 @@ class CommandExecutionAPI:
6995
7347
  if cluster_id is not None: body['clusterId'] = cluster_id
6996
7348
  if language is not None: body['language'] = language.value
6997
7349
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7350
+
6998
7351
  op_response = self._api.do('POST', '/api/1.2/contexts/create', body=body, headers=headers)
6999
7352
  return Wait(self.wait_context_status_command_execution_running,
7000
7353
  response=Created.from_dict(op_response),
@@ -7023,6 +7376,7 @@ class CommandExecutionAPI:
7023
7376
  if cluster_id is not None: body['clusterId'] = cluster_id
7024
7377
  if context_id is not None: body['contextId'] = context_id
7025
7378
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7379
+
7026
7380
  self._api.do('POST', '/api/1.2/contexts/destroy', body=body, headers=headers)
7027
7381
 
7028
7382
  def execute(self,
@@ -7055,6 +7409,7 @@ class CommandExecutionAPI:
7055
7409
  if context_id is not None: body['contextId'] = context_id
7056
7410
  if language is not None: body['language'] = language.value
7057
7411
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7412
+
7058
7413
  op_response = self._api.do('POST', '/api/1.2/commands/execute', body=body, headers=headers)
7059
7414
  return Wait(self.wait_command_status_command_execution_finished_or_error,
7060
7415
  response=Created.from_dict(op_response),
@@ -7121,6 +7476,7 @@ class GlobalInitScriptsAPI:
7121
7476
  if position is not None: body['position'] = position
7122
7477
  if script is not None: body['script'] = script
7123
7478
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7479
+
7124
7480
  res = self._api.do('POST', '/api/2.0/global-init-scripts', body=body, headers=headers)
7125
7481
  return CreateResponse.from_dict(res)
7126
7482
 
@@ -7136,6 +7492,7 @@ class GlobalInitScriptsAPI:
7136
7492
  """
7137
7493
 
7138
7494
  headers = {}
7495
+
7139
7496
  self._api.do('DELETE', f'/api/2.0/global-init-scripts/{script_id}', headers=headers)
7140
7497
 
7141
7498
  def get(self, script_id: str) -> GlobalInitScriptDetailsWithContent:
@@ -7150,6 +7507,7 @@ class GlobalInitScriptsAPI:
7150
7507
  """
7151
7508
 
7152
7509
  headers = {'Accept': 'application/json', }
7510
+
7153
7511
  res = self._api.do('GET', f'/api/2.0/global-init-scripts/{script_id}', headers=headers)
7154
7512
  return GlobalInitScriptDetailsWithContent.from_dict(res)
7155
7513
 
@@ -7164,6 +7522,7 @@ class GlobalInitScriptsAPI:
7164
7522
  """
7165
7523
 
7166
7524
  headers = {'Accept': 'application/json', }
7525
+
7167
7526
  json = self._api.do('GET', '/api/2.0/global-init-scripts', headers=headers)
7168
7527
  parsed = ListGlobalInitScriptsResponse.from_dict(json).scripts
7169
7528
  return parsed if parsed is not None else []
@@ -7207,6 +7566,7 @@ class GlobalInitScriptsAPI:
7207
7566
  if position is not None: body['position'] = position
7208
7567
  if script is not None: body['script'] = script
7209
7568
  headers = {'Content-Type': 'application/json', }
7569
+
7210
7570
  self._api.do('PATCH', f'/api/2.0/global-init-scripts/{script_id}', body=body, headers=headers)
7211
7571
 
7212
7572
 
@@ -7315,6 +7675,7 @@ class InstancePoolsAPI:
7315
7675
  if preloaded_spark_versions is not None:
7316
7676
  body['preloaded_spark_versions'] = [v for v in preloaded_spark_versions]
7317
7677
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7678
+
7318
7679
  res = self._api.do('POST', '/api/2.0/instance-pools/create', body=body, headers=headers)
7319
7680
  return CreateInstancePoolResponse.from_dict(res)
7320
7681
 
@@ -7331,6 +7692,7 @@ class InstancePoolsAPI:
7331
7692
  body = {}
7332
7693
  if instance_pool_id is not None: body['instance_pool_id'] = instance_pool_id
7333
7694
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7695
+
7334
7696
  self._api.do('POST', '/api/2.0/instance-pools/delete', body=body, headers=headers)
7335
7697
 
7336
7698
  def edit(self,
@@ -7386,6 +7748,7 @@ class InstancePoolsAPI:
7386
7748
  if min_idle_instances is not None: body['min_idle_instances'] = min_idle_instances
7387
7749
  if node_type_id is not None: body['node_type_id'] = node_type_id
7388
7750
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7751
+
7389
7752
  self._api.do('POST', '/api/2.0/instance-pools/edit', body=body, headers=headers)
7390
7753
 
7391
7754
  def get(self, instance_pool_id: str) -> GetInstancePool:
@@ -7402,6 +7765,7 @@ class InstancePoolsAPI:
7402
7765
  query = {}
7403
7766
  if instance_pool_id is not None: query['instance_pool_id'] = instance_pool_id
7404
7767
  headers = {'Accept': 'application/json', }
7768
+
7405
7769
  res = self._api.do('GET', '/api/2.0/instance-pools/get', query=query, headers=headers)
7406
7770
  return GetInstancePool.from_dict(res)
7407
7771
 
@@ -7417,6 +7781,7 @@ class InstancePoolsAPI:
7417
7781
  """
7418
7782
 
7419
7783
  headers = {'Accept': 'application/json', }
7784
+
7420
7785
  res = self._api.do('GET',
7421
7786
  f'/api/2.0/permissions/instance-pools/{instance_pool_id}/permissionLevels',
7422
7787
  headers=headers)
@@ -7435,6 +7800,7 @@ class InstancePoolsAPI:
7435
7800
  """
7436
7801
 
7437
7802
  headers = {'Accept': 'application/json', }
7803
+
7438
7804
  res = self._api.do('GET', f'/api/2.0/permissions/instance-pools/{instance_pool_id}', headers=headers)
7439
7805
  return InstancePoolPermissions.from_dict(res)
7440
7806
 
@@ -7447,6 +7813,7 @@ class InstancePoolsAPI:
7447
7813
  """
7448
7814
 
7449
7815
  headers = {'Accept': 'application/json', }
7816
+
7450
7817
  json = self._api.do('GET', '/api/2.0/instance-pools/list', headers=headers)
7451
7818
  parsed = ListInstancePools.from_dict(json).instance_pools
7452
7819
  return parsed if parsed is not None else []
@@ -7471,6 +7838,7 @@ class InstancePoolsAPI:
7471
7838
  if access_control_list is not None:
7472
7839
  body['access_control_list'] = [v.as_dict() for v in access_control_list]
7473
7840
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7841
+
7474
7842
  res = self._api.do('PUT',
7475
7843
  f'/api/2.0/permissions/instance-pools/{instance_pool_id}',
7476
7844
  body=body,
@@ -7498,6 +7866,7 @@ class InstancePoolsAPI:
7498
7866
  if access_control_list is not None:
7499
7867
  body['access_control_list'] = [v.as_dict() for v in access_control_list]
7500
7868
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7869
+
7501
7870
  res = self._api.do('PATCH',
7502
7871
  f'/api/2.0/permissions/instance-pools/{instance_pool_id}',
7503
7872
  body=body,
@@ -7556,6 +7925,7 @@ class InstanceProfilesAPI:
7556
7925
  if is_meta_instance_profile is not None: body['is_meta_instance_profile'] = is_meta_instance_profile
7557
7926
  if skip_validation is not None: body['skip_validation'] = skip_validation
7558
7927
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7928
+
7559
7929
  self._api.do('POST', '/api/2.0/instance-profiles/add', body=body, headers=headers)
7560
7930
 
7561
7931
  def edit(self,
@@ -7601,6 +7971,7 @@ class InstanceProfilesAPI:
7601
7971
  if instance_profile_arn is not None: body['instance_profile_arn'] = instance_profile_arn
7602
7972
  if is_meta_instance_profile is not None: body['is_meta_instance_profile'] = is_meta_instance_profile
7603
7973
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
7974
+
7604
7975
  self._api.do('POST', '/api/2.0/instance-profiles/edit', body=body, headers=headers)
7605
7976
 
7606
7977
  def list(self) -> Iterator[InstanceProfile]:
@@ -7614,6 +7985,7 @@ class InstanceProfilesAPI:
7614
7985
  """
7615
7986
 
7616
7987
  headers = {'Accept': 'application/json', }
7988
+
7617
7989
  json = self._api.do('GET', '/api/2.0/instance-profiles/list', headers=headers)
7618
7990
  parsed = ListInstanceProfilesResponse.from_dict(json).instance_profiles
7619
7991
  return parsed if parsed is not None else []
@@ -7634,6 +8006,7 @@ class InstanceProfilesAPI:
7634
8006
  body = {}
7635
8007
  if instance_profile_arn is not None: body['instance_profile_arn'] = instance_profile_arn
7636
8008
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
8009
+
7637
8010
  self._api.do('POST', '/api/2.0/instance-profiles/remove', body=body, headers=headers)
7638
8011
 
7639
8012
 
@@ -7669,6 +8042,7 @@ class LibrariesAPI:
7669
8042
  """
7670
8043
 
7671
8044
  headers = {'Accept': 'application/json', }
8045
+
7672
8046
  res = self._api.do('GET', '/api/2.0/libraries/all-cluster-statuses', headers=headers)
7673
8047
  return ListAllClusterLibraryStatusesResponse.from_dict(res)
7674
8048
 
@@ -7697,6 +8071,7 @@ class LibrariesAPI:
7697
8071
  query = {}
7698
8072
  if cluster_id is not None: query['cluster_id'] = cluster_id
7699
8073
  headers = {'Accept': 'application/json', }
8074
+
7700
8075
  json = self._api.do('GET', '/api/2.0/libraries/cluster-status', query=query, headers=headers)
7701
8076
  parsed = ClusterLibraryStatuses.from_dict(json).library_statuses
7702
8077
  return parsed if parsed is not None else []
@@ -7721,6 +8096,7 @@ class LibrariesAPI:
7721
8096
  if cluster_id is not None: body['cluster_id'] = cluster_id
7722
8097
  if libraries is not None: body['libraries'] = [v.as_dict() for v in libraries]
7723
8098
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
8099
+
7724
8100
  self._api.do('POST', '/api/2.0/libraries/install', body=body, headers=headers)
7725
8101
 
7726
8102
  def uninstall(self, cluster_id: str, libraries: List[Library]):
@@ -7741,6 +8117,7 @@ class LibrariesAPI:
7741
8117
  if cluster_id is not None: body['cluster_id'] = cluster_id
7742
8118
  if libraries is not None: body['libraries'] = [v.as_dict() for v in libraries]
7743
8119
  headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
8120
+
7744
8121
  self._api.do('POST', '/api/2.0/libraries/uninstall', body=body, headers=headers)
7745
8122
 
7746
8123
 
@@ -7769,6 +8146,7 @@ class PolicyFamiliesAPI:
7769
8146
  """
7770
8147
 
7771
8148
  headers = {'Accept': 'application/json', }
8149
+
7772
8150
  res = self._api.do('GET', f'/api/2.0/policy-families/{policy_family_id}', headers=headers)
7773
8151
  return PolicyFamily.from_dict(res)
7774
8152