databricks-sdk 0.70.0__py3-none-any.whl → 0.72.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 (36) hide show
  1. databricks/sdk/__init__.py +25 -25
  2. databricks/sdk/mixins/files.py +51 -15
  3. databricks/sdk/service/agentbricks.py +2 -0
  4. databricks/sdk/service/apps.py +10 -0
  5. databricks/sdk/service/billing.py +13 -3
  6. databricks/sdk/service/catalog.py +149 -46
  7. databricks/sdk/service/cleanrooms.py +11 -3
  8. databricks/sdk/service/compute.py +55 -0
  9. databricks/sdk/service/dashboards.py +11 -0
  10. databricks/sdk/service/database.py +12 -0
  11. databricks/sdk/service/dataquality.py +4 -0
  12. databricks/sdk/service/files.py +7 -72
  13. databricks/sdk/service/iam.py +26 -36
  14. databricks/sdk/service/iamv2.py +6 -0
  15. databricks/sdk/service/jobs.py +22 -122
  16. databricks/sdk/service/marketplace.py +18 -0
  17. databricks/sdk/service/ml.py +321 -17
  18. databricks/sdk/service/oauth2.py +10 -18
  19. databricks/sdk/service/pipelines.py +44 -13
  20. databricks/sdk/service/provisioning.py +9 -0
  21. databricks/sdk/service/qualitymonitorv2.py +2 -0
  22. databricks/sdk/service/serving.py +16 -21
  23. databricks/sdk/service/settings.py +43 -72
  24. databricks/sdk/service/settingsv2.py +2 -0
  25. databricks/sdk/service/sharing.py +23 -31
  26. databricks/sdk/service/sql.py +48 -24
  27. databricks/sdk/service/tags.py +2 -0
  28. databricks/sdk/service/vectorsearch.py +11 -1
  29. databricks/sdk/service/workspace.py +18 -91
  30. databricks/sdk/version.py +1 -1
  31. {databricks_sdk-0.70.0.dist-info → databricks_sdk-0.72.0.dist-info}/METADATA +1 -1
  32. {databricks_sdk-0.70.0.dist-info → databricks_sdk-0.72.0.dist-info}/RECORD +36 -36
  33. {databricks_sdk-0.70.0.dist-info → databricks_sdk-0.72.0.dist-info}/WHEEL +0 -0
  34. {databricks_sdk-0.70.0.dist-info → databricks_sdk-0.72.0.dist-info}/licenses/LICENSE +0 -0
  35. {databricks_sdk-0.70.0.dist-info → databricks_sdk-0.72.0.dist-info}/licenses/NOTICE +0 -0
  36. {databricks_sdk-0.70.0.dist-info → databricks_sdk-0.72.0.dist-info}/top_level.txt +0 -0
@@ -201,6 +201,31 @@ class ApproveTransitionRequestResponse:
201
201
  return cls(activity=_from_dict(d, "activity", Activity))
202
202
 
203
203
 
204
+ @dataclass
205
+ class BatchCreateMaterializedFeaturesResponse:
206
+ materialized_features: Optional[List[MaterializedFeature]] = None
207
+ """The created materialized features with assigned IDs."""
208
+
209
+ def as_dict(self) -> dict:
210
+ """Serializes the BatchCreateMaterializedFeaturesResponse into a dictionary suitable for use as a JSON request body."""
211
+ body = {}
212
+ if self.materialized_features:
213
+ body["materialized_features"] = [v.as_dict() for v in self.materialized_features]
214
+ return body
215
+
216
+ def as_shallow_dict(self) -> dict:
217
+ """Serializes the BatchCreateMaterializedFeaturesResponse into a shallow dictionary of its immediate attributes."""
218
+ body = {}
219
+ if self.materialized_features:
220
+ body["materialized_features"] = self.materialized_features
221
+ return body
222
+
223
+ @classmethod
224
+ def from_dict(cls, d: Dict[str, Any]) -> BatchCreateMaterializedFeaturesResponse:
225
+ """Deserializes the BatchCreateMaterializedFeaturesResponse from a dictionary."""
226
+ return cls(materialized_features=_repeated_dict(d, "materialized_features", MaterializedFeature))
227
+
228
+
204
229
  class CommentActivityAction(Enum):
205
230
  """An action that a user (with sufficient permissions) could take on an activity or comment.
206
231
 
@@ -291,6 +316,38 @@ class CommentObject:
291
316
  )
292
317
 
293
318
 
319
+ @dataclass
320
+ class ContinuousWindow:
321
+ window_duration: str
322
+ """The duration of the continuous window (must be positive)."""
323
+
324
+ offset: Optional[str] = None
325
+ """The offset of the continuous window (must be non-positive)."""
326
+
327
+ def as_dict(self) -> dict:
328
+ """Serializes the ContinuousWindow into a dictionary suitable for use as a JSON request body."""
329
+ body = {}
330
+ if self.offset is not None:
331
+ body["offset"] = self.offset
332
+ if self.window_duration is not None:
333
+ body["window_duration"] = self.window_duration
334
+ return body
335
+
336
+ def as_shallow_dict(self) -> dict:
337
+ """Serializes the ContinuousWindow into a shallow dictionary of its immediate attributes."""
338
+ body = {}
339
+ if self.offset is not None:
340
+ body["offset"] = self.offset
341
+ if self.window_duration is not None:
342
+ body["window_duration"] = self.window_duration
343
+ return body
344
+
345
+ @classmethod
346
+ def from_dict(cls, d: Dict[str, Any]) -> ContinuousWindow:
347
+ """Deserializes the ContinuousWindow from a dictionary."""
348
+ return cls(offset=d.get("offset", None), window_duration=d.get("window_duration", None))
349
+
350
+
294
351
  @dataclass
295
352
  class CreateCommentResponse:
296
353
  comment: Optional[CommentObject] = None
@@ -391,6 +448,31 @@ class CreateLoggedModelResponse:
391
448
  return cls(model=_from_dict(d, "model", LoggedModel))
392
449
 
393
450
 
451
+ @dataclass
452
+ class CreateMaterializedFeatureRequest:
453
+ materialized_feature: MaterializedFeature
454
+ """The materialized feature to create."""
455
+
456
+ def as_dict(self) -> dict:
457
+ """Serializes the CreateMaterializedFeatureRequest into a dictionary suitable for use as a JSON request body."""
458
+ body = {}
459
+ if self.materialized_feature:
460
+ body["materialized_feature"] = self.materialized_feature.as_dict()
461
+ return body
462
+
463
+ def as_shallow_dict(self) -> dict:
464
+ """Serializes the CreateMaterializedFeatureRequest into a shallow dictionary of its immediate attributes."""
465
+ body = {}
466
+ if self.materialized_feature:
467
+ body["materialized_feature"] = self.materialized_feature
468
+ return body
469
+
470
+ @classmethod
471
+ def from_dict(cls, d: Dict[str, Any]) -> CreateMaterializedFeatureRequest:
472
+ """Deserializes the CreateMaterializedFeatureRequest from a dictionary."""
473
+ return cls(materialized_feature=_from_dict(d, "materialized_feature", MaterializedFeature))
474
+
475
+
394
476
  @dataclass
395
477
  class CreateModelResponse:
396
478
  registered_model: Optional[Model] = None
@@ -1302,6 +1384,9 @@ class Feature:
1302
1384
  filter_condition: Optional[str] = None
1303
1385
  """The filter condition applied to the source data before aggregation."""
1304
1386
 
1387
+ lineage_context: Optional[LineageContext] = None
1388
+ """Lineage context information for this feature."""
1389
+
1305
1390
  def as_dict(self) -> dict:
1306
1391
  """Serializes the Feature into a dictionary suitable for use as a JSON request body."""
1307
1392
  body = {}
@@ -1315,6 +1400,8 @@ class Feature:
1315
1400
  body["function"] = self.function.as_dict()
1316
1401
  if self.inputs:
1317
1402
  body["inputs"] = [v for v in self.inputs]
1403
+ if self.lineage_context:
1404
+ body["lineage_context"] = self.lineage_context.as_dict()
1318
1405
  if self.source:
1319
1406
  body["source"] = self.source.as_dict()
1320
1407
  if self.time_window:
@@ -1334,6 +1421,8 @@ class Feature:
1334
1421
  body["function"] = self.function
1335
1422
  if self.inputs:
1336
1423
  body["inputs"] = self.inputs
1424
+ if self.lineage_context:
1425
+ body["lineage_context"] = self.lineage_context
1337
1426
  if self.source:
1338
1427
  body["source"] = self.source
1339
1428
  if self.time_window:
@@ -1349,6 +1438,7 @@ class Feature:
1349
1438
  full_name=d.get("full_name", None),
1350
1439
  function=_from_dict(d, "function", Function),
1351
1440
  inputs=d.get("inputs", None),
1441
+ lineage_context=_from_dict(d, "lineage_context", LineageContext),
1352
1442
  source=_from_dict(d, "source", DataSource),
1353
1443
  time_window=_from_dict(d, "time_window", TimeWindow),
1354
1444
  )
@@ -2160,6 +2250,38 @@ class InputTag:
2160
2250
  return cls(key=d.get("key", None), value=d.get("value", None))
2161
2251
 
2162
2252
 
2253
+ @dataclass
2254
+ class JobContext:
2255
+ job_id: Optional[int] = None
2256
+ """The job ID where this API invoked."""
2257
+
2258
+ job_run_id: Optional[int] = None
2259
+ """The job run ID where this API was invoked."""
2260
+
2261
+ def as_dict(self) -> dict:
2262
+ """Serializes the JobContext into a dictionary suitable for use as a JSON request body."""
2263
+ body = {}
2264
+ if self.job_id is not None:
2265
+ body["job_id"] = self.job_id
2266
+ if self.job_run_id is not None:
2267
+ body["job_run_id"] = self.job_run_id
2268
+ return body
2269
+
2270
+ def as_shallow_dict(self) -> dict:
2271
+ """Serializes the JobContext into a shallow dictionary of its immediate attributes."""
2272
+ body = {}
2273
+ if self.job_id is not None:
2274
+ body["job_id"] = self.job_id
2275
+ if self.job_run_id is not None:
2276
+ body["job_run_id"] = self.job_run_id
2277
+ return body
2278
+
2279
+ @classmethod
2280
+ def from_dict(cls, d: Dict[str, Any]) -> JobContext:
2281
+ """Deserializes the JobContext from a dictionary."""
2282
+ return cls(job_id=d.get("job_id", None), job_run_id=d.get("job_run_id", None))
2283
+
2284
+
2163
2285
  @dataclass
2164
2286
  class JobSpec:
2165
2287
  job_id: str
@@ -2237,6 +2359,42 @@ class JobSpecWithoutSecret:
2237
2359
  return cls(job_id=d.get("job_id", None), workspace_url=d.get("workspace_url", None))
2238
2360
 
2239
2361
 
2362
+ @dataclass
2363
+ class LineageContext:
2364
+ """Lineage context information for tracking where an API was invoked. This will allow us to track
2365
+ lineage, which currently uses caller entity information for use across the Lineage Client and
2366
+ Observability in Lumberjack."""
2367
+
2368
+ job_context: Optional[JobContext] = None
2369
+ """Job context information including job ID and run ID."""
2370
+
2371
+ notebook_id: Optional[int] = None
2372
+ """The notebook ID where this API was invoked."""
2373
+
2374
+ def as_dict(self) -> dict:
2375
+ """Serializes the LineageContext into a dictionary suitable for use as a JSON request body."""
2376
+ body = {}
2377
+ if self.job_context:
2378
+ body["job_context"] = self.job_context.as_dict()
2379
+ if self.notebook_id is not None:
2380
+ body["notebook_id"] = self.notebook_id
2381
+ return body
2382
+
2383
+ def as_shallow_dict(self) -> dict:
2384
+ """Serializes the LineageContext into a shallow dictionary of its immediate attributes."""
2385
+ body = {}
2386
+ if self.job_context:
2387
+ body["job_context"] = self.job_context
2388
+ if self.notebook_id is not None:
2389
+ body["notebook_id"] = self.notebook_id
2390
+ return body
2391
+
2392
+ @classmethod
2393
+ def from_dict(cls, d: Dict[str, Any]) -> LineageContext:
2394
+ """Deserializes the LineageContext from a dictionary."""
2395
+ return cls(job_context=_from_dict(d, "job_context", JobContext), notebook_id=d.get("notebook_id", None))
2396
+
2397
+
2240
2398
  @dataclass
2241
2399
  class LinkedFeature:
2242
2400
  """Feature for model version. ([ML-57150] Renamed from Feature to LinkedFeature)"""
@@ -2987,10 +3145,6 @@ class MaterializedFeature:
2987
3145
  feature_name: str
2988
3146
  """The full name of the feature in Unity Catalog."""
2989
3147
 
2990
- offline_store_config: OfflineStoreConfig
2991
-
2992
- online_store_config: OnlineStore
2993
-
2994
3148
  last_materialization_time: Optional[str] = None
2995
3149
  """The timestamp when the pipeline last ran and updated the materialized feature values. If the
2996
3150
  pipeline has not run yet, this field will be null."""
@@ -2998,6 +3152,10 @@ class MaterializedFeature:
2998
3152
  materialized_feature_id: Optional[str] = None
2999
3153
  """Unique identifier for the materialized feature."""
3000
3154
 
3155
+ offline_store_config: Optional[OfflineStoreConfig] = None
3156
+
3157
+ online_store_config: Optional[OnlineStore] = None
3158
+
3001
3159
  pipeline_schedule_state: Optional[MaterializedFeaturePipelineScheduleState] = None
3002
3160
  """The schedule state of the materialization pipeline."""
3003
3161
 
@@ -5114,6 +5272,38 @@ class SetTagResponse:
5114
5272
  return cls()
5115
5273
 
5116
5274
 
5275
+ @dataclass
5276
+ class SlidingWindow:
5277
+ window_duration: str
5278
+ """The duration of the sliding window."""
5279
+
5280
+ slide_duration: str
5281
+ """The slide duration (interval by which windows advance, must be positive and less than duration)."""
5282
+
5283
+ def as_dict(self) -> dict:
5284
+ """Serializes the SlidingWindow into a dictionary suitable for use as a JSON request body."""
5285
+ body = {}
5286
+ if self.slide_duration is not None:
5287
+ body["slide_duration"] = self.slide_duration
5288
+ if self.window_duration is not None:
5289
+ body["window_duration"] = self.window_duration
5290
+ return body
5291
+
5292
+ def as_shallow_dict(self) -> dict:
5293
+ """Serializes the SlidingWindow into a shallow dictionary of its immediate attributes."""
5294
+ body = {}
5295
+ if self.slide_duration is not None:
5296
+ body["slide_duration"] = self.slide_duration
5297
+ if self.window_duration is not None:
5298
+ body["window_duration"] = self.window_duration
5299
+ return body
5300
+
5301
+ @classmethod
5302
+ def from_dict(cls, d: Dict[str, Any]) -> SlidingWindow:
5303
+ """Deserializes the SlidingWindow from a dictionary."""
5304
+ return cls(slide_duration=d.get("slide_duration", None), window_duration=d.get("window_duration", None))
5305
+
5306
+
5117
5307
  class Status(Enum):
5118
5308
  """The status of the model version. Valid values are: * `PENDING_REGISTRATION`: Request to register
5119
5309
  a new model version is pending as server performs background tasks.
@@ -5161,34 +5351,42 @@ class TestRegistryWebhookResponse:
5161
5351
 
5162
5352
  @dataclass
5163
5353
  class TimeWindow:
5164
- duration: str
5165
- """The duration of the time window."""
5354
+ continuous: Optional[ContinuousWindow] = None
5166
5355
 
5167
- offset: Optional[str] = None
5168
- """The offset of the time window."""
5356
+ sliding: Optional[SlidingWindow] = None
5357
+
5358
+ tumbling: Optional[TumblingWindow] = None
5169
5359
 
5170
5360
  def as_dict(self) -> dict:
5171
5361
  """Serializes the TimeWindow into a dictionary suitable for use as a JSON request body."""
5172
5362
  body = {}
5173
- if self.duration is not None:
5174
- body["duration"] = self.duration
5175
- if self.offset is not None:
5176
- body["offset"] = self.offset
5363
+ if self.continuous:
5364
+ body["continuous"] = self.continuous.as_dict()
5365
+ if self.sliding:
5366
+ body["sliding"] = self.sliding.as_dict()
5367
+ if self.tumbling:
5368
+ body["tumbling"] = self.tumbling.as_dict()
5177
5369
  return body
5178
5370
 
5179
5371
  def as_shallow_dict(self) -> dict:
5180
5372
  """Serializes the TimeWindow into a shallow dictionary of its immediate attributes."""
5181
5373
  body = {}
5182
- if self.duration is not None:
5183
- body["duration"] = self.duration
5184
- if self.offset is not None:
5185
- body["offset"] = self.offset
5374
+ if self.continuous:
5375
+ body["continuous"] = self.continuous
5376
+ if self.sliding:
5377
+ body["sliding"] = self.sliding
5378
+ if self.tumbling:
5379
+ body["tumbling"] = self.tumbling
5186
5380
  return body
5187
5381
 
5188
5382
  @classmethod
5189
5383
  def from_dict(cls, d: Dict[str, Any]) -> TimeWindow:
5190
5384
  """Deserializes the TimeWindow from a dictionary."""
5191
- return cls(duration=d.get("duration", None), offset=d.get("offset", None))
5385
+ return cls(
5386
+ continuous=_from_dict(d, "continuous", ContinuousWindow),
5387
+ sliding=_from_dict(d, "sliding", SlidingWindow),
5388
+ tumbling=_from_dict(d, "tumbling", TumblingWindow),
5389
+ )
5192
5390
 
5193
5391
 
5194
5392
  @dataclass
@@ -5286,6 +5484,31 @@ class TransitionStageResponse:
5286
5484
  return cls(model_version_databricks=_from_dict(d, "model_version_databricks", ModelVersionDatabricks))
5287
5485
 
5288
5486
 
5487
+ @dataclass
5488
+ class TumblingWindow:
5489
+ window_duration: str
5490
+ """The duration of each tumbling window (non-overlapping, fixed-duration windows)."""
5491
+
5492
+ def as_dict(self) -> dict:
5493
+ """Serializes the TumblingWindow into a dictionary suitable for use as a JSON request body."""
5494
+ body = {}
5495
+ if self.window_duration is not None:
5496
+ body["window_duration"] = self.window_duration
5497
+ return body
5498
+
5499
+ def as_shallow_dict(self) -> dict:
5500
+ """Serializes the TumblingWindow into a shallow dictionary of its immediate attributes."""
5501
+ body = {}
5502
+ if self.window_duration is not None:
5503
+ body["window_duration"] = self.window_duration
5504
+ return body
5505
+
5506
+ @classmethod
5507
+ def from_dict(cls, d: Dict[str, Any]) -> TumblingWindow:
5508
+ """Deserializes the TumblingWindow from a dictionary."""
5509
+ return cls(window_duration=d.get("window_duration", None))
5510
+
5511
+
5289
5512
  @dataclass
5290
5513
  class UpdateCommentResponse:
5291
5514
  comment: Optional[CommentObject] = None
@@ -5478,6 +5701,7 @@ class ExperimentsAPI:
5478
5701
 
5479
5702
  :returns: :class:`CreateExperimentResponse`
5480
5703
  """
5704
+
5481
5705
  body = {}
5482
5706
  if artifact_location is not None:
5483
5707
  body["artifact_location"] = artifact_location
@@ -5520,6 +5744,7 @@ class ExperimentsAPI:
5520
5744
 
5521
5745
  :returns: :class:`CreateLoggedModelResponse`
5522
5746
  """
5747
+
5523
5748
  body = {}
5524
5749
  if experiment_id is not None:
5525
5750
  body["experiment_id"] = experiment_id
@@ -5568,6 +5793,7 @@ class ExperimentsAPI:
5568
5793
 
5569
5794
  :returns: :class:`CreateRunResponse`
5570
5795
  """
5796
+
5571
5797
  body = {}
5572
5798
  if experiment_id is not None:
5573
5799
  body["experiment_id"] = experiment_id
@@ -5596,6 +5822,7 @@ class ExperimentsAPI:
5596
5822
 
5597
5823
 
5598
5824
  """
5825
+
5599
5826
  body = {}
5600
5827
  if experiment_id is not None:
5601
5828
  body["experiment_id"] = experiment_id
@@ -5646,6 +5873,7 @@ class ExperimentsAPI:
5646
5873
 
5647
5874
 
5648
5875
  """
5876
+
5649
5877
  body = {}
5650
5878
  if run_id is not None:
5651
5879
  body["run_id"] = run_id
@@ -5674,6 +5902,7 @@ class ExperimentsAPI:
5674
5902
 
5675
5903
  :returns: :class:`DeleteRunsResponse`
5676
5904
  """
5905
+
5677
5906
  body = {}
5678
5907
  if experiment_id is not None:
5679
5908
  body["experiment_id"] = experiment_id
@@ -5700,6 +5929,7 @@ class ExperimentsAPI:
5700
5929
 
5701
5930
 
5702
5931
  """
5932
+
5703
5933
  body = {}
5704
5934
  if key is not None:
5705
5935
  body["key"] = key
@@ -5723,6 +5953,7 @@ class ExperimentsAPI:
5723
5953
 
5724
5954
  :returns: :class:`FinalizeLoggedModelResponse`
5725
5955
  """
5956
+
5726
5957
  body = {}
5727
5958
  if status is not None:
5728
5959
  body["status"] = status.value
@@ -6061,6 +6292,7 @@ class ExperimentsAPI:
6061
6292
 
6062
6293
 
6063
6294
  """
6295
+
6064
6296
  body = {}
6065
6297
  if metrics is not None:
6066
6298
  body["metrics"] = [v.as_dict() for v in metrics]
@@ -6091,6 +6323,7 @@ class ExperimentsAPI:
6091
6323
 
6092
6324
 
6093
6325
  """
6326
+
6094
6327
  body = {}
6095
6328
  if datasets is not None:
6096
6329
  body["datasets"] = [v.as_dict() for v in datasets]
@@ -6117,6 +6350,7 @@ class ExperimentsAPI:
6117
6350
 
6118
6351
 
6119
6352
  """
6353
+
6120
6354
  body = {}
6121
6355
  if params is not None:
6122
6356
  body["params"] = [v.as_dict() for v in params]
@@ -6168,6 +6402,7 @@ class ExperimentsAPI:
6168
6402
 
6169
6403
 
6170
6404
  """
6405
+
6171
6406
  body = {}
6172
6407
  if dataset_digest is not None:
6173
6408
  body["dataset_digest"] = dataset_digest
@@ -6207,6 +6442,7 @@ class ExperimentsAPI:
6207
6442
 
6208
6443
 
6209
6444
  """
6445
+
6210
6446
  body = {}
6211
6447
  if model_json is not None:
6212
6448
  body["model_json"] = model_json
@@ -6229,6 +6465,7 @@ class ExperimentsAPI:
6229
6465
 
6230
6466
 
6231
6467
  """
6468
+
6232
6469
  body = {}
6233
6470
  if models is not None:
6234
6471
  body["models"] = [v.as_dict() for v in models]
@@ -6258,6 +6495,7 @@ class ExperimentsAPI:
6258
6495
 
6259
6496
 
6260
6497
  """
6498
+
6261
6499
  body = {}
6262
6500
  if key is not None:
6263
6501
  body["key"] = key
@@ -6286,6 +6524,7 @@ class ExperimentsAPI:
6286
6524
 
6287
6525
 
6288
6526
  """
6527
+
6289
6528
  body = {}
6290
6529
  if experiment_id is not None:
6291
6530
  body["experiment_id"] = experiment_id
@@ -6306,6 +6545,7 @@ class ExperimentsAPI:
6306
6545
 
6307
6546
 
6308
6547
  """
6548
+
6309
6549
  body = {}
6310
6550
  if run_id is not None:
6311
6551
  body["run_id"] = run_id
@@ -6334,6 +6574,7 @@ class ExperimentsAPI:
6334
6574
 
6335
6575
  :returns: :class:`RestoreRunsResponse`
6336
6576
  """
6577
+
6337
6578
  body = {}
6338
6579
  if experiment_id is not None:
6339
6580
  body["experiment_id"] = experiment_id
@@ -6375,6 +6616,7 @@ class ExperimentsAPI:
6375
6616
 
6376
6617
  :returns: Iterator over :class:`Experiment`
6377
6618
  """
6619
+
6378
6620
  body = {}
6379
6621
  if filter is not None:
6380
6622
  body["filter"] = filter
@@ -6434,6 +6676,7 @@ class ExperimentsAPI:
6434
6676
 
6435
6677
  :returns: :class:`SearchLoggedModelsResponse`
6436
6678
  """
6679
+
6437
6680
  body = {}
6438
6681
  if datasets is not None:
6439
6682
  body["datasets"] = [v.as_dict() for v in datasets]
@@ -6497,6 +6740,7 @@ class ExperimentsAPI:
6497
6740
 
6498
6741
  :returns: Iterator over :class:`Run`
6499
6742
  """
6743
+
6500
6744
  body = {}
6501
6745
  if experiment_ids is not None:
6502
6746
  body["experiment_ids"] = [v for v in experiment_ids]
@@ -6536,6 +6780,7 @@ class ExperimentsAPI:
6536
6780
 
6537
6781
 
6538
6782
  """
6783
+
6539
6784
  body = {}
6540
6785
  if experiment_id is not None:
6541
6786
  body["experiment_id"] = experiment_id
@@ -6560,6 +6805,7 @@ class ExperimentsAPI:
6560
6805
 
6561
6806
 
6562
6807
  """
6808
+
6563
6809
  body = {}
6564
6810
  if tags is not None:
6565
6811
  body["tags"] = [v.as_dict() for v in tags]
@@ -6582,6 +6828,7 @@ class ExperimentsAPI:
6582
6828
 
6583
6829
  :returns: :class:`ExperimentPermissions`
6584
6830
  """
6831
+
6585
6832
  body = {}
6586
6833
  if access_control_list is not None:
6587
6834
  body["access_control_list"] = [v.as_dict() for v in access_control_list]
@@ -6608,6 +6855,7 @@ class ExperimentsAPI:
6608
6855
 
6609
6856
 
6610
6857
  """
6858
+
6611
6859
  body = {}
6612
6860
  if key is not None:
6613
6861
  body["key"] = key
@@ -6634,6 +6882,7 @@ class ExperimentsAPI:
6634
6882
 
6635
6883
 
6636
6884
  """
6885
+
6637
6886
  body = {}
6638
6887
  if experiment_id is not None:
6639
6888
  body["experiment_id"] = experiment_id
@@ -6657,6 +6906,7 @@ class ExperimentsAPI:
6657
6906
 
6658
6907
  :returns: :class:`ExperimentPermissions`
6659
6908
  """
6909
+
6660
6910
  body = {}
6661
6911
  if access_control_list is not None:
6662
6912
  body["access_control_list"] = [v.as_dict() for v in access_control_list]
@@ -6693,6 +6943,7 @@ class ExperimentsAPI:
6693
6943
 
6694
6944
  :returns: :class:`UpdateRunResponse`
6695
6945
  """
6946
+
6696
6947
  body = {}
6697
6948
  if end_time is not None:
6698
6949
  body["end_time"] = end_time
@@ -6719,6 +6970,30 @@ class FeatureEngineeringAPI:
6719
6970
  def __init__(self, api_client):
6720
6971
  self._api = api_client
6721
6972
 
6973
+ def batch_create_materialized_features(
6974
+ self, requests: List[CreateMaterializedFeatureRequest]
6975
+ ) -> BatchCreateMaterializedFeaturesResponse:
6976
+ """Batch create materialized features.
6977
+
6978
+ :param requests: List[:class:`CreateMaterializedFeatureRequest`]
6979
+ The requests to create materialized features.
6980
+
6981
+ :returns: :class:`BatchCreateMaterializedFeaturesResponse`
6982
+ """
6983
+
6984
+ body = {}
6985
+ if requests is not None:
6986
+ body["requests"] = [v.as_dict() for v in requests]
6987
+ headers = {
6988
+ "Accept": "application/json",
6989
+ "Content-Type": "application/json",
6990
+ }
6991
+
6992
+ res = self._api.do(
6993
+ "POST", "/api/2.0/feature-engineering/materialized-features:batchCreate", body=body, headers=headers
6994
+ )
6995
+ return BatchCreateMaterializedFeaturesResponse.from_dict(res)
6996
+
6722
6997
  def create_feature(self, feature: Feature) -> Feature:
6723
6998
  """Create a Feature.
6724
6999
 
@@ -6727,6 +7002,7 @@ class FeatureEngineeringAPI:
6727
7002
 
6728
7003
  :returns: :class:`Feature`
6729
7004
  """
7005
+
6730
7006
  body = feature.as_dict()
6731
7007
  headers = {
6732
7008
  "Accept": "application/json",
@@ -6744,6 +7020,7 @@ class FeatureEngineeringAPI:
6744
7020
 
6745
7021
  :returns: :class:`MaterializedFeature`
6746
7022
  """
7023
+
6747
7024
  body = materialized_feature.as_dict()
6748
7025
  headers = {
6749
7026
  "Accept": "application/json",
@@ -6899,6 +7176,7 @@ class FeatureEngineeringAPI:
6899
7176
 
6900
7177
  :returns: :class:`Feature`
6901
7178
  """
7179
+
6902
7180
  body = feature.as_dict()
6903
7181
  query = {}
6904
7182
  if update_mask is not None:
@@ -6928,6 +7206,7 @@ class FeatureEngineeringAPI:
6928
7206
 
6929
7207
  :returns: :class:`MaterializedFeature`
6930
7208
  """
7209
+
6931
7210
  body = materialized_feature.as_dict()
6932
7211
  query = {}
6933
7212
  if update_mask is not None:
@@ -6966,6 +7245,7 @@ class FeatureStoreAPI:
6966
7245
 
6967
7246
  :returns: :class:`OnlineStore`
6968
7247
  """
7248
+
6969
7249
  body = online_store.as_dict()
6970
7250
  headers = {
6971
7251
  "Accept": "application/json",
@@ -7047,6 +7327,7 @@ class FeatureStoreAPI:
7047
7327
 
7048
7328
  :returns: :class:`PublishTableResponse`
7049
7329
  """
7330
+
7050
7331
  body = {}
7051
7332
  if publish_spec is not None:
7052
7333
  body["publish_spec"] = publish_spec.as_dict()
@@ -7072,6 +7353,7 @@ class FeatureStoreAPI:
7072
7353
 
7073
7354
  :returns: :class:`OnlineStore`
7074
7355
  """
7356
+
7075
7357
  body = online_store.as_dict()
7076
7358
  query = {}
7077
7359
  if update_mask is not None:
@@ -7204,6 +7486,7 @@ class ForecastingAPI:
7204
7486
  Long-running operation waiter for :class:`ForecastingExperiment`.
7205
7487
  See :method:wait_get_experiment_forecasting_succeeded for more details.
7206
7488
  """
7489
+
7207
7490
  body = {}
7208
7491
  if custom_weights_column is not None:
7209
7492
  body["custom_weights_column"] = custom_weights_column
@@ -7326,6 +7609,7 @@ class MaterializedFeaturesAPI:
7326
7609
 
7327
7610
  :returns: :class:`FeatureTag`
7328
7611
  """
7612
+
7329
7613
  body = feature_tag.as_dict()
7330
7614
  headers = {
7331
7615
  "Accept": "application/json",
@@ -7464,6 +7748,7 @@ class MaterializedFeaturesAPI:
7464
7748
 
7465
7749
  :returns: :class:`FeatureTag`
7466
7750
  """
7751
+
7467
7752
  body = feature_tag.as_dict()
7468
7753
  query = {}
7469
7754
  if update_mask is not None:
@@ -7521,6 +7806,7 @@ class ModelRegistryAPI:
7521
7806
 
7522
7807
  :returns: :class:`ApproveTransitionRequestResponse`
7523
7808
  """
7809
+
7524
7810
  body = {}
7525
7811
  if archive_existing_versions is not None:
7526
7812
  body["archive_existing_versions"] = archive_existing_versions
@@ -7553,6 +7839,7 @@ class ModelRegistryAPI:
7553
7839
 
7554
7840
  :returns: :class:`CreateCommentResponse`
7555
7841
  """
7842
+
7556
7843
  body = {}
7557
7844
  if comment is not None:
7558
7845
  body["comment"] = comment
@@ -7583,6 +7870,7 @@ class ModelRegistryAPI:
7583
7870
 
7584
7871
  :returns: :class:`CreateModelResponse`
7585
7872
  """
7873
+
7586
7874
  body = {}
7587
7875
  if description is not None:
7588
7876
  body["description"] = description
@@ -7627,6 +7915,7 @@ class ModelRegistryAPI:
7627
7915
 
7628
7916
  :returns: :class:`CreateModelVersionResponse`
7629
7917
  """
7918
+
7630
7919
  body = {}
7631
7920
  if description is not None:
7632
7921
  body["description"] = description
@@ -7672,6 +7961,7 @@ class ModelRegistryAPI:
7672
7961
 
7673
7962
  :returns: :class:`CreateTransitionRequestResponse`
7674
7963
  """
7964
+
7675
7965
  body = {}
7676
7966
  if comment is not None:
7677
7967
  body["comment"] = comment
@@ -7750,6 +8040,7 @@ class ModelRegistryAPI:
7750
8040
 
7751
8041
  :returns: :class:`CreateWebhookResponse`
7752
8042
  """
8043
+
7753
8044
  body = {}
7754
8045
  if description is not None:
7755
8046
  body["description"] = description
@@ -7953,6 +8244,7 @@ class ModelRegistryAPI:
7953
8244
 
7954
8245
  :returns: Iterator over :class:`ModelVersion`
7955
8246
  """
8247
+
7956
8248
  body = {}
7957
8249
  if name is not None:
7958
8250
  body["name"] = name
@@ -8222,6 +8514,7 @@ class ModelRegistryAPI:
8222
8514
 
8223
8515
  :returns: :class:`RejectTransitionRequestResponse`
8224
8516
  """
8517
+
8225
8518
  body = {}
8226
8519
  if comment is not None:
8227
8520
  body["comment"] = comment
@@ -8249,6 +8542,7 @@ class ModelRegistryAPI:
8249
8542
 
8250
8543
  :returns: :class:`RenameModelResponse`
8251
8544
  """
8545
+
8252
8546
  body = {}
8253
8547
  if name is not None:
8254
8548
  body["name"] = name
@@ -8372,6 +8666,7 @@ class ModelRegistryAPI:
8372
8666
 
8373
8667
 
8374
8668
  """
8669
+
8375
8670
  body = {}
8376
8671
  if key is not None:
8377
8672
  body["key"] = key
@@ -8403,6 +8698,7 @@ class ModelRegistryAPI:
8403
8698
 
8404
8699
 
8405
8700
  """
8701
+
8406
8702
  body = {}
8407
8703
  if key is not None:
8408
8704
  body["key"] = key
@@ -8434,6 +8730,7 @@ class ModelRegistryAPI:
8434
8730
 
8435
8731
  :returns: :class:`RegisteredModelPermissions`
8436
8732
  """
8733
+
8437
8734
  body = {}
8438
8735
  if access_control_list is not None:
8439
8736
  body["access_control_list"] = [v.as_dict() for v in access_control_list]
@@ -8460,6 +8757,7 @@ class ModelRegistryAPI:
8460
8757
 
8461
8758
  :returns: :class:`TestRegistryWebhookResponse`
8462
8759
  """
8760
+
8463
8761
  body = {}
8464
8762
  if event is not None:
8465
8763
  body["event"] = event.value
@@ -8502,6 +8800,7 @@ class ModelRegistryAPI:
8502
8800
 
8503
8801
  :returns: :class:`TransitionStageResponse`
8504
8802
  """
8803
+
8505
8804
  body = {}
8506
8805
  if archive_existing_versions is not None:
8507
8806
  body["archive_existing_versions"] = archive_existing_versions
@@ -8533,6 +8832,7 @@ class ModelRegistryAPI:
8533
8832
 
8534
8833
  :returns: :class:`UpdateCommentResponse`
8535
8834
  """
8835
+
8536
8836
  body = {}
8537
8837
  if comment is not None:
8538
8838
  body["comment"] = comment
@@ -8556,6 +8856,7 @@ class ModelRegistryAPI:
8556
8856
 
8557
8857
  :returns: :class:`UpdateModelResponse`
8558
8858
  """
8859
+
8559
8860
  body = {}
8560
8861
  if description is not None:
8561
8862
  body["description"] = description
@@ -8583,6 +8884,7 @@ class ModelRegistryAPI:
8583
8884
 
8584
8885
  :returns: :class:`UpdateModelVersionResponse`
8585
8886
  """
8887
+
8586
8888
  body = {}
8587
8889
  if description is not None:
8588
8890
  body["description"] = description
@@ -8613,6 +8915,7 @@ class ModelRegistryAPI:
8613
8915
 
8614
8916
  :returns: :class:`RegisteredModelPermissions`
8615
8917
  """
8918
+
8616
8919
  body = {}
8617
8920
  if access_control_list is not None:
8618
8921
  body["access_control_list"] = [v.as_dict() for v in access_control_list]
@@ -8677,6 +8980,7 @@ class ModelRegistryAPI:
8677
8980
 
8678
8981
  :returns: :class:`UpdateWebhookResponse`
8679
8982
  """
8983
+
8680
8984
  body = {}
8681
8985
  if description is not None:
8682
8986
  body["description"] = description