databricks-sdk 0.37.0__py3-none-any.whl → 0.39.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of databricks-sdk might be problematic. Click here for more details.

Files changed (33) hide show
  1. databricks/sdk/__init__.py +24 -2
  2. databricks/sdk/_base_client.py +61 -14
  3. databricks/sdk/config.py +10 -9
  4. databricks/sdk/credentials_provider.py +6 -5
  5. databricks/sdk/mixins/jobs.py +49 -0
  6. databricks/sdk/mixins/open_ai_client.py +2 -2
  7. databricks/sdk/service/apps.py +185 -4
  8. databricks/sdk/service/billing.py +248 -1
  9. databricks/sdk/service/catalog.py +1943 -46
  10. databricks/sdk/service/cleanrooms.py +1281 -0
  11. databricks/sdk/service/compute.py +1486 -8
  12. databricks/sdk/service/dashboards.py +336 -11
  13. databricks/sdk/service/files.py +162 -2
  14. databricks/sdk/service/iam.py +353 -2
  15. databricks/sdk/service/jobs.py +1281 -16
  16. databricks/sdk/service/marketplace.py +688 -0
  17. databricks/sdk/service/ml.py +1038 -2
  18. databricks/sdk/service/oauth2.py +176 -0
  19. databricks/sdk/service/pipelines.py +602 -15
  20. databricks/sdk/service/provisioning.py +402 -0
  21. databricks/sdk/service/serving.py +615 -0
  22. databricks/sdk/service/settings.py +1190 -3
  23. databricks/sdk/service/sharing.py +328 -2
  24. databricks/sdk/service/sql.py +1186 -2
  25. databricks/sdk/service/vectorsearch.py +290 -0
  26. databricks/sdk/service/workspace.py +453 -1
  27. databricks/sdk/version.py +1 -1
  28. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/METADATA +26 -26
  29. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/RECORD +33 -31
  30. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/WHEEL +1 -1
  31. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/LICENSE +0 -0
  32. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/NOTICE +0 -0
  33. {databricks_sdk-0.37.0.dist-info → databricks_sdk-0.39.0.dist-info}/top_level.txt +0 -0
@@ -61,7 +61,7 @@ class CreatePipeline:
61
61
  """Filters on which Pipeline packages to include in the deployed graph."""
62
62
 
63
63
  gateway_definition: Optional[IngestionGatewayPipelineDefinition] = None
64
- """The definition of a gateway pipeline to support CDC."""
64
+ """The definition of a gateway pipeline to support change data capture."""
65
65
 
66
66
  id: Optional[str] = None
67
67
  """Unique identifier for this pipeline."""
@@ -82,6 +82,9 @@ class CreatePipeline:
82
82
  photon: Optional[bool] = None
83
83
  """Whether Photon is enabled for this pipeline."""
84
84
 
85
+ restart_window: Optional[RestartWindow] = None
86
+ """Restart window of this pipeline."""
87
+
85
88
  schema: Optional[str] = None
86
89
  """The default schema (database) where tables are read from or published to. The presence of this
87
90
  field implies that the pipeline is in direct publishing mode."""
@@ -122,6 +125,7 @@ class CreatePipeline:
122
125
  if self.name is not None: body['name'] = self.name
123
126
  if self.notifications: body['notifications'] = [v.as_dict() for v in self.notifications]
124
127
  if self.photon is not None: body['photon'] = self.photon
128
+ if self.restart_window: body['restart_window'] = self.restart_window.as_dict()
125
129
  if self.schema is not None: body['schema'] = self.schema
126
130
  if self.serverless is not None: body['serverless'] = self.serverless
127
131
  if self.storage is not None: body['storage'] = self.storage
@@ -129,6 +133,36 @@ class CreatePipeline:
129
133
  if self.trigger: body['trigger'] = self.trigger.as_dict()
130
134
  return body
131
135
 
136
+ def as_shallow_dict(self) -> dict:
137
+ """Serializes the CreatePipeline into a shallow dictionary of its immediate attributes."""
138
+ body = {}
139
+ if self.allow_duplicate_names is not None: body['allow_duplicate_names'] = self.allow_duplicate_names
140
+ if self.budget_policy_id is not None: body['budget_policy_id'] = self.budget_policy_id
141
+ if self.catalog is not None: body['catalog'] = self.catalog
142
+ if self.channel is not None: body['channel'] = self.channel
143
+ if self.clusters: body['clusters'] = self.clusters
144
+ if self.configuration: body['configuration'] = self.configuration
145
+ if self.continuous is not None: body['continuous'] = self.continuous
146
+ if self.deployment: body['deployment'] = self.deployment
147
+ if self.development is not None: body['development'] = self.development
148
+ if self.dry_run is not None: body['dry_run'] = self.dry_run
149
+ if self.edition is not None: body['edition'] = self.edition
150
+ if self.filters: body['filters'] = self.filters
151
+ if self.gateway_definition: body['gateway_definition'] = self.gateway_definition
152
+ if self.id is not None: body['id'] = self.id
153
+ if self.ingestion_definition: body['ingestion_definition'] = self.ingestion_definition
154
+ if self.libraries: body['libraries'] = self.libraries
155
+ if self.name is not None: body['name'] = self.name
156
+ if self.notifications: body['notifications'] = self.notifications
157
+ if self.photon is not None: body['photon'] = self.photon
158
+ if self.restart_window: body['restart_window'] = self.restart_window
159
+ if self.schema is not None: body['schema'] = self.schema
160
+ if self.serverless is not None: body['serverless'] = self.serverless
161
+ if self.storage is not None: body['storage'] = self.storage
162
+ if self.target is not None: body['target'] = self.target
163
+ if self.trigger: body['trigger'] = self.trigger
164
+ return body
165
+
132
166
  @classmethod
133
167
  def from_dict(cls, d: Dict[str, any]) -> CreatePipeline:
134
168
  """Deserializes the CreatePipeline from a dictionary."""
@@ -151,6 +185,7 @@ class CreatePipeline:
151
185
  name=d.get('name', None),
152
186
  notifications=_repeated_dict(d, 'notifications', Notifications),
153
187
  photon=d.get('photon', None),
188
+ restart_window=_from_dict(d, 'restart_window', RestartWindow),
154
189
  schema=d.get('schema', None),
155
190
  serverless=d.get('serverless', None),
156
191
  storage=d.get('storage', None),
@@ -173,6 +208,13 @@ class CreatePipelineResponse:
173
208
  if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
174
209
  return body
175
210
 
211
+ def as_shallow_dict(self) -> dict:
212
+ """Serializes the CreatePipelineResponse into a shallow dictionary of its immediate attributes."""
213
+ body = {}
214
+ if self.effective_settings: body['effective_settings'] = self.effective_settings
215
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
216
+ return body
217
+
176
218
  @classmethod
177
219
  def from_dict(cls, d: Dict[str, any]) -> CreatePipelineResponse:
178
220
  """Deserializes the CreatePipelineResponse from a dictionary."""
@@ -193,6 +235,13 @@ class CronTrigger:
193
235
  if self.timezone_id is not None: body['timezone_id'] = self.timezone_id
194
236
  return body
195
237
 
238
+ def as_shallow_dict(self) -> dict:
239
+ """Serializes the CronTrigger into a shallow dictionary of its immediate attributes."""
240
+ body = {}
241
+ if self.quartz_cron_schedule is not None: body['quartz_cron_schedule'] = self.quartz_cron_schedule
242
+ if self.timezone_id is not None: body['timezone_id'] = self.timezone_id
243
+ return body
244
+
196
245
  @classmethod
197
246
  def from_dict(cls, d: Dict[str, any]) -> CronTrigger:
198
247
  """Deserializes the CronTrigger from a dictionary."""
@@ -215,6 +264,13 @@ class DataPlaneId:
215
264
  if self.seq_no is not None: body['seq_no'] = self.seq_no
216
265
  return body
217
266
 
267
+ def as_shallow_dict(self) -> dict:
268
+ """Serializes the DataPlaneId into a shallow dictionary of its immediate attributes."""
269
+ body = {}
270
+ if self.instance is not None: body['instance'] = self.instance
271
+ if self.seq_no is not None: body['seq_no'] = self.seq_no
272
+ return body
273
+
218
274
  @classmethod
219
275
  def from_dict(cls, d: Dict[str, any]) -> DataPlaneId:
220
276
  """Deserializes the DataPlaneId from a dictionary."""
@@ -229,6 +285,11 @@ class DeletePipelineResponse:
229
285
  body = {}
230
286
  return body
231
287
 
288
+ def as_shallow_dict(self) -> dict:
289
+ """Serializes the DeletePipelineResponse into a shallow dictionary of its immediate attributes."""
290
+ body = {}
291
+ return body
292
+
232
293
  @classmethod
233
294
  def from_dict(cls, d: Dict[str, any]) -> DeletePipelineResponse:
234
295
  """Deserializes the DeletePipelineResponse from a dictionary."""
@@ -285,7 +346,7 @@ class EditPipeline:
285
346
  """Filters on which Pipeline packages to include in the deployed graph."""
286
347
 
287
348
  gateway_definition: Optional[IngestionGatewayPipelineDefinition] = None
288
- """The definition of a gateway pipeline to support CDC."""
349
+ """The definition of a gateway pipeline to support change data capture."""
289
350
 
290
351
  id: Optional[str] = None
291
352
  """Unique identifier for this pipeline."""
@@ -309,6 +370,9 @@ class EditPipeline:
309
370
  pipeline_id: Optional[str] = None
310
371
  """Unique identifier for this pipeline."""
311
372
 
373
+ restart_window: Optional[RestartWindow] = None
374
+ """Restart window of this pipeline."""
375
+
312
376
  schema: Optional[str] = None
313
377
  """The default schema (database) where tables are read from or published to. The presence of this
314
378
  field implies that the pipeline is in direct publishing mode."""
@@ -351,6 +415,7 @@ class EditPipeline:
351
415
  if self.notifications: body['notifications'] = [v.as_dict() for v in self.notifications]
352
416
  if self.photon is not None: body['photon'] = self.photon
353
417
  if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
418
+ if self.restart_window: body['restart_window'] = self.restart_window.as_dict()
354
419
  if self.schema is not None: body['schema'] = self.schema
355
420
  if self.serverless is not None: body['serverless'] = self.serverless
356
421
  if self.storage is not None: body['storage'] = self.storage
@@ -358,6 +423,38 @@ class EditPipeline:
358
423
  if self.trigger: body['trigger'] = self.trigger.as_dict()
359
424
  return body
360
425
 
426
+ def as_shallow_dict(self) -> dict:
427
+ """Serializes the EditPipeline into a shallow dictionary of its immediate attributes."""
428
+ body = {}
429
+ if self.allow_duplicate_names is not None: body['allow_duplicate_names'] = self.allow_duplicate_names
430
+ if self.budget_policy_id is not None: body['budget_policy_id'] = self.budget_policy_id
431
+ if self.catalog is not None: body['catalog'] = self.catalog
432
+ if self.channel is not None: body['channel'] = self.channel
433
+ if self.clusters: body['clusters'] = self.clusters
434
+ if self.configuration: body['configuration'] = self.configuration
435
+ if self.continuous is not None: body['continuous'] = self.continuous
436
+ if self.deployment: body['deployment'] = self.deployment
437
+ if self.development is not None: body['development'] = self.development
438
+ if self.edition is not None: body['edition'] = self.edition
439
+ if self.expected_last_modified is not None:
440
+ body['expected_last_modified'] = self.expected_last_modified
441
+ if self.filters: body['filters'] = self.filters
442
+ if self.gateway_definition: body['gateway_definition'] = self.gateway_definition
443
+ if self.id is not None: body['id'] = self.id
444
+ if self.ingestion_definition: body['ingestion_definition'] = self.ingestion_definition
445
+ if self.libraries: body['libraries'] = self.libraries
446
+ if self.name is not None: body['name'] = self.name
447
+ if self.notifications: body['notifications'] = self.notifications
448
+ if self.photon is not None: body['photon'] = self.photon
449
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
450
+ if self.restart_window: body['restart_window'] = self.restart_window
451
+ if self.schema is not None: body['schema'] = self.schema
452
+ if self.serverless is not None: body['serverless'] = self.serverless
453
+ if self.storage is not None: body['storage'] = self.storage
454
+ if self.target is not None: body['target'] = self.target
455
+ if self.trigger: body['trigger'] = self.trigger
456
+ return body
457
+
361
458
  @classmethod
362
459
  def from_dict(cls, d: Dict[str, any]) -> EditPipeline:
363
460
  """Deserializes the EditPipeline from a dictionary."""
@@ -381,6 +478,7 @@ class EditPipeline:
381
478
  notifications=_repeated_dict(d, 'notifications', Notifications),
382
479
  photon=d.get('photon', None),
383
480
  pipeline_id=d.get('pipeline_id', None),
481
+ restart_window=_from_dict(d, 'restart_window', RestartWindow),
384
482
  schema=d.get('schema', None),
385
483
  serverless=d.get('serverless', None),
386
484
  storage=d.get('storage', None),
@@ -396,6 +494,11 @@ class EditPipelineResponse:
396
494
  body = {}
397
495
  return body
398
496
 
497
+ def as_shallow_dict(self) -> dict:
498
+ """Serializes the EditPipelineResponse into a shallow dictionary of its immediate attributes."""
499
+ body = {}
500
+ return body
501
+
399
502
  @classmethod
400
503
  def from_dict(cls, d: Dict[str, any]) -> EditPipelineResponse:
401
504
  """Deserializes the EditPipelineResponse from a dictionary."""
@@ -417,6 +520,13 @@ class ErrorDetail:
417
520
  if self.fatal is not None: body['fatal'] = self.fatal
418
521
  return body
419
522
 
523
+ def as_shallow_dict(self) -> dict:
524
+ """Serializes the ErrorDetail into a shallow dictionary of its immediate attributes."""
525
+ body = {}
526
+ if self.exceptions: body['exceptions'] = self.exceptions
527
+ if self.fatal is not None: body['fatal'] = self.fatal
528
+ return body
529
+
420
530
  @classmethod
421
531
  def from_dict(cls, d: Dict[str, any]) -> ErrorDetail:
422
532
  """Deserializes the ErrorDetail from a dictionary."""
@@ -444,6 +554,12 @@ class FileLibrary:
444
554
  if self.path is not None: body['path'] = self.path
445
555
  return body
446
556
 
557
+ def as_shallow_dict(self) -> dict:
558
+ """Serializes the FileLibrary into a shallow dictionary of its immediate attributes."""
559
+ body = {}
560
+ if self.path is not None: body['path'] = self.path
561
+ return body
562
+
447
563
  @classmethod
448
564
  def from_dict(cls, d: Dict[str, any]) -> FileLibrary:
449
565
  """Deserializes the FileLibrary from a dictionary."""
@@ -465,6 +581,13 @@ class Filters:
465
581
  if self.include: body['include'] = [v for v in self.include]
466
582
  return body
467
583
 
584
+ def as_shallow_dict(self) -> dict:
585
+ """Serializes the Filters into a shallow dictionary of its immediate attributes."""
586
+ body = {}
587
+ if self.exclude: body['exclude'] = self.exclude
588
+ if self.include: body['include'] = self.include
589
+ return body
590
+
468
591
  @classmethod
469
592
  def from_dict(cls, d: Dict[str, any]) -> Filters:
470
593
  """Deserializes the Filters from a dictionary."""
@@ -482,6 +605,12 @@ class GetPipelinePermissionLevelsResponse:
482
605
  if self.permission_levels: body['permission_levels'] = [v.as_dict() for v in self.permission_levels]
483
606
  return body
484
607
 
608
+ def as_shallow_dict(self) -> dict:
609
+ """Serializes the GetPipelinePermissionLevelsResponse into a shallow dictionary of its immediate attributes."""
610
+ body = {}
611
+ if self.permission_levels: body['permission_levels'] = self.permission_levels
612
+ return body
613
+
485
614
  @classmethod
486
615
  def from_dict(cls, d: Dict[str, any]) -> GetPipelinePermissionLevelsResponse:
487
616
  """Deserializes the GetPipelinePermissionLevelsResponse from a dictionary."""
@@ -544,6 +673,24 @@ class GetPipelineResponse:
544
673
  if self.state is not None: body['state'] = self.state.value
545
674
  return body
546
675
 
676
+ def as_shallow_dict(self) -> dict:
677
+ """Serializes the GetPipelineResponse into a shallow dictionary of its immediate attributes."""
678
+ body = {}
679
+ if self.cause is not None: body['cause'] = self.cause
680
+ if self.cluster_id is not None: body['cluster_id'] = self.cluster_id
681
+ if self.creator_user_name is not None: body['creator_user_name'] = self.creator_user_name
682
+ if self.effective_budget_policy_id is not None:
683
+ body['effective_budget_policy_id'] = self.effective_budget_policy_id
684
+ if self.health is not None: body['health'] = self.health
685
+ if self.last_modified is not None: body['last_modified'] = self.last_modified
686
+ if self.latest_updates: body['latest_updates'] = self.latest_updates
687
+ if self.name is not None: body['name'] = self.name
688
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
689
+ if self.run_as_user_name is not None: body['run_as_user_name'] = self.run_as_user_name
690
+ if self.spec: body['spec'] = self.spec
691
+ if self.state is not None: body['state'] = self.state
692
+ return body
693
+
547
694
  @classmethod
548
695
  def from_dict(cls, d: Dict[str, any]) -> GetPipelineResponse:
549
696
  """Deserializes the GetPipelineResponse from a dictionary."""
@@ -579,6 +726,12 @@ class GetUpdateResponse:
579
726
  if self.update: body['update'] = self.update.as_dict()
580
727
  return body
581
728
 
729
+ def as_shallow_dict(self) -> dict:
730
+ """Serializes the GetUpdateResponse into a shallow dictionary of its immediate attributes."""
731
+ body = {}
732
+ if self.update: body['update'] = self.update
733
+ return body
734
+
582
735
  @classmethod
583
736
  def from_dict(cls, d: Dict[str, any]) -> GetUpdateResponse:
584
737
  """Deserializes the GetUpdateResponse from a dictionary."""
@@ -588,13 +741,13 @@ class GetUpdateResponse:
588
741
  @dataclass
589
742
  class IngestionConfig:
590
743
  report: Optional[ReportSpec] = None
591
- """Select tables from a specific source report."""
744
+ """Select a specific source report."""
592
745
 
593
746
  schema: Optional[SchemaSpec] = None
594
- """Select tables from a specific source schema."""
747
+ """Select all tables from a specific source schema."""
595
748
 
596
749
  table: Optional[TableSpec] = None
597
- """Select tables from a specific source table."""
750
+ """Select a specific source table."""
598
751
 
599
752
  def as_dict(self) -> dict:
600
753
  """Serializes the IngestionConfig into a dictionary suitable for use as a JSON request body."""
@@ -604,6 +757,14 @@ class IngestionConfig:
604
757
  if self.table: body['table'] = self.table.as_dict()
605
758
  return body
606
759
 
760
+ def as_shallow_dict(self) -> dict:
761
+ """Serializes the IngestionConfig into a shallow dictionary of its immediate attributes."""
762
+ body = {}
763
+ if self.report: body['report'] = self.report
764
+ if self.schema: body['schema'] = self.schema
765
+ if self.table: body['table'] = self.table
766
+ return body
767
+
607
768
  @classmethod
608
769
  def from_dict(cls, d: Dict[str, any]) -> IngestionConfig:
609
770
  """Deserializes the IngestionConfig from a dictionary."""
@@ -615,11 +776,11 @@ class IngestionConfig:
615
776
  @dataclass
616
777
  class IngestionGatewayPipelineDefinition:
617
778
  connection_id: Optional[str] = None
618
- """[Deprecated, use connection_name instead] Immutable. The Unity Catalog connection this gateway
619
- pipeline uses to communicate with the source."""
779
+ """[Deprecated, use connection_name instead] Immutable. The Unity Catalog connection that this
780
+ gateway pipeline uses to communicate with the source."""
620
781
 
621
782
  connection_name: Optional[str] = None
622
- """Immutable. The Unity Catalog connection this gateway pipeline uses to communicate with the
783
+ """Immutable. The Unity Catalog connection that this gateway pipeline uses to communicate with the
623
784
  source."""
624
785
 
625
786
  gateway_storage_catalog: Optional[str] = None
@@ -645,6 +806,18 @@ class IngestionGatewayPipelineDefinition:
645
806
  body['gateway_storage_schema'] = self.gateway_storage_schema
646
807
  return body
647
808
 
809
+ def as_shallow_dict(self) -> dict:
810
+ """Serializes the IngestionGatewayPipelineDefinition into a shallow dictionary of its immediate attributes."""
811
+ body = {}
812
+ if self.connection_id is not None: body['connection_id'] = self.connection_id
813
+ if self.connection_name is not None: body['connection_name'] = self.connection_name
814
+ if self.gateway_storage_catalog is not None:
815
+ body['gateway_storage_catalog'] = self.gateway_storage_catalog
816
+ if self.gateway_storage_name is not None: body['gateway_storage_name'] = self.gateway_storage_name
817
+ if self.gateway_storage_schema is not None:
818
+ body['gateway_storage_schema'] = self.gateway_storage_schema
819
+ return body
820
+
648
821
  @classmethod
649
822
  def from_dict(cls, d: Dict[str, any]) -> IngestionGatewayPipelineDefinition:
650
823
  """Deserializes the IngestionGatewayPipelineDefinition from a dictionary."""
@@ -658,12 +831,12 @@ class IngestionGatewayPipelineDefinition:
658
831
  @dataclass
659
832
  class IngestionPipelineDefinition:
660
833
  connection_name: Optional[str] = None
661
- """Immutable. The Unity Catalog connection this ingestion pipeline uses to communicate with the
662
- source. Specify either ingestion_gateway_id or connection_name."""
834
+ """Immutable. The Unity Catalog connection that this ingestion pipeline uses to communicate with
835
+ the source. This is used with connectors for applications like Salesforce, Workday, and so on."""
663
836
 
664
837
  ingestion_gateway_id: Optional[str] = None
665
- """Immutable. Identifier for the ingestion gateway used by this ingestion pipeline to communicate
666
- with the source. Specify either ingestion_gateway_id or connection_name."""
838
+ """Immutable. Identifier for the gateway that is used by this ingestion pipeline to communicate
839
+ with the source database. This is used with connectors to databases like SQL Server."""
667
840
 
668
841
  objects: Optional[List[IngestionConfig]] = None
669
842
  """Required. Settings specifying tables to replicate and the destination for the replicated tables."""
@@ -681,6 +854,15 @@ class IngestionPipelineDefinition:
681
854
  if self.table_configuration: body['table_configuration'] = self.table_configuration.as_dict()
682
855
  return body
683
856
 
857
+ def as_shallow_dict(self) -> dict:
858
+ """Serializes the IngestionPipelineDefinition into a shallow dictionary of its immediate attributes."""
859
+ body = {}
860
+ if self.connection_name is not None: body['connection_name'] = self.connection_name
861
+ if self.ingestion_gateway_id is not None: body['ingestion_gateway_id'] = self.ingestion_gateway_id
862
+ if self.objects: body['objects'] = self.objects
863
+ if self.table_configuration: body['table_configuration'] = self.table_configuration
864
+ return body
865
+
684
866
  @classmethod
685
867
  def from_dict(cls, d: Dict[str, any]) -> IngestionPipelineDefinition:
686
868
  """Deserializes the IngestionPipelineDefinition from a dictionary."""
@@ -709,6 +891,14 @@ class ListPipelineEventsResponse:
709
891
  if self.prev_page_token is not None: body['prev_page_token'] = self.prev_page_token
710
892
  return body
711
893
 
894
+ def as_shallow_dict(self) -> dict:
895
+ """Serializes the ListPipelineEventsResponse into a shallow dictionary of its immediate attributes."""
896
+ body = {}
897
+ if self.events: body['events'] = self.events
898
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
899
+ if self.prev_page_token is not None: body['prev_page_token'] = self.prev_page_token
900
+ return body
901
+
712
902
  @classmethod
713
903
  def from_dict(cls, d: Dict[str, any]) -> ListPipelineEventsResponse:
714
904
  """Deserializes the ListPipelineEventsResponse from a dictionary."""
@@ -732,6 +922,13 @@ class ListPipelinesResponse:
732
922
  if self.statuses: body['statuses'] = [v.as_dict() for v in self.statuses]
733
923
  return body
734
924
 
925
+ def as_shallow_dict(self) -> dict:
926
+ """Serializes the ListPipelinesResponse into a shallow dictionary of its immediate attributes."""
927
+ body = {}
928
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
929
+ if self.statuses: body['statuses'] = self.statuses
930
+ return body
931
+
735
932
  @classmethod
736
933
  def from_dict(cls, d: Dict[str, any]) -> ListPipelinesResponse:
737
934
  """Deserializes the ListPipelinesResponse from a dictionary."""
@@ -758,6 +955,14 @@ class ListUpdatesResponse:
758
955
  if self.updates: body['updates'] = [v.as_dict() for v in self.updates]
759
956
  return body
760
957
 
958
+ def as_shallow_dict(self) -> dict:
959
+ """Serializes the ListUpdatesResponse into a shallow dictionary of its immediate attributes."""
960
+ body = {}
961
+ if self.next_page_token is not None: body['next_page_token'] = self.next_page_token
962
+ if self.prev_page_token is not None: body['prev_page_token'] = self.prev_page_token
963
+ if self.updates: body['updates'] = self.updates
964
+ return body
965
+
761
966
  @classmethod
762
967
  def from_dict(cls, d: Dict[str, any]) -> ListUpdatesResponse:
763
968
  """Deserializes the ListUpdatesResponse from a dictionary."""
@@ -774,6 +979,11 @@ class ManualTrigger:
774
979
  body = {}
775
980
  return body
776
981
 
982
+ def as_shallow_dict(self) -> dict:
983
+ """Serializes the ManualTrigger into a shallow dictionary of its immediate attributes."""
984
+ body = {}
985
+ return body
986
+
777
987
  @classmethod
778
988
  def from_dict(cls, d: Dict[str, any]) -> ManualTrigger:
779
989
  """Deserializes the ManualTrigger from a dictionary."""
@@ -799,6 +1009,12 @@ class NotebookLibrary:
799
1009
  if self.path is not None: body['path'] = self.path
800
1010
  return body
801
1011
 
1012
+ def as_shallow_dict(self) -> dict:
1013
+ """Serializes the NotebookLibrary into a shallow dictionary of its immediate attributes."""
1014
+ body = {}
1015
+ if self.path is not None: body['path'] = self.path
1016
+ return body
1017
+
802
1018
  @classmethod
803
1019
  def from_dict(cls, d: Dict[str, any]) -> NotebookLibrary:
804
1020
  """Deserializes the NotebookLibrary from a dictionary."""
@@ -825,6 +1041,13 @@ class Notifications:
825
1041
  if self.email_recipients: body['email_recipients'] = [v for v in self.email_recipients]
826
1042
  return body
827
1043
 
1044
+ def as_shallow_dict(self) -> dict:
1045
+ """Serializes the Notifications into a shallow dictionary of its immediate attributes."""
1046
+ body = {}
1047
+ if self.alerts: body['alerts'] = self.alerts
1048
+ if self.email_recipients: body['email_recipients'] = self.email_recipients
1049
+ return body
1050
+
828
1051
  @classmethod
829
1052
  def from_dict(cls, d: Dict[str, any]) -> Notifications:
830
1053
  """Deserializes the Notifications from a dictionary."""
@@ -907,6 +1130,28 @@ class Origin:
907
1130
  if self.update_id is not None: body['update_id'] = self.update_id
908
1131
  return body
909
1132
 
1133
+ def as_shallow_dict(self) -> dict:
1134
+ """Serializes the Origin into a shallow dictionary of its immediate attributes."""
1135
+ body = {}
1136
+ if self.batch_id is not None: body['batch_id'] = self.batch_id
1137
+ if self.cloud is not None: body['cloud'] = self.cloud
1138
+ if self.cluster_id is not None: body['cluster_id'] = self.cluster_id
1139
+ if self.dataset_name is not None: body['dataset_name'] = self.dataset_name
1140
+ if self.flow_id is not None: body['flow_id'] = self.flow_id
1141
+ if self.flow_name is not None: body['flow_name'] = self.flow_name
1142
+ if self.host is not None: body['host'] = self.host
1143
+ if self.maintenance_id is not None: body['maintenance_id'] = self.maintenance_id
1144
+ if self.materialization_name is not None: body['materialization_name'] = self.materialization_name
1145
+ if self.org_id is not None: body['org_id'] = self.org_id
1146
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
1147
+ if self.pipeline_name is not None: body['pipeline_name'] = self.pipeline_name
1148
+ if self.region is not None: body['region'] = self.region
1149
+ if self.request_id is not None: body['request_id'] = self.request_id
1150
+ if self.table_id is not None: body['table_id'] = self.table_id
1151
+ if self.uc_resource_id is not None: body['uc_resource_id'] = self.uc_resource_id
1152
+ if self.update_id is not None: body['update_id'] = self.update_id
1153
+ return body
1154
+
910
1155
  @classmethod
911
1156
  def from_dict(cls, d: Dict[str, any]) -> Origin:
912
1157
  """Deserializes the Origin from a dictionary."""
@@ -953,6 +1198,16 @@ class PipelineAccessControlRequest:
953
1198
  if self.user_name is not None: body['user_name'] = self.user_name
954
1199
  return body
955
1200
 
1201
+ def as_shallow_dict(self) -> dict:
1202
+ """Serializes the PipelineAccessControlRequest into a shallow dictionary of its immediate attributes."""
1203
+ body = {}
1204
+ if self.group_name is not None: body['group_name'] = self.group_name
1205
+ if self.permission_level is not None: body['permission_level'] = self.permission_level
1206
+ if self.service_principal_name is not None:
1207
+ body['service_principal_name'] = self.service_principal_name
1208
+ if self.user_name is not None: body['user_name'] = self.user_name
1209
+ return body
1210
+
956
1211
  @classmethod
957
1212
  def from_dict(cls, d: Dict[str, any]) -> PipelineAccessControlRequest:
958
1213
  """Deserializes the PipelineAccessControlRequest from a dictionary."""
@@ -990,6 +1245,17 @@ class PipelineAccessControlResponse:
990
1245
  if self.user_name is not None: body['user_name'] = self.user_name
991
1246
  return body
992
1247
 
1248
+ def as_shallow_dict(self) -> dict:
1249
+ """Serializes the PipelineAccessControlResponse into a shallow dictionary of its immediate attributes."""
1250
+ body = {}
1251
+ if self.all_permissions: body['all_permissions'] = self.all_permissions
1252
+ if self.display_name is not None: body['display_name'] = self.display_name
1253
+ if self.group_name is not None: body['group_name'] = self.group_name
1254
+ if self.service_principal_name is not None:
1255
+ body['service_principal_name'] = self.service_principal_name
1256
+ if self.user_name is not None: body['user_name'] = self.user_name
1257
+ return body
1258
+
993
1259
  @classmethod
994
1260
  def from_dict(cls, d: Dict[str, any]) -> PipelineAccessControlResponse:
995
1261
  """Deserializes the PipelineAccessControlResponse from a dictionary."""
@@ -1129,6 +1395,33 @@ class PipelineCluster:
1129
1395
  if self.ssh_public_keys: body['ssh_public_keys'] = [v for v in self.ssh_public_keys]
1130
1396
  return body
1131
1397
 
1398
+ def as_shallow_dict(self) -> dict:
1399
+ """Serializes the PipelineCluster into a shallow dictionary of its immediate attributes."""
1400
+ body = {}
1401
+ if self.apply_policy_default_values is not None:
1402
+ body['apply_policy_default_values'] = self.apply_policy_default_values
1403
+ if self.autoscale: body['autoscale'] = self.autoscale
1404
+ if self.aws_attributes: body['aws_attributes'] = self.aws_attributes
1405
+ if self.azure_attributes: body['azure_attributes'] = self.azure_attributes
1406
+ if self.cluster_log_conf: body['cluster_log_conf'] = self.cluster_log_conf
1407
+ if self.custom_tags: body['custom_tags'] = self.custom_tags
1408
+ if self.driver_instance_pool_id is not None:
1409
+ body['driver_instance_pool_id'] = self.driver_instance_pool_id
1410
+ if self.driver_node_type_id is not None: body['driver_node_type_id'] = self.driver_node_type_id
1411
+ if self.enable_local_disk_encryption is not None:
1412
+ body['enable_local_disk_encryption'] = self.enable_local_disk_encryption
1413
+ if self.gcp_attributes: body['gcp_attributes'] = self.gcp_attributes
1414
+ if self.init_scripts: body['init_scripts'] = self.init_scripts
1415
+ if self.instance_pool_id is not None: body['instance_pool_id'] = self.instance_pool_id
1416
+ if self.label is not None: body['label'] = self.label
1417
+ if self.node_type_id is not None: body['node_type_id'] = self.node_type_id
1418
+ if self.num_workers is not None: body['num_workers'] = self.num_workers
1419
+ if self.policy_id is not None: body['policy_id'] = self.policy_id
1420
+ if self.spark_conf: body['spark_conf'] = self.spark_conf
1421
+ if self.spark_env_vars: body['spark_env_vars'] = self.spark_env_vars
1422
+ if self.ssh_public_keys: body['ssh_public_keys'] = self.ssh_public_keys
1423
+ return body
1424
+
1132
1425
  @classmethod
1133
1426
  def from_dict(cls, d: Dict[str, any]) -> PipelineCluster:
1134
1427
  """Deserializes the PipelineCluster from a dictionary."""
@@ -1177,6 +1470,14 @@ class PipelineClusterAutoscale:
1177
1470
  if self.mode is not None: body['mode'] = self.mode.value
1178
1471
  return body
1179
1472
 
1473
+ def as_shallow_dict(self) -> dict:
1474
+ """Serializes the PipelineClusterAutoscale into a shallow dictionary of its immediate attributes."""
1475
+ body = {}
1476
+ if self.max_workers is not None: body['max_workers'] = self.max_workers
1477
+ if self.min_workers is not None: body['min_workers'] = self.min_workers
1478
+ if self.mode is not None: body['mode'] = self.mode
1479
+ return body
1480
+
1180
1481
  @classmethod
1181
1482
  def from_dict(cls, d: Dict[str, any]) -> PipelineClusterAutoscale:
1182
1483
  """Deserializes the PipelineClusterAutoscale from a dictionary."""
@@ -1210,6 +1511,13 @@ class PipelineDeployment:
1210
1511
  if self.metadata_file_path is not None: body['metadata_file_path'] = self.metadata_file_path
1211
1512
  return body
1212
1513
 
1514
+ def as_shallow_dict(self) -> dict:
1515
+ """Serializes the PipelineDeployment into a shallow dictionary of its immediate attributes."""
1516
+ body = {}
1517
+ if self.kind is not None: body['kind'] = self.kind
1518
+ if self.metadata_file_path is not None: body['metadata_file_path'] = self.metadata_file_path
1519
+ return body
1520
+
1213
1521
  @classmethod
1214
1522
  def from_dict(cls, d: Dict[str, any]) -> PipelineDeployment:
1215
1523
  """Deserializes the PipelineDeployment from a dictionary."""
@@ -1260,6 +1568,20 @@ class PipelineEvent:
1260
1568
  if self.timestamp is not None: body['timestamp'] = self.timestamp
1261
1569
  return body
1262
1570
 
1571
+ def as_shallow_dict(self) -> dict:
1572
+ """Serializes the PipelineEvent into a shallow dictionary of its immediate attributes."""
1573
+ body = {}
1574
+ if self.error: body['error'] = self.error
1575
+ if self.event_type is not None: body['event_type'] = self.event_type
1576
+ if self.id is not None: body['id'] = self.id
1577
+ if self.level is not None: body['level'] = self.level
1578
+ if self.maturity_level is not None: body['maturity_level'] = self.maturity_level
1579
+ if self.message is not None: body['message'] = self.message
1580
+ if self.origin: body['origin'] = self.origin
1581
+ if self.sequence: body['sequence'] = self.sequence
1582
+ if self.timestamp is not None: body['timestamp'] = self.timestamp
1583
+ return body
1584
+
1263
1585
  @classmethod
1264
1586
  def from_dict(cls, d: Dict[str, any]) -> PipelineEvent:
1265
1587
  """Deserializes the PipelineEvent from a dictionary."""
@@ -1301,6 +1623,16 @@ class PipelineLibrary:
1301
1623
  if self.whl is not None: body['whl'] = self.whl
1302
1624
  return body
1303
1625
 
1626
+ def as_shallow_dict(self) -> dict:
1627
+ """Serializes the PipelineLibrary into a shallow dictionary of its immediate attributes."""
1628
+ body = {}
1629
+ if self.file: body['file'] = self.file
1630
+ if self.jar is not None: body['jar'] = self.jar
1631
+ if self.maven: body['maven'] = self.maven
1632
+ if self.notebook: body['notebook'] = self.notebook
1633
+ if self.whl is not None: body['whl'] = self.whl
1634
+ return body
1635
+
1304
1636
  @classmethod
1305
1637
  def from_dict(cls, d: Dict[str, any]) -> PipelineLibrary:
1306
1638
  """Deserializes the PipelineLibrary from a dictionary."""
@@ -1328,6 +1660,14 @@ class PipelinePermission:
1328
1660
  if self.permission_level is not None: body['permission_level'] = self.permission_level.value
1329
1661
  return body
1330
1662
 
1663
+ def as_shallow_dict(self) -> dict:
1664
+ """Serializes the PipelinePermission into a shallow dictionary of its immediate attributes."""
1665
+ body = {}
1666
+ if self.inherited is not None: body['inherited'] = self.inherited
1667
+ if self.inherited_from_object: body['inherited_from_object'] = self.inherited_from_object
1668
+ if self.permission_level is not None: body['permission_level'] = self.permission_level
1669
+ return body
1670
+
1331
1671
  @classmethod
1332
1672
  def from_dict(cls, d: Dict[str, any]) -> PipelinePermission:
1333
1673
  """Deserializes the PipelinePermission from a dictionary."""
@@ -1362,6 +1702,14 @@ class PipelinePermissions:
1362
1702
  if self.object_type is not None: body['object_type'] = self.object_type
1363
1703
  return body
1364
1704
 
1705
+ def as_shallow_dict(self) -> dict:
1706
+ """Serializes the PipelinePermissions into a shallow dictionary of its immediate attributes."""
1707
+ body = {}
1708
+ if self.access_control_list: body['access_control_list'] = self.access_control_list
1709
+ if self.object_id is not None: body['object_id'] = self.object_id
1710
+ if self.object_type is not None: body['object_type'] = self.object_type
1711
+ return body
1712
+
1365
1713
  @classmethod
1366
1714
  def from_dict(cls, d: Dict[str, any]) -> PipelinePermissions:
1367
1715
  """Deserializes the PipelinePermissions from a dictionary."""
@@ -1385,6 +1733,13 @@ class PipelinePermissionsDescription:
1385
1733
  if self.permission_level is not None: body['permission_level'] = self.permission_level.value
1386
1734
  return body
1387
1735
 
1736
+ def as_shallow_dict(self) -> dict:
1737
+ """Serializes the PipelinePermissionsDescription into a shallow dictionary of its immediate attributes."""
1738
+ body = {}
1739
+ if self.description is not None: body['description'] = self.description
1740
+ if self.permission_level is not None: body['permission_level'] = self.permission_level
1741
+ return body
1742
+
1388
1743
  @classmethod
1389
1744
  def from_dict(cls, d: Dict[str, any]) -> PipelinePermissionsDescription:
1390
1745
  """Deserializes the PipelinePermissionsDescription from a dictionary."""
@@ -1407,6 +1762,13 @@ class PipelinePermissionsRequest:
1407
1762
  if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
1408
1763
  return body
1409
1764
 
1765
+ def as_shallow_dict(self) -> dict:
1766
+ """Serializes the PipelinePermissionsRequest into a shallow dictionary of its immediate attributes."""
1767
+ body = {}
1768
+ if self.access_control_list: body['access_control_list'] = self.access_control_list
1769
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
1770
+ return body
1771
+
1410
1772
  @classmethod
1411
1773
  def from_dict(cls, d: Dict[str, any]) -> PipelinePermissionsRequest:
1412
1774
  """Deserializes the PipelinePermissionsRequest from a dictionary."""
@@ -1450,7 +1812,7 @@ class PipelineSpec:
1450
1812
  """Filters on which Pipeline packages to include in the deployed graph."""
1451
1813
 
1452
1814
  gateway_definition: Optional[IngestionGatewayPipelineDefinition] = None
1453
- """The definition of a gateway pipeline to support CDC."""
1815
+ """The definition of a gateway pipeline to support change data capture."""
1454
1816
 
1455
1817
  id: Optional[str] = None
1456
1818
  """Unique identifier for this pipeline."""
@@ -1471,6 +1833,9 @@ class PipelineSpec:
1471
1833
  photon: Optional[bool] = None
1472
1834
  """Whether Photon is enabled for this pipeline."""
1473
1835
 
1836
+ restart_window: Optional[RestartWindow] = None
1837
+ """Restart window of this pipeline."""
1838
+
1474
1839
  schema: Optional[str] = None
1475
1840
  """The default schema (database) where tables are read from or published to. The presence of this
1476
1841
  field implies that the pipeline is in direct publishing mode."""
@@ -1509,6 +1874,7 @@ class PipelineSpec:
1509
1874
  if self.name is not None: body['name'] = self.name
1510
1875
  if self.notifications: body['notifications'] = [v.as_dict() for v in self.notifications]
1511
1876
  if self.photon is not None: body['photon'] = self.photon
1877
+ if self.restart_window: body['restart_window'] = self.restart_window.as_dict()
1512
1878
  if self.schema is not None: body['schema'] = self.schema
1513
1879
  if self.serverless is not None: body['serverless'] = self.serverless
1514
1880
  if self.storage is not None: body['storage'] = self.storage
@@ -1516,6 +1882,34 @@ class PipelineSpec:
1516
1882
  if self.trigger: body['trigger'] = self.trigger.as_dict()
1517
1883
  return body
1518
1884
 
1885
+ def as_shallow_dict(self) -> dict:
1886
+ """Serializes the PipelineSpec into a shallow dictionary of its immediate attributes."""
1887
+ body = {}
1888
+ if self.budget_policy_id is not None: body['budget_policy_id'] = self.budget_policy_id
1889
+ if self.catalog is not None: body['catalog'] = self.catalog
1890
+ if self.channel is not None: body['channel'] = self.channel
1891
+ if self.clusters: body['clusters'] = self.clusters
1892
+ if self.configuration: body['configuration'] = self.configuration
1893
+ if self.continuous is not None: body['continuous'] = self.continuous
1894
+ if self.deployment: body['deployment'] = self.deployment
1895
+ if self.development is not None: body['development'] = self.development
1896
+ if self.edition is not None: body['edition'] = self.edition
1897
+ if self.filters: body['filters'] = self.filters
1898
+ if self.gateway_definition: body['gateway_definition'] = self.gateway_definition
1899
+ if self.id is not None: body['id'] = self.id
1900
+ if self.ingestion_definition: body['ingestion_definition'] = self.ingestion_definition
1901
+ if self.libraries: body['libraries'] = self.libraries
1902
+ if self.name is not None: body['name'] = self.name
1903
+ if self.notifications: body['notifications'] = self.notifications
1904
+ if self.photon is not None: body['photon'] = self.photon
1905
+ if self.restart_window: body['restart_window'] = self.restart_window
1906
+ if self.schema is not None: body['schema'] = self.schema
1907
+ if self.serverless is not None: body['serverless'] = self.serverless
1908
+ if self.storage is not None: body['storage'] = self.storage
1909
+ if self.target is not None: body['target'] = self.target
1910
+ if self.trigger: body['trigger'] = self.trigger
1911
+ return body
1912
+
1519
1913
  @classmethod
1520
1914
  def from_dict(cls, d: Dict[str, any]) -> PipelineSpec:
1521
1915
  """Deserializes the PipelineSpec from a dictionary."""
@@ -1536,6 +1930,7 @@ class PipelineSpec:
1536
1930
  name=d.get('name', None),
1537
1931
  notifications=_repeated_dict(d, 'notifications', Notifications),
1538
1932
  photon=d.get('photon', None),
1933
+ restart_window=_from_dict(d, 'restart_window', RestartWindow),
1539
1934
  schema=d.get('schema', None),
1540
1935
  serverless=d.get('serverless', None),
1541
1936
  storage=d.get('storage', None),
@@ -1597,6 +1992,19 @@ class PipelineStateInfo:
1597
1992
  if self.state is not None: body['state'] = self.state.value
1598
1993
  return body
1599
1994
 
1995
+ def as_shallow_dict(self) -> dict:
1996
+ """Serializes the PipelineStateInfo into a shallow dictionary of its immediate attributes."""
1997
+ body = {}
1998
+ if self.cluster_id is not None: body['cluster_id'] = self.cluster_id
1999
+ if self.creator_user_name is not None: body['creator_user_name'] = self.creator_user_name
2000
+ if self.health is not None: body['health'] = self.health
2001
+ if self.latest_updates: body['latest_updates'] = self.latest_updates
2002
+ if self.name is not None: body['name'] = self.name
2003
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
2004
+ if self.run_as_user_name is not None: body['run_as_user_name'] = self.run_as_user_name
2005
+ if self.state is not None: body['state'] = self.state
2006
+ return body
2007
+
1600
2008
  @classmethod
1601
2009
  def from_dict(cls, d: Dict[str, any]) -> PipelineStateInfo:
1602
2010
  """Deserializes the PipelineStateInfo from a dictionary."""
@@ -1630,6 +2038,13 @@ class PipelineTrigger:
1630
2038
  if self.manual: body['manual'] = self.manual.as_dict()
1631
2039
  return body
1632
2040
 
2041
+ def as_shallow_dict(self) -> dict:
2042
+ """Serializes the PipelineTrigger into a shallow dictionary of its immediate attributes."""
2043
+ body = {}
2044
+ if self.cron: body['cron'] = self.cron
2045
+ if self.manual: body['manual'] = self.manual
2046
+ return body
2047
+
1633
2048
  @classmethod
1634
2049
  def from_dict(cls, d: Dict[str, any]) -> PipelineTrigger:
1635
2050
  """Deserializes the PipelineTrigger from a dictionary."""
@@ -1664,6 +2079,16 @@ class ReportSpec:
1664
2079
  if self.table_configuration: body['table_configuration'] = self.table_configuration.as_dict()
1665
2080
  return body
1666
2081
 
2082
+ def as_shallow_dict(self) -> dict:
2083
+ """Serializes the ReportSpec into a shallow dictionary of its immediate attributes."""
2084
+ body = {}
2085
+ if self.destination_catalog is not None: body['destination_catalog'] = self.destination_catalog
2086
+ if self.destination_schema is not None: body['destination_schema'] = self.destination_schema
2087
+ if self.destination_table is not None: body['destination_table'] = self.destination_table
2088
+ if self.source_url is not None: body['source_url'] = self.source_url
2089
+ if self.table_configuration: body['table_configuration'] = self.table_configuration
2090
+ return body
2091
+
1667
2092
  @classmethod
1668
2093
  def from_dict(cls, d: Dict[str, any]) -> ReportSpec:
1669
2094
  """Deserializes the ReportSpec from a dictionary."""
@@ -1674,6 +2099,58 @@ class ReportSpec:
1674
2099
  table_configuration=_from_dict(d, 'table_configuration', TableSpecificConfig))
1675
2100
 
1676
2101
 
2102
+ @dataclass
2103
+ class RestartWindow:
2104
+ start_hour: int
2105
+ """An integer between 0 and 23 denoting the start hour for the restart window in the 24-hour day.
2106
+ Continuous pipeline restart is triggered only within a five-hour window starting at this hour."""
2107
+
2108
+ days_of_week: Optional[RestartWindowDaysOfWeek] = None
2109
+ """Days of week in which the restart is allowed to happen (within a five-hour window starting at
2110
+ start_hour). If not specified all days of the week will be used."""
2111
+
2112
+ time_zone_id: Optional[str] = None
2113
+ """Time zone id of restart window. See
2114
+ https://docs.databricks.com/sql/language-manual/sql-ref-syntax-aux-conf-mgmt-set-timezone.html
2115
+ for details. If not specified, UTC will be used."""
2116
+
2117
+ def as_dict(self) -> dict:
2118
+ """Serializes the RestartWindow into a dictionary suitable for use as a JSON request body."""
2119
+ body = {}
2120
+ if self.days_of_week is not None: body['days_of_week'] = self.days_of_week.value
2121
+ if self.start_hour is not None: body['start_hour'] = self.start_hour
2122
+ if self.time_zone_id is not None: body['time_zone_id'] = self.time_zone_id
2123
+ return body
2124
+
2125
+ def as_shallow_dict(self) -> dict:
2126
+ """Serializes the RestartWindow into a shallow dictionary of its immediate attributes."""
2127
+ body = {}
2128
+ if self.days_of_week is not None: body['days_of_week'] = self.days_of_week
2129
+ if self.start_hour is not None: body['start_hour'] = self.start_hour
2130
+ if self.time_zone_id is not None: body['time_zone_id'] = self.time_zone_id
2131
+ return body
2132
+
2133
+ @classmethod
2134
+ def from_dict(cls, d: Dict[str, any]) -> RestartWindow:
2135
+ """Deserializes the RestartWindow from a dictionary."""
2136
+ return cls(days_of_week=_enum(d, 'days_of_week', RestartWindowDaysOfWeek),
2137
+ start_hour=d.get('start_hour', None),
2138
+ time_zone_id=d.get('time_zone_id', None))
2139
+
2140
+
2141
+ class RestartWindowDaysOfWeek(Enum):
2142
+ """Days of week in which the restart is allowed to happen (within a five-hour window starting at
2143
+ start_hour). If not specified all days of the week will be used."""
2144
+
2145
+ FRIDAY = 'FRIDAY'
2146
+ MONDAY = 'MONDAY'
2147
+ SATURDAY = 'SATURDAY'
2148
+ SUNDAY = 'SUNDAY'
2149
+ THURSDAY = 'THURSDAY'
2150
+ TUESDAY = 'TUESDAY'
2151
+ WEDNESDAY = 'WEDNESDAY'
2152
+
2153
+
1677
2154
  @dataclass
1678
2155
  class SchemaSpec:
1679
2156
  destination_catalog: Optional[str] = None
@@ -1705,6 +2182,16 @@ class SchemaSpec:
1705
2182
  if self.table_configuration: body['table_configuration'] = self.table_configuration.as_dict()
1706
2183
  return body
1707
2184
 
2185
+ def as_shallow_dict(self) -> dict:
2186
+ """Serializes the SchemaSpec into a shallow dictionary of its immediate attributes."""
2187
+ body = {}
2188
+ if self.destination_catalog is not None: body['destination_catalog'] = self.destination_catalog
2189
+ if self.destination_schema is not None: body['destination_schema'] = self.destination_schema
2190
+ if self.source_catalog is not None: body['source_catalog'] = self.source_catalog
2191
+ if self.source_schema is not None: body['source_schema'] = self.source_schema
2192
+ if self.table_configuration: body['table_configuration'] = self.table_configuration
2193
+ return body
2194
+
1708
2195
  @classmethod
1709
2196
  def from_dict(cls, d: Dict[str, any]) -> SchemaSpec:
1710
2197
  """Deserializes the SchemaSpec from a dictionary."""
@@ -1730,6 +2217,13 @@ class Sequencing:
1730
2217
  if self.data_plane_id: body['data_plane_id'] = self.data_plane_id.as_dict()
1731
2218
  return body
1732
2219
 
2220
+ def as_shallow_dict(self) -> dict:
2221
+ """Serializes the Sequencing into a shallow dictionary of its immediate attributes."""
2222
+ body = {}
2223
+ if self.control_plane_seq_no is not None: body['control_plane_seq_no'] = self.control_plane_seq_no
2224
+ if self.data_plane_id: body['data_plane_id'] = self.data_plane_id
2225
+ return body
2226
+
1733
2227
  @classmethod
1734
2228
  def from_dict(cls, d: Dict[str, any]) -> Sequencing:
1735
2229
  """Deserializes the Sequencing from a dictionary."""
@@ -1756,6 +2250,14 @@ class SerializedException:
1756
2250
  if self.stack: body['stack'] = [v.as_dict() for v in self.stack]
1757
2251
  return body
1758
2252
 
2253
+ def as_shallow_dict(self) -> dict:
2254
+ """Serializes the SerializedException into a shallow dictionary of its immediate attributes."""
2255
+ body = {}
2256
+ if self.class_name is not None: body['class_name'] = self.class_name
2257
+ if self.message is not None: body['message'] = self.message
2258
+ if self.stack: body['stack'] = self.stack
2259
+ return body
2260
+
1759
2261
  @classmethod
1760
2262
  def from_dict(cls, d: Dict[str, any]) -> SerializedException:
1761
2263
  """Deserializes the SerializedException from a dictionary."""
@@ -1787,6 +2289,15 @@ class StackFrame:
1787
2289
  if self.method_name is not None: body['method_name'] = self.method_name
1788
2290
  return body
1789
2291
 
2292
+ def as_shallow_dict(self) -> dict:
2293
+ """Serializes the StackFrame into a shallow dictionary of its immediate attributes."""
2294
+ body = {}
2295
+ if self.declaring_class is not None: body['declaring_class'] = self.declaring_class
2296
+ if self.file_name is not None: body['file_name'] = self.file_name
2297
+ if self.line_number is not None: body['line_number'] = self.line_number
2298
+ if self.method_name is not None: body['method_name'] = self.method_name
2299
+ return body
2300
+
1790
2301
  @classmethod
1791
2302
  def from_dict(cls, d: Dict[str, any]) -> StackFrame:
1792
2303
  """Deserializes the StackFrame from a dictionary."""
@@ -1831,6 +2342,17 @@ class StartUpdate:
1831
2342
  if self.validate_only is not None: body['validate_only'] = self.validate_only
1832
2343
  return body
1833
2344
 
2345
+ def as_shallow_dict(self) -> dict:
2346
+ """Serializes the StartUpdate into a shallow dictionary of its immediate attributes."""
2347
+ body = {}
2348
+ if self.cause is not None: body['cause'] = self.cause
2349
+ if self.full_refresh is not None: body['full_refresh'] = self.full_refresh
2350
+ if self.full_refresh_selection: body['full_refresh_selection'] = self.full_refresh_selection
2351
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
2352
+ if self.refresh_selection: body['refresh_selection'] = self.refresh_selection
2353
+ if self.validate_only is not None: body['validate_only'] = self.validate_only
2354
+ return body
2355
+
1834
2356
  @classmethod
1835
2357
  def from_dict(cls, d: Dict[str, any]) -> StartUpdate:
1836
2358
  """Deserializes the StartUpdate from a dictionary."""
@@ -1862,6 +2384,12 @@ class StartUpdateResponse:
1862
2384
  if self.update_id is not None: body['update_id'] = self.update_id
1863
2385
  return body
1864
2386
 
2387
+ def as_shallow_dict(self) -> dict:
2388
+ """Serializes the StartUpdateResponse into a shallow dictionary of its immediate attributes."""
2389
+ body = {}
2390
+ if self.update_id is not None: body['update_id'] = self.update_id
2391
+ return body
2392
+
1865
2393
  @classmethod
1866
2394
  def from_dict(cls, d: Dict[str, any]) -> StartUpdateResponse:
1867
2395
  """Deserializes the StartUpdateResponse from a dictionary."""
@@ -1876,6 +2404,11 @@ class StopPipelineResponse:
1876
2404
  body = {}
1877
2405
  return body
1878
2406
 
2407
+ def as_shallow_dict(self) -> dict:
2408
+ """Serializes the StopPipelineResponse into a shallow dictionary of its immediate attributes."""
2409
+ body = {}
2410
+ return body
2411
+
1879
2412
  @classmethod
1880
2413
  def from_dict(cls, d: Dict[str, any]) -> StopPipelineResponse:
1881
2414
  """Deserializes the StopPipelineResponse from a dictionary."""
@@ -1919,6 +2452,18 @@ class TableSpec:
1919
2452
  if self.table_configuration: body['table_configuration'] = self.table_configuration.as_dict()
1920
2453
  return body
1921
2454
 
2455
+ def as_shallow_dict(self) -> dict:
2456
+ """Serializes the TableSpec into a shallow dictionary of its immediate attributes."""
2457
+ body = {}
2458
+ if self.destination_catalog is not None: body['destination_catalog'] = self.destination_catalog
2459
+ if self.destination_schema is not None: body['destination_schema'] = self.destination_schema
2460
+ if self.destination_table is not None: body['destination_table'] = self.destination_table
2461
+ if self.source_catalog is not None: body['source_catalog'] = self.source_catalog
2462
+ if self.source_schema is not None: body['source_schema'] = self.source_schema
2463
+ if self.source_table is not None: body['source_table'] = self.source_table
2464
+ if self.table_configuration: body['table_configuration'] = self.table_configuration
2465
+ return body
2466
+
1922
2467
  @classmethod
1923
2468
  def from_dict(cls, d: Dict[str, any]) -> TableSpec:
1924
2469
  """Deserializes the TableSpec from a dictionary."""
@@ -1957,6 +2502,16 @@ class TableSpecificConfig:
1957
2502
  if self.sequence_by: body['sequence_by'] = [v for v in self.sequence_by]
1958
2503
  return body
1959
2504
 
2505
+ def as_shallow_dict(self) -> dict:
2506
+ """Serializes the TableSpecificConfig into a shallow dictionary of its immediate attributes."""
2507
+ body = {}
2508
+ if self.primary_keys: body['primary_keys'] = self.primary_keys
2509
+ if self.salesforce_include_formula_fields is not None:
2510
+ body['salesforce_include_formula_fields'] = self.salesforce_include_formula_fields
2511
+ if self.scd_type is not None: body['scd_type'] = self.scd_type
2512
+ if self.sequence_by: body['sequence_by'] = self.sequence_by
2513
+ return body
2514
+
1960
2515
  @classmethod
1961
2516
  def from_dict(cls, d: Dict[str, any]) -> TableSpecificConfig:
1962
2517
  """Deserializes the TableSpecificConfig from a dictionary."""
@@ -2031,6 +2586,22 @@ class UpdateInfo:
2031
2586
  if self.validate_only is not None: body['validate_only'] = self.validate_only
2032
2587
  return body
2033
2588
 
2589
+ def as_shallow_dict(self) -> dict:
2590
+ """Serializes the UpdateInfo into a shallow dictionary of its immediate attributes."""
2591
+ body = {}
2592
+ if self.cause is not None: body['cause'] = self.cause
2593
+ if self.cluster_id is not None: body['cluster_id'] = self.cluster_id
2594
+ if self.config: body['config'] = self.config
2595
+ if self.creation_time is not None: body['creation_time'] = self.creation_time
2596
+ if self.full_refresh is not None: body['full_refresh'] = self.full_refresh
2597
+ if self.full_refresh_selection: body['full_refresh_selection'] = self.full_refresh_selection
2598
+ if self.pipeline_id is not None: body['pipeline_id'] = self.pipeline_id
2599
+ if self.refresh_selection: body['refresh_selection'] = self.refresh_selection
2600
+ if self.state is not None: body['state'] = self.state
2601
+ if self.update_id is not None: body['update_id'] = self.update_id
2602
+ if self.validate_only is not None: body['validate_only'] = self.validate_only
2603
+ return body
2604
+
2034
2605
  @classmethod
2035
2606
  def from_dict(cls, d: Dict[str, any]) -> UpdateInfo:
2036
2607
  """Deserializes the UpdateInfo from a dictionary."""
@@ -2090,6 +2661,14 @@ class UpdateStateInfo:
2090
2661
  if self.update_id is not None: body['update_id'] = self.update_id
2091
2662
  return body
2092
2663
 
2664
+ def as_shallow_dict(self) -> dict:
2665
+ """Serializes the UpdateStateInfo into a shallow dictionary of its immediate attributes."""
2666
+ body = {}
2667
+ if self.creation_time is not None: body['creation_time'] = self.creation_time
2668
+ if self.state is not None: body['state'] = self.state
2669
+ if self.update_id is not None: body['update_id'] = self.update_id
2670
+ return body
2671
+
2093
2672
  @classmethod
2094
2673
  def from_dict(cls, d: Dict[str, any]) -> UpdateStateInfo:
2095
2674
  """Deserializes the UpdateStateInfo from a dictionary."""
@@ -2211,6 +2790,7 @@ class PipelinesAPI:
2211
2790
  name: Optional[str] = None,
2212
2791
  notifications: Optional[List[Notifications]] = None,
2213
2792
  photon: Optional[bool] = None,
2793
+ restart_window: Optional[RestartWindow] = None,
2214
2794
  schema: Optional[str] = None,
2215
2795
  serverless: Optional[bool] = None,
2216
2796
  storage: Optional[str] = None,
@@ -2247,7 +2827,7 @@ class PipelinesAPI:
2247
2827
  :param filters: :class:`Filters` (optional)
2248
2828
  Filters on which Pipeline packages to include in the deployed graph.
2249
2829
  :param gateway_definition: :class:`IngestionGatewayPipelineDefinition` (optional)
2250
- The definition of a gateway pipeline to support CDC.
2830
+ The definition of a gateway pipeline to support change data capture.
2251
2831
  :param id: str (optional)
2252
2832
  Unique identifier for this pipeline.
2253
2833
  :param ingestion_definition: :class:`IngestionPipelineDefinition` (optional)
@@ -2261,6 +2841,8 @@ class PipelinesAPI:
2261
2841
  List of notification settings for this pipeline.
2262
2842
  :param photon: bool (optional)
2263
2843
  Whether Photon is enabled for this pipeline.
2844
+ :param restart_window: :class:`RestartWindow` (optional)
2845
+ Restart window of this pipeline.
2264
2846
  :param schema: str (optional)
2265
2847
  The default schema (database) where tables are read from or published to. The presence of this field
2266
2848
  implies that the pipeline is in direct publishing mode.
@@ -2296,6 +2878,7 @@ class PipelinesAPI:
2296
2878
  if name is not None: body['name'] = name
2297
2879
  if notifications is not None: body['notifications'] = [v.as_dict() for v in notifications]
2298
2880
  if photon is not None: body['photon'] = photon
2881
+ if restart_window is not None: body['restart_window'] = restart_window.as_dict()
2299
2882
  if schema is not None: body['schema'] = schema
2300
2883
  if serverless is not None: body['serverless'] = serverless
2301
2884
  if storage is not None: body['storage'] = storage
@@ -2629,6 +3212,7 @@ class PipelinesAPI:
2629
3212
  name: Optional[str] = None,
2630
3213
  notifications: Optional[List[Notifications]] = None,
2631
3214
  photon: Optional[bool] = None,
3215
+ restart_window: Optional[RestartWindow] = None,
2632
3216
  schema: Optional[str] = None,
2633
3217
  serverless: Optional[bool] = None,
2634
3218
  storage: Optional[str] = None,
@@ -2668,7 +3252,7 @@ class PipelinesAPI:
2668
3252
  :param filters: :class:`Filters` (optional)
2669
3253
  Filters on which Pipeline packages to include in the deployed graph.
2670
3254
  :param gateway_definition: :class:`IngestionGatewayPipelineDefinition` (optional)
2671
- The definition of a gateway pipeline to support CDC.
3255
+ The definition of a gateway pipeline to support change data capture.
2672
3256
  :param id: str (optional)
2673
3257
  Unique identifier for this pipeline.
2674
3258
  :param ingestion_definition: :class:`IngestionPipelineDefinition` (optional)
@@ -2682,6 +3266,8 @@ class PipelinesAPI:
2682
3266
  List of notification settings for this pipeline.
2683
3267
  :param photon: bool (optional)
2684
3268
  Whether Photon is enabled for this pipeline.
3269
+ :param restart_window: :class:`RestartWindow` (optional)
3270
+ Restart window of this pipeline.
2685
3271
  :param schema: str (optional)
2686
3272
  The default schema (database) where tables are read from or published to. The presence of this field
2687
3273
  implies that the pipeline is in direct publishing mode.
@@ -2717,6 +3303,7 @@ class PipelinesAPI:
2717
3303
  if name is not None: body['name'] = name
2718
3304
  if notifications is not None: body['notifications'] = [v.as_dict() for v in notifications]
2719
3305
  if photon is not None: body['photon'] = photon
3306
+ if restart_window is not None: body['restart_window'] = restart_window.as_dict()
2720
3307
  if schema is not None: body['schema'] = schema
2721
3308
  if serverless is not None: body['serverless'] = serverless
2722
3309
  if storage is not None: body['storage'] = storage