databricks-sdk 0.25.1__py3-none-any.whl → 0.27.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.

@@ -43,6 +43,9 @@ class CreatePipeline:
43
43
  continuous: Optional[bool] = None
44
44
  """Whether the pipeline is continuous or triggered. This replaces `trigger`."""
45
45
 
46
+ deployment: Optional[PipelineDeployment] = None
47
+ """Deployment type of this pipeline."""
48
+
46
49
  development: Optional[bool] = None
47
50
  """Whether the pipeline is in Development mode. Defaults to false."""
48
51
 
@@ -57,6 +60,10 @@ class CreatePipeline:
57
60
  id: Optional[str] = None
58
61
  """Unique identifier for this pipeline."""
59
62
 
63
+ ingestion_definition: Optional[ManagedIngestionPipelineDefinition] = None
64
+ """The configuration for a managed ingestion pipeline. These settings cannot be used with the
65
+ 'libraries', 'target' or 'catalog' settings."""
66
+
60
67
  libraries: Optional[List[PipelineLibrary]] = None
61
68
  """Libraries or code needed by this deployment."""
62
69
 
@@ -92,11 +99,13 @@ class CreatePipeline:
92
99
  if self.clusters: body['clusters'] = [v.as_dict() for v in self.clusters]
93
100
  if self.configuration: body['configuration'] = self.configuration
94
101
  if self.continuous is not None: body['continuous'] = self.continuous
102
+ if self.deployment: body['deployment'] = self.deployment.as_dict()
95
103
  if self.development is not None: body['development'] = self.development
96
104
  if self.dry_run is not None: body['dry_run'] = self.dry_run
97
105
  if self.edition is not None: body['edition'] = self.edition
98
106
  if self.filters: body['filters'] = self.filters.as_dict()
99
107
  if self.id is not None: body['id'] = self.id
108
+ if self.ingestion_definition: body['ingestion_definition'] = self.ingestion_definition.as_dict()
100
109
  if self.libraries: body['libraries'] = [v.as_dict() for v in self.libraries]
101
110
  if self.name is not None: body['name'] = self.name
102
111
  if self.notifications: body['notifications'] = [v.as_dict() for v in self.notifications]
@@ -116,11 +125,14 @@ class CreatePipeline:
116
125
  clusters=_repeated_dict(d, 'clusters', PipelineCluster),
117
126
  configuration=d.get('configuration', None),
118
127
  continuous=d.get('continuous', None),
128
+ deployment=_from_dict(d, 'deployment', PipelineDeployment),
119
129
  development=d.get('development', None),
120
130
  dry_run=d.get('dry_run', None),
121
131
  edition=d.get('edition', None),
122
132
  filters=_from_dict(d, 'filters', Filters),
123
133
  id=d.get('id', None),
134
+ ingestion_definition=_from_dict(d, 'ingestion_definition',
135
+ ManagedIngestionPipelineDefinition),
124
136
  libraries=_repeated_dict(d, 'libraries', PipelineLibrary),
125
137
  name=d.get('name', None),
126
138
  notifications=_repeated_dict(d, 'notifications', Notifications),
@@ -208,6 +220,13 @@ class DeletePipelineResponse:
208
220
  return cls()
209
221
 
210
222
 
223
+ class DeploymentKind(Enum):
224
+ """The deployment method that manages the pipeline: - BUNDLE: The pipeline is managed by a
225
+ Databricks Asset Bundle."""
226
+
227
+ BUNDLE = 'BUNDLE'
228
+
229
+
211
230
  @dataclass
212
231
  class EditPipeline:
213
232
  allow_duplicate_names: Optional[bool] = None
@@ -231,6 +250,9 @@ class EditPipeline:
231
250
  continuous: Optional[bool] = None
232
251
  """Whether the pipeline is continuous or triggered. This replaces `trigger`."""
233
252
 
253
+ deployment: Optional[PipelineDeployment] = None
254
+ """Deployment type of this pipeline."""
255
+
234
256
  development: Optional[bool] = None
235
257
  """Whether the pipeline is in Development mode. Defaults to false."""
236
258
 
@@ -247,6 +269,10 @@ class EditPipeline:
247
269
  id: Optional[str] = None
248
270
  """Unique identifier for this pipeline."""
249
271
 
272
+ ingestion_definition: Optional[ManagedIngestionPipelineDefinition] = None
273
+ """The configuration for a managed ingestion pipeline. These settings cannot be used with the
274
+ 'libraries', 'target' or 'catalog' settings."""
275
+
250
276
  libraries: Optional[List[PipelineLibrary]] = None
251
277
  """Libraries or code needed by this deployment."""
252
278
 
@@ -285,12 +311,14 @@ class EditPipeline:
285
311
  if self.clusters: body['clusters'] = [v.as_dict() for v in self.clusters]
286
312
  if self.configuration: body['configuration'] = self.configuration
287
313
  if self.continuous is not None: body['continuous'] = self.continuous
314
+ if self.deployment: body['deployment'] = self.deployment.as_dict()
288
315
  if self.development is not None: body['development'] = self.development
289
316
  if self.edition is not None: body['edition'] = self.edition
290
317
  if self.expected_last_modified is not None:
291
318
  body['expected_last_modified'] = self.expected_last_modified
292
319
  if self.filters: body['filters'] = self.filters.as_dict()
293
320
  if self.id is not None: body['id'] = self.id
321
+ if self.ingestion_definition: body['ingestion_definition'] = self.ingestion_definition.as_dict()
294
322
  if self.libraries: body['libraries'] = [v.as_dict() for v in self.libraries]
295
323
  if self.name is not None: body['name'] = self.name
296
324
  if self.notifications: body['notifications'] = [v.as_dict() for v in self.notifications]
@@ -311,11 +339,14 @@ class EditPipeline:
311
339
  clusters=_repeated_dict(d, 'clusters', PipelineCluster),
312
340
  configuration=d.get('configuration', None),
313
341
  continuous=d.get('continuous', None),
342
+ deployment=_from_dict(d, 'deployment', PipelineDeployment),
314
343
  development=d.get('development', None),
315
344
  edition=d.get('edition', None),
316
345
  expected_last_modified=d.get('expected_last_modified', None),
317
346
  filters=_from_dict(d, 'filters', Filters),
318
347
  id=d.get('id', None),
348
+ ingestion_definition=_from_dict(d, 'ingestion_definition',
349
+ ManagedIngestionPipelineDefinition),
319
350
  libraries=_repeated_dict(d, 'libraries', PipelineLibrary),
320
351
  name=d.get('name', None),
321
352
  notifications=_repeated_dict(d, 'notifications', Notifications),
@@ -518,6 +549,27 @@ class GetUpdateResponse:
518
549
  return cls(update=_from_dict(d, 'update', UpdateInfo))
519
550
 
520
551
 
552
+ @dataclass
553
+ class IngestionConfig:
554
+ schema: Optional[SchemaSpec] = None
555
+ """Select tables from a specific source schema."""
556
+
557
+ table: Optional[TableSpec] = None
558
+ """Select tables from a specific source table."""
559
+
560
+ def as_dict(self) -> dict:
561
+ """Serializes the IngestionConfig into a dictionary suitable for use as a JSON request body."""
562
+ body = {}
563
+ if self.schema: body['schema'] = self.schema.as_dict()
564
+ if self.table: body['table'] = self.table.as_dict()
565
+ return body
566
+
567
+ @classmethod
568
+ def from_dict(cls, d: Dict[str, any]) -> IngestionConfig:
569
+ """Deserializes the IngestionConfig from a dictionary."""
570
+ return cls(schema=_from_dict(d, 'schema', SchemaSpec), table=_from_dict(d, 'table', TableSpec))
571
+
572
+
521
573
  @dataclass
522
574
  class ListPipelineEventsResponse:
523
575
  events: Optional[List[PipelineEvent]] = None
@@ -594,6 +646,35 @@ class ListUpdatesResponse:
594
646
  updates=_repeated_dict(d, 'updates', UpdateInfo))
595
647
 
596
648
 
649
+ @dataclass
650
+ class ManagedIngestionPipelineDefinition:
651
+ connection_name: Optional[str] = None
652
+ """Immutable. The Unity Catalog connection this ingestion pipeline uses to communicate with the
653
+ source. Specify either ingestion_gateway_id or connection_name."""
654
+
655
+ ingestion_gateway_id: Optional[str] = None
656
+ """Immutable. Identifier for the ingestion gateway used by this ingestion pipeline to communicate
657
+ with the source. Specify either ingestion_gateway_id or connection_name."""
658
+
659
+ objects: Optional[List[IngestionConfig]] = None
660
+ """Required. Settings specifying tables to replicate and the destination for the replicated tables."""
661
+
662
+ def as_dict(self) -> dict:
663
+ """Serializes the ManagedIngestionPipelineDefinition into a dictionary suitable for use as a JSON request body."""
664
+ body = {}
665
+ if self.connection_name is not None: body['connection_name'] = self.connection_name
666
+ if self.ingestion_gateway_id is not None: body['ingestion_gateway_id'] = self.ingestion_gateway_id
667
+ if self.objects: body['objects'] = [v.as_dict() for v in self.objects]
668
+ return body
669
+
670
+ @classmethod
671
+ def from_dict(cls, d: Dict[str, any]) -> ManagedIngestionPipelineDefinition:
672
+ """Deserializes the ManagedIngestionPipelineDefinition from a dictionary."""
673
+ return cls(connection_name=d.get('connection_name', None),
674
+ ingestion_gateway_id=d.get('ingestion_gateway_id', None),
675
+ objects=_repeated_dict(d, 'objects', IngestionConfig))
676
+
677
+
597
678
  @dataclass
598
679
  class ManualTrigger:
599
680
 
@@ -1017,6 +1098,28 @@ class PipelineClusterAutoscaleMode(Enum):
1017
1098
  LEGACY = 'LEGACY'
1018
1099
 
1019
1100
 
1101
+ @dataclass
1102
+ class PipelineDeployment:
1103
+ kind: Optional[DeploymentKind] = None
1104
+ """The deployment method that manages the pipeline."""
1105
+
1106
+ metadata_file_path: Optional[str] = None
1107
+ """The path to the file containing metadata about the deployment."""
1108
+
1109
+ def as_dict(self) -> dict:
1110
+ """Serializes the PipelineDeployment into a dictionary suitable for use as a JSON request body."""
1111
+ body = {}
1112
+ if self.kind is not None: body['kind'] = self.kind.value
1113
+ if self.metadata_file_path is not None: body['metadata_file_path'] = self.metadata_file_path
1114
+ return body
1115
+
1116
+ @classmethod
1117
+ def from_dict(cls, d: Dict[str, any]) -> PipelineDeployment:
1118
+ """Deserializes the PipelineDeployment from a dictionary."""
1119
+ return cls(kind=_enum(d, 'kind', DeploymentKind),
1120
+ metadata_file_path=d.get('metadata_file_path', None))
1121
+
1122
+
1020
1123
  @dataclass
1021
1124
  class PipelineEvent:
1022
1125
  error: Optional[ErrorDetail] = None
@@ -1229,6 +1332,9 @@ class PipelineSpec:
1229
1332
  continuous: Optional[bool] = None
1230
1333
  """Whether the pipeline is continuous or triggered. This replaces `trigger`."""
1231
1334
 
1335
+ deployment: Optional[PipelineDeployment] = None
1336
+ """Deployment type of this pipeline."""
1337
+
1232
1338
  development: Optional[bool] = None
1233
1339
  """Whether the pipeline is in Development mode. Defaults to false."""
1234
1340
 
@@ -1241,6 +1347,10 @@ class PipelineSpec:
1241
1347
  id: Optional[str] = None
1242
1348
  """Unique identifier for this pipeline."""
1243
1349
 
1350
+ ingestion_definition: Optional[ManagedIngestionPipelineDefinition] = None
1351
+ """The configuration for a managed ingestion pipeline. These settings cannot be used with the
1352
+ 'libraries', 'target' or 'catalog' settings."""
1353
+
1244
1354
  libraries: Optional[List[PipelineLibrary]] = None
1245
1355
  """Libraries or code needed by this deployment."""
1246
1356
 
@@ -1275,10 +1385,12 @@ class PipelineSpec:
1275
1385
  if self.clusters: body['clusters'] = [v.as_dict() for v in self.clusters]
1276
1386
  if self.configuration: body['configuration'] = self.configuration
1277
1387
  if self.continuous is not None: body['continuous'] = self.continuous
1388
+ if self.deployment: body['deployment'] = self.deployment.as_dict()
1278
1389
  if self.development is not None: body['development'] = self.development
1279
1390
  if self.edition is not None: body['edition'] = self.edition
1280
1391
  if self.filters: body['filters'] = self.filters.as_dict()
1281
1392
  if self.id is not None: body['id'] = self.id
1393
+ if self.ingestion_definition: body['ingestion_definition'] = self.ingestion_definition.as_dict()
1282
1394
  if self.libraries: body['libraries'] = [v.as_dict() for v in self.libraries]
1283
1395
  if self.name is not None: body['name'] = self.name
1284
1396
  if self.notifications: body['notifications'] = [v.as_dict() for v in self.notifications]
@@ -1297,10 +1409,13 @@ class PipelineSpec:
1297
1409
  clusters=_repeated_dict(d, 'clusters', PipelineCluster),
1298
1410
  configuration=d.get('configuration', None),
1299
1411
  continuous=d.get('continuous', None),
1412
+ deployment=_from_dict(d, 'deployment', PipelineDeployment),
1300
1413
  development=d.get('development', None),
1301
1414
  edition=d.get('edition', None),
1302
1415
  filters=_from_dict(d, 'filters', Filters),
1303
1416
  id=d.get('id', None),
1417
+ ingestion_definition=_from_dict(d, 'ingestion_definition',
1418
+ ManagedIngestionPipelineDefinition),
1304
1419
  libraries=_repeated_dict(d, 'libraries', PipelineLibrary),
1305
1420
  name=d.get('name', None),
1306
1421
  notifications=_repeated_dict(d, 'notifications', Notifications),
@@ -1392,6 +1507,40 @@ class PipelineTrigger:
1392
1507
  return cls(cron=_from_dict(d, 'cron', CronTrigger), manual=_from_dict(d, 'manual', ManualTrigger))
1393
1508
 
1394
1509
 
1510
+ @dataclass
1511
+ class SchemaSpec:
1512
+ destination_catalog: Optional[str] = None
1513
+ """Required. Destination catalog to store tables."""
1514
+
1515
+ destination_schema: Optional[str] = None
1516
+ """Required. Destination schema to store tables in. Tables with the same name as the source tables
1517
+ are created in this destination schema. The pipeline fails If a table with the same name already
1518
+ exists."""
1519
+
1520
+ source_catalog: Optional[str] = None
1521
+ """The source catalog name. Might be optional depending on the type of source."""
1522
+
1523
+ source_schema: Optional[str] = None
1524
+ """Required. Schema name in the source database."""
1525
+
1526
+ def as_dict(self) -> dict:
1527
+ """Serializes the SchemaSpec into a dictionary suitable for use as a JSON request body."""
1528
+ body = {}
1529
+ if self.destination_catalog is not None: body['destination_catalog'] = self.destination_catalog
1530
+ if self.destination_schema is not None: body['destination_schema'] = self.destination_schema
1531
+ if self.source_catalog is not None: body['source_catalog'] = self.source_catalog
1532
+ if self.source_schema is not None: body['source_schema'] = self.source_schema
1533
+ return body
1534
+
1535
+ @classmethod
1536
+ def from_dict(cls, d: Dict[str, any]) -> SchemaSpec:
1537
+ """Deserializes the SchemaSpec from a dictionary."""
1538
+ return cls(destination_catalog=d.get('destination_catalog', None),
1539
+ destination_schema=d.get('destination_schema', None),
1540
+ source_catalog=d.get('source_catalog', None),
1541
+ source_schema=d.get('source_schema', None))
1542
+
1543
+
1395
1544
  @dataclass
1396
1545
  class Sequencing:
1397
1546
  control_plane_seq_no: Optional[int] = None
@@ -1559,6 +1708,49 @@ class StopPipelineResponse:
1559
1708
  return cls()
1560
1709
 
1561
1710
 
1711
+ @dataclass
1712
+ class TableSpec:
1713
+ destination_catalog: Optional[str] = None
1714
+ """Required. Destination catalog to store table."""
1715
+
1716
+ destination_schema: Optional[str] = None
1717
+ """Required. Destination schema to store table."""
1718
+
1719
+ destination_table: Optional[str] = None
1720
+ """Optional. Destination table name. The pipeline fails If a table with that name already exists.
1721
+ If not set, the source table name is used."""
1722
+
1723
+ source_catalog: Optional[str] = None
1724
+ """Source catalog name. Might be optional depending on the type of source."""
1725
+
1726
+ source_schema: Optional[str] = None
1727
+ """Schema name in the source database. Might be optional depending on the type of source."""
1728
+
1729
+ source_table: Optional[str] = None
1730
+ """Required. Table name in the source database."""
1731
+
1732
+ def as_dict(self) -> dict:
1733
+ """Serializes the TableSpec into a dictionary suitable for use as a JSON request body."""
1734
+ body = {}
1735
+ if self.destination_catalog is not None: body['destination_catalog'] = self.destination_catalog
1736
+ if self.destination_schema is not None: body['destination_schema'] = self.destination_schema
1737
+ if self.destination_table is not None: body['destination_table'] = self.destination_table
1738
+ if self.source_catalog is not None: body['source_catalog'] = self.source_catalog
1739
+ if self.source_schema is not None: body['source_schema'] = self.source_schema
1740
+ if self.source_table is not None: body['source_table'] = self.source_table
1741
+ return body
1742
+
1743
+ @classmethod
1744
+ def from_dict(cls, d: Dict[str, any]) -> TableSpec:
1745
+ """Deserializes the TableSpec from a dictionary."""
1746
+ return cls(destination_catalog=d.get('destination_catalog', None),
1747
+ destination_schema=d.get('destination_schema', None),
1748
+ destination_table=d.get('destination_table', None),
1749
+ source_catalog=d.get('source_catalog', None),
1750
+ source_schema=d.get('source_schema', None),
1751
+ source_table=d.get('source_table', None))
1752
+
1753
+
1562
1754
  @dataclass
1563
1755
  class UpdateInfo:
1564
1756
  cause: Optional[UpdateInfoCause] = None
@@ -1784,11 +1976,13 @@ class PipelinesAPI:
1784
1976
  clusters: Optional[List[PipelineCluster]] = None,
1785
1977
  configuration: Optional[Dict[str, str]] = None,
1786
1978
  continuous: Optional[bool] = None,
1979
+ deployment: Optional[PipelineDeployment] = None,
1787
1980
  development: Optional[bool] = None,
1788
1981
  dry_run: Optional[bool] = None,
1789
1982
  edition: Optional[str] = None,
1790
1983
  filters: Optional[Filters] = None,
1791
1984
  id: Optional[str] = None,
1985
+ ingestion_definition: Optional[ManagedIngestionPipelineDefinition] = None,
1792
1986
  libraries: Optional[List[PipelineLibrary]] = None,
1793
1987
  name: Optional[str] = None,
1794
1988
  notifications: Optional[List[Notifications]] = None,
@@ -1816,6 +2010,8 @@ class PipelinesAPI:
1816
2010
  String-String configuration for this pipeline execution.
1817
2011
  :param continuous: bool (optional)
1818
2012
  Whether the pipeline is continuous or triggered. This replaces `trigger`.
2013
+ :param deployment: :class:`PipelineDeployment` (optional)
2014
+ Deployment type of this pipeline.
1819
2015
  :param development: bool (optional)
1820
2016
  Whether the pipeline is in Development mode. Defaults to false.
1821
2017
  :param dry_run: bool (optional)
@@ -1825,6 +2021,9 @@ class PipelinesAPI:
1825
2021
  Filters on which Pipeline packages to include in the deployed graph.
1826
2022
  :param id: str (optional)
1827
2023
  Unique identifier for this pipeline.
2024
+ :param ingestion_definition: :class:`ManagedIngestionPipelineDefinition` (optional)
2025
+ The configuration for a managed ingestion pipeline. These settings cannot be used with the
2026
+ 'libraries', 'target' or 'catalog' settings.
1828
2027
  :param libraries: List[:class:`PipelineLibrary`] (optional)
1829
2028
  Libraries or code needed by this deployment.
1830
2029
  :param name: str (optional)
@@ -1852,11 +2051,13 @@ class PipelinesAPI:
1852
2051
  if clusters is not None: body['clusters'] = [v.as_dict() for v in clusters]
1853
2052
  if configuration is not None: body['configuration'] = configuration
1854
2053
  if continuous is not None: body['continuous'] = continuous
2054
+ if deployment is not None: body['deployment'] = deployment.as_dict()
1855
2055
  if development is not None: body['development'] = development
1856
2056
  if dry_run is not None: body['dry_run'] = dry_run
1857
2057
  if edition is not None: body['edition'] = edition
1858
2058
  if filters is not None: body['filters'] = filters.as_dict()
1859
2059
  if id is not None: body['id'] = id
2060
+ if ingestion_definition is not None: body['ingestion_definition'] = ingestion_definition.as_dict()
1860
2061
  if libraries is not None: body['libraries'] = [v.as_dict() for v in libraries]
1861
2062
  if name is not None: body['name'] = name
1862
2063
  if notifications is not None: body['notifications'] = [v.as_dict() for v in notifications]
@@ -2179,11 +2380,13 @@ class PipelinesAPI:
2179
2380
  clusters: Optional[List[PipelineCluster]] = None,
2180
2381
  configuration: Optional[Dict[str, str]] = None,
2181
2382
  continuous: Optional[bool] = None,
2383
+ deployment: Optional[PipelineDeployment] = None,
2182
2384
  development: Optional[bool] = None,
2183
2385
  edition: Optional[str] = None,
2184
2386
  expected_last_modified: Optional[int] = None,
2185
2387
  filters: Optional[Filters] = None,
2186
2388
  id: Optional[str] = None,
2389
+ ingestion_definition: Optional[ManagedIngestionPipelineDefinition] = None,
2187
2390
  libraries: Optional[List[PipelineLibrary]] = None,
2188
2391
  name: Optional[str] = None,
2189
2392
  notifications: Optional[List[Notifications]] = None,
@@ -2212,6 +2415,8 @@ class PipelinesAPI:
2212
2415
  String-String configuration for this pipeline execution.
2213
2416
  :param continuous: bool (optional)
2214
2417
  Whether the pipeline is continuous or triggered. This replaces `trigger`.
2418
+ :param deployment: :class:`PipelineDeployment` (optional)
2419
+ Deployment type of this pipeline.
2215
2420
  :param development: bool (optional)
2216
2421
  Whether the pipeline is in Development mode. Defaults to false.
2217
2422
  :param edition: str (optional)
@@ -2223,6 +2428,9 @@ class PipelinesAPI:
2223
2428
  Filters on which Pipeline packages to include in the deployed graph.
2224
2429
  :param id: str (optional)
2225
2430
  Unique identifier for this pipeline.
2431
+ :param ingestion_definition: :class:`ManagedIngestionPipelineDefinition` (optional)
2432
+ The configuration for a managed ingestion pipeline. These settings cannot be used with the
2433
+ 'libraries', 'target' or 'catalog' settings.
2226
2434
  :param libraries: List[:class:`PipelineLibrary`] (optional)
2227
2435
  Libraries or code needed by this deployment.
2228
2436
  :param name: str (optional)
@@ -2250,11 +2458,13 @@ class PipelinesAPI:
2250
2458
  if clusters is not None: body['clusters'] = [v.as_dict() for v in clusters]
2251
2459
  if configuration is not None: body['configuration'] = configuration
2252
2460
  if continuous is not None: body['continuous'] = continuous
2461
+ if deployment is not None: body['deployment'] = deployment.as_dict()
2253
2462
  if development is not None: body['development'] = development
2254
2463
  if edition is not None: body['edition'] = edition
2255
2464
  if expected_last_modified is not None: body['expected_last_modified'] = expected_last_modified
2256
2465
  if filters is not None: body['filters'] = filters.as_dict()
2257
2466
  if id is not None: body['id'] = id
2467
+ if ingestion_definition is not None: body['ingestion_definition'] = ingestion_definition.as_dict()
2258
2468
  if libraries is not None: body['libraries'] = [v.as_dict() for v in libraries]
2259
2469
  if name is not None: body['name'] = name
2260
2470
  if notifications is not None: body['notifications'] = [v.as_dict() for v in notifications]