databricks-sdk 0.49.0__tar.gz → 0.50.0__tar.gz
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.
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/CHANGELOG.md +31 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/PKG-INFO +1 -1
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/__init__.py +5 -3
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/billing.py +9 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/catalog.py +22 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/compute.py +20 -1
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/dashboards.py +244 -28
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/jobs.py +539 -75
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/ml.py +408 -72
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/pipelines.py +0 -32
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/serving.py +15 -12
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/settings.py +472 -4
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/sql.py +11 -0
- databricks_sdk-0.50.0/databricks/sdk/version.py +1 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks_sdk.egg-info/PKG-INFO +1 -1
- databricks_sdk-0.49.0/databricks/sdk/version.py +0 -1
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/CONTRIBUTING.md +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/DCO +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/LICENSE +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/MANIFEST.in +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/Makefile +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/NOTICE +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/README.md +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/SECURITY.md +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/__init__.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/_base_client.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/_property.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/_widgets/__init__.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/_widgets/default_widgets_utils.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/_widgets/ipywidgets_utils.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/azure.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/casing.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/clock.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/config.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/core.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/credentials_provider.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/data_plane.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/dbutils.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/environments.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/__init__.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/base.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/customizer.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/deserializer.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/details.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/mapper.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/overrides.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/parser.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/platform.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/private_link.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/errors/sdk.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/logger/__init__.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/logger/round_trip_logger.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/mixins/__init__.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/mixins/compute.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/mixins/files.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/mixins/jobs.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/mixins/open_ai_client.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/mixins/workspace.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/oauth.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/py.typed +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/retries.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/runtime/__init__.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/runtime/dbutils_stub.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/__init__.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/_internal.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/apps.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/cleanrooms.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/files.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/iam.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/marketplace.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/oauth2.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/provisioning.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/sharing.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/vectorsearch.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/service/workspace.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks/sdk/useragent.py +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks_sdk.egg-info/SOURCES.txt +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks_sdk.egg-info/dependency_links.txt +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks_sdk.egg-info/requires.txt +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/databricks_sdk.egg-info/top_level.txt +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/pyproject.toml +0 -0
- {databricks_sdk-0.49.0 → databricks_sdk-0.50.0}/setup.cfg +0 -0
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Version changelog
|
|
2
2
|
|
|
3
|
+
## Release v0.50.0
|
|
4
|
+
|
|
5
|
+
### API Changes
|
|
6
|
+
* Added [w.enable_export_notebook](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/settings/settings/enable_export_notebook.html) workspace-level service, [w.enable_notebook_table_clipboard](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/settings/settings/enable_notebook_table_clipboard.html) workspace-level service and [w.enable_results_downloading](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/settings/settings/enable_results_downloading.html) workspace-level service.
|
|
7
|
+
* Added `get_credentials_for_trace_data_download()` and `get_credentials_for_trace_data_upload()` methods for [w.experiments](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/ml/experiments.html) workspace-level service.
|
|
8
|
+
* Added `get_download_full_query_result()` method for [w.genie](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/dashboards/genie.html) workspace-level service.
|
|
9
|
+
* Added `get_published_dashboard_token_info()` method for [w.lakeview_embedded](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/dashboards/lakeview_embedded.html) workspace-level service.
|
|
10
|
+
* Added `binding_workspace_ids` field for `databricks.sdk.service.billing.BudgetPolicy`.
|
|
11
|
+
* Added `download_id` field for `databricks.sdk.service.dashboards.GenieGenerateDownloadFullQueryResultResponse`.
|
|
12
|
+
* Added `dashboard_output` field for `databricks.sdk.service.jobs.RunOutput`.
|
|
13
|
+
* Added `dashboard_task` and `power_bi_task` fields for `databricks.sdk.service.jobs.RunTask`.
|
|
14
|
+
* Added `dashboard_task` and `power_bi_task` fields for `databricks.sdk.service.jobs.SubmitTask`.
|
|
15
|
+
* Added `dashboard_task` and `power_bi_task` fields for `databricks.sdk.service.jobs.Task`.
|
|
16
|
+
* Added `include_features` field for `databricks.sdk.service.ml.CreateForecastingExperimentRequest`.
|
|
17
|
+
* Added `models` field for `databricks.sdk.service.ml.LogInputs`.
|
|
18
|
+
* Added `dataset_digest`, `dataset_name` and `model_id` fields for `databricks.sdk.service.ml.LogMetric`.
|
|
19
|
+
* Added `dataset_digest`, `dataset_name`, `model_id` and `run_id` fields for `databricks.sdk.service.ml.Metric`.
|
|
20
|
+
* Added `model_inputs` field for `databricks.sdk.service.ml.RunInputs`.
|
|
21
|
+
* Added `client_application` field for `databricks.sdk.service.sql.QueryInfo`.
|
|
22
|
+
* Added `geography` and `geometry` enum values for `databricks.sdk.service.catalog.ColumnTypeName`.
|
|
23
|
+
* Added `allocation_timeout_no_healthy_and_warmed_up_clusters`, `docker_container_creation_exception`, `docker_image_too_large_for_instance_exception` and `docker_invalid_os_exception` enum values for `databricks.sdk.service.compute.TerminationReasonCode`.
|
|
24
|
+
* Added `standard` enum value for `databricks.sdk.service.jobs.PerformanceTarget`.
|
|
25
|
+
* Added `can_view` enum value for `databricks.sdk.service.sql.WarehousePermissionLevel`.
|
|
26
|
+
* [Breaking] Changed `generate_download_full_query_result()` method for [w.genie](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/dashboards/genie.html) workspace-level service . Method path has changed.
|
|
27
|
+
* [Breaking] Changed waiter for [CommandExecutionAPI.create](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/compute/command_execution.html#databricks.sdk.service.compute.CommandExecutionAPI.create) method.
|
|
28
|
+
* [Breaking] Changed waiter for [CommandExecutionAPI.execute](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/compute/command_execution.html#databricks.sdk.service.compute.CommandExecutionAPI.execute) method.
|
|
29
|
+
* [Breaking] Removed `error`, `status` and `transient_statement_id` fields for `databricks.sdk.service.dashboards.GenieGenerateDownloadFullQueryResultResponse`.
|
|
30
|
+
* [Breaking] Removed `balanced` and `cost_optimized` enum values for `databricks.sdk.service.jobs.PerformanceTarget`.
|
|
31
|
+
* [Breaking] Removed [PipelinesAPI.wait_get_pipeline_running](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/pipelines/pipelines.html#databricks.sdk.service.pipelines.PipelinesAPI.wait_get_pipeline_running) method.
|
|
32
|
+
|
|
33
|
+
|
|
3
34
|
## Release v0.49.0
|
|
4
35
|
|
|
5
36
|
### API Changes
|
|
@@ -86,9 +86,11 @@ from databricks.sdk.service.settings import (
|
|
|
86
86
|
AibiDashboardEmbeddingApprovedDomainsAPI, AutomaticClusterUpdateAPI,
|
|
87
87
|
ComplianceSecurityProfileAPI, CredentialsManagerAPI,
|
|
88
88
|
CspEnablementAccountAPI, DefaultNamespaceAPI, DisableLegacyAccessAPI,
|
|
89
|
-
DisableLegacyDbfsAPI, DisableLegacyFeaturesAPI,
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
DisableLegacyDbfsAPI, DisableLegacyFeaturesAPI, EnableExportNotebookAPI,
|
|
90
|
+
EnableIpAccessListsAPI, EnableNotebookTableClipboardAPI,
|
|
91
|
+
EnableResultsDownloadingAPI, EnhancedSecurityMonitoringAPI,
|
|
92
|
+
EsmEnablementAccountAPI, IpAccessListsAPI, NetworkConnectivityAPI,
|
|
93
|
+
NotificationDestinationsAPI, PersonalComputeAPI,
|
|
92
94
|
RestrictWorkspaceAdminsAPI, SettingsAPI, TokenManagementAPI, TokensAPI,
|
|
93
95
|
WorkspaceConfAPI)
|
|
94
96
|
from databricks.sdk.service.sharing import (ProvidersAPI,
|
|
@@ -364,6 +364,10 @@ class BudgetConfigurationFilterWorkspaceIdClause:
|
|
|
364
364
|
class BudgetPolicy:
|
|
365
365
|
"""Contains the BudgetPolicy details."""
|
|
366
366
|
|
|
367
|
+
binding_workspace_ids: Optional[List[int]] = None
|
|
368
|
+
"""List of workspaces that this budget policy will be exclusively bound to. An empty binding
|
|
369
|
+
implies that this budget policy is open to any workspace in the account."""
|
|
370
|
+
|
|
367
371
|
custom_tags: Optional[List[compute.CustomPolicyTag]] = None
|
|
368
372
|
"""A list of tags defined by the customer. At most 20 entries are allowed per policy."""
|
|
369
373
|
|
|
@@ -378,6 +382,8 @@ class BudgetPolicy:
|
|
|
378
382
|
def as_dict(self) -> dict:
|
|
379
383
|
"""Serializes the BudgetPolicy into a dictionary suitable for use as a JSON request body."""
|
|
380
384
|
body = {}
|
|
385
|
+
if self.binding_workspace_ids:
|
|
386
|
+
body["binding_workspace_ids"] = [v for v in self.binding_workspace_ids]
|
|
381
387
|
if self.custom_tags:
|
|
382
388
|
body["custom_tags"] = [v.as_dict() for v in self.custom_tags]
|
|
383
389
|
if self.policy_id is not None:
|
|
@@ -389,6 +395,8 @@ class BudgetPolicy:
|
|
|
389
395
|
def as_shallow_dict(self) -> dict:
|
|
390
396
|
"""Serializes the BudgetPolicy into a shallow dictionary of its immediate attributes."""
|
|
391
397
|
body = {}
|
|
398
|
+
if self.binding_workspace_ids:
|
|
399
|
+
body["binding_workspace_ids"] = self.binding_workspace_ids
|
|
392
400
|
if self.custom_tags:
|
|
393
401
|
body["custom_tags"] = self.custom_tags
|
|
394
402
|
if self.policy_id is not None:
|
|
@@ -401,6 +409,7 @@ class BudgetPolicy:
|
|
|
401
409
|
def from_dict(cls, d: Dict[str, Any]) -> BudgetPolicy:
|
|
402
410
|
"""Deserializes the BudgetPolicy from a dictionary."""
|
|
403
411
|
return cls(
|
|
412
|
+
binding_workspace_ids=d.get("binding_workspace_ids", None),
|
|
404
413
|
custom_tags=_repeated_dict(d, "custom_tags", compute.CustomPolicyTag),
|
|
405
414
|
policy_id=d.get("policy_id", None),
|
|
406
415
|
policy_name=d.get("policy_name", None),
|
|
@@ -1271,6 +1271,8 @@ class ColumnTypeName(Enum):
|
|
|
1271
1271
|
DECIMAL = "DECIMAL"
|
|
1272
1272
|
DOUBLE = "DOUBLE"
|
|
1273
1273
|
FLOAT = "FLOAT"
|
|
1274
|
+
GEOGRAPHY = "GEOGRAPHY"
|
|
1275
|
+
GEOMETRY = "GEOMETRY"
|
|
1274
1276
|
INT = "INT"
|
|
1275
1277
|
INTERVAL = "INTERVAL"
|
|
1276
1278
|
LONG = "LONG"
|
|
@@ -2592,6 +2594,11 @@ class CreateVolumeRequestContent:
|
|
|
2592
2594
|
"""The name of the volume"""
|
|
2593
2595
|
|
|
2594
2596
|
volume_type: VolumeType
|
|
2597
|
+
"""The type of the volume. An external volume is located in the specified external location. A
|
|
2598
|
+
managed volume is located in the default location which is specified by the parent schema, or
|
|
2599
|
+
the parent catalog, or the Metastore. [Learn more]
|
|
2600
|
+
|
|
2601
|
+
[Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external"""
|
|
2595
2602
|
|
|
2596
2603
|
comment: Optional[str] = None
|
|
2597
2604
|
"""The comment attached to the volume"""
|
|
@@ -9835,6 +9842,11 @@ class VolumeInfo:
|
|
|
9835
9842
|
"""The unique identifier of the volume"""
|
|
9836
9843
|
|
|
9837
9844
|
volume_type: Optional[VolumeType] = None
|
|
9845
|
+
"""The type of the volume. An external volume is located in the specified external location. A
|
|
9846
|
+
managed volume is located in the default location which is specified by the parent schema, or
|
|
9847
|
+
the parent catalog, or the Metastore. [Learn more]
|
|
9848
|
+
|
|
9849
|
+
[Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external"""
|
|
9838
9850
|
|
|
9839
9851
|
def as_dict(self) -> dict:
|
|
9840
9852
|
"""Serializes the VolumeInfo into a dictionary suitable for use as a JSON request body."""
|
|
@@ -9939,6 +9951,11 @@ class VolumeInfo:
|
|
|
9939
9951
|
|
|
9940
9952
|
|
|
9941
9953
|
class VolumeType(Enum):
|
|
9954
|
+
"""The type of the volume. An external volume is located in the specified external location. A
|
|
9955
|
+
managed volume is located in the default location which is specified by the parent schema, or
|
|
9956
|
+
the parent catalog, or the Metastore. [Learn more]
|
|
9957
|
+
|
|
9958
|
+
[Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external"""
|
|
9942
9959
|
|
|
9943
9960
|
EXTERNAL = "EXTERNAL"
|
|
9944
9961
|
MANAGED = "MANAGED"
|
|
@@ -14270,6 +14287,11 @@ class VolumesAPI:
|
|
|
14270
14287
|
:param name: str
|
|
14271
14288
|
The name of the volume
|
|
14272
14289
|
:param volume_type: :class:`VolumeType`
|
|
14290
|
+
The type of the volume. An external volume is located in the specified external location. A managed
|
|
14291
|
+
volume is located in the default location which is specified by the parent schema, or the parent
|
|
14292
|
+
catalog, or the Metastore. [Learn more]
|
|
14293
|
+
|
|
14294
|
+
[Learn more]: https://docs.databricks.com/aws/en/volumes/managed-vs-external
|
|
14273
14295
|
:param comment: str (optional)
|
|
14274
14296
|
The comment attached to the volume
|
|
14275
14297
|
:param storage_location: str (optional)
|
|
@@ -4788,6 +4788,10 @@ class Environment:
|
|
|
4788
4788
|
Databricks), <vcs project url> E.g. dependencies: ["foo==0.0.1", "-r
|
|
4789
4789
|
/Workspace/test/requirements.txt"]"""
|
|
4790
4790
|
|
|
4791
|
+
jar_dependencies: Optional[List[str]] = None
|
|
4792
|
+
"""List of jar dependencies, should be string representing volume paths. For example:
|
|
4793
|
+
`/Volumes/path/to/test.jar`."""
|
|
4794
|
+
|
|
4791
4795
|
def as_dict(self) -> dict:
|
|
4792
4796
|
"""Serializes the Environment into a dictionary suitable for use as a JSON request body."""
|
|
4793
4797
|
body = {}
|
|
@@ -4795,6 +4799,8 @@ class Environment:
|
|
|
4795
4799
|
body["client"] = self.client
|
|
4796
4800
|
if self.dependencies:
|
|
4797
4801
|
body["dependencies"] = [v for v in self.dependencies]
|
|
4802
|
+
if self.jar_dependencies:
|
|
4803
|
+
body["jar_dependencies"] = [v for v in self.jar_dependencies]
|
|
4798
4804
|
return body
|
|
4799
4805
|
|
|
4800
4806
|
def as_shallow_dict(self) -> dict:
|
|
@@ -4804,12 +4810,18 @@ class Environment:
|
|
|
4804
4810
|
body["client"] = self.client
|
|
4805
4811
|
if self.dependencies:
|
|
4806
4812
|
body["dependencies"] = self.dependencies
|
|
4813
|
+
if self.jar_dependencies:
|
|
4814
|
+
body["jar_dependencies"] = self.jar_dependencies
|
|
4807
4815
|
return body
|
|
4808
4816
|
|
|
4809
4817
|
@classmethod
|
|
4810
4818
|
def from_dict(cls, d: Dict[str, Any]) -> Environment:
|
|
4811
4819
|
"""Deserializes the Environment from a dictionary."""
|
|
4812
|
-
return cls(
|
|
4820
|
+
return cls(
|
|
4821
|
+
client=d.get("client", None),
|
|
4822
|
+
dependencies=d.get("dependencies", None),
|
|
4823
|
+
jar_dependencies=d.get("jar_dependencies", None),
|
|
4824
|
+
)
|
|
4813
4825
|
|
|
4814
4826
|
|
|
4815
4827
|
@dataclass
|
|
@@ -7667,6 +7679,9 @@ class LogSyncStatus:
|
|
|
7667
7679
|
return cls(last_attempted=d.get("last_attempted", None), last_exception=d.get("last_exception", None))
|
|
7668
7680
|
|
|
7669
7681
|
|
|
7682
|
+
MapAny = Dict[str, Any]
|
|
7683
|
+
|
|
7684
|
+
|
|
7670
7685
|
@dataclass
|
|
7671
7686
|
class MavenLibrary:
|
|
7672
7687
|
coordinates: str
|
|
@@ -8937,6 +8952,7 @@ class TerminationReasonCode(Enum):
|
|
|
8937
8952
|
ACCESS_TOKEN_FAILURE = "ACCESS_TOKEN_FAILURE"
|
|
8938
8953
|
ALLOCATION_TIMEOUT = "ALLOCATION_TIMEOUT"
|
|
8939
8954
|
ALLOCATION_TIMEOUT_NODE_DAEMON_NOT_READY = "ALLOCATION_TIMEOUT_NODE_DAEMON_NOT_READY"
|
|
8955
|
+
ALLOCATION_TIMEOUT_NO_HEALTHY_AND_WARMED_UP_CLUSTERS = "ALLOCATION_TIMEOUT_NO_HEALTHY_AND_WARMED_UP_CLUSTERS"
|
|
8940
8956
|
ALLOCATION_TIMEOUT_NO_HEALTHY_CLUSTERS = "ALLOCATION_TIMEOUT_NO_HEALTHY_CLUSTERS"
|
|
8941
8957
|
ALLOCATION_TIMEOUT_NO_MATCHED_CLUSTERS = "ALLOCATION_TIMEOUT_NO_MATCHED_CLUSTERS"
|
|
8942
8958
|
ALLOCATION_TIMEOUT_NO_READY_CLUSTERS = "ALLOCATION_TIMEOUT_NO_READY_CLUSTERS"
|
|
@@ -8989,7 +9005,10 @@ class TerminationReasonCode(Enum):
|
|
|
8989
9005
|
DATA_ACCESS_CONFIG_CHANGED = "DATA_ACCESS_CONFIG_CHANGED"
|
|
8990
9006
|
DBFS_COMPONENT_UNHEALTHY = "DBFS_COMPONENT_UNHEALTHY"
|
|
8991
9007
|
DISASTER_RECOVERY_REPLICATION = "DISASTER_RECOVERY_REPLICATION"
|
|
9008
|
+
DOCKER_CONTAINER_CREATION_EXCEPTION = "DOCKER_CONTAINER_CREATION_EXCEPTION"
|
|
8992
9009
|
DOCKER_IMAGE_PULL_FAILURE = "DOCKER_IMAGE_PULL_FAILURE"
|
|
9010
|
+
DOCKER_IMAGE_TOO_LARGE_FOR_INSTANCE_EXCEPTION = "DOCKER_IMAGE_TOO_LARGE_FOR_INSTANCE_EXCEPTION"
|
|
9011
|
+
DOCKER_INVALID_OS_EXCEPTION = "DOCKER_INVALID_OS_EXCEPTION"
|
|
8993
9012
|
DRIVER_EVICTION = "DRIVER_EVICTION"
|
|
8994
9013
|
DRIVER_LAUNCH_TIMEOUT = "DRIVER_LAUNCH_TIMEOUT"
|
|
8995
9014
|
DRIVER_NODE_UNREACHABLE = "DRIVER_NODE_UNREACHABLE"
|
|
@@ -21,6 +21,87 @@ from databricks.sdk.service import sql
|
|
|
21
21
|
# all definitions in this file are in alphabetical order
|
|
22
22
|
|
|
23
23
|
|
|
24
|
+
@dataclass
|
|
25
|
+
class AuthorizationDetails:
|
|
26
|
+
grant_rules: Optional[List[AuthorizationDetailsGrantRule]] = None
|
|
27
|
+
"""Represents downscoped permission rules with specific access rights. This field is specific to
|
|
28
|
+
`workspace_rule_set` constraint."""
|
|
29
|
+
|
|
30
|
+
resource_legacy_acl_path: Optional[str] = None
|
|
31
|
+
"""The acl path of the tree store resource resource."""
|
|
32
|
+
|
|
33
|
+
resource_name: Optional[str] = None
|
|
34
|
+
"""The resource name to which the authorization rule applies. This field is specific to
|
|
35
|
+
`workspace_rule_set` constraint. Format: `workspaces/{workspace_id}/dashboards/{dashboard_id}`"""
|
|
36
|
+
|
|
37
|
+
type: Optional[str] = None
|
|
38
|
+
"""The type of authorization downscoping policy. Ex: `workspace_rule_set` defines access rules for
|
|
39
|
+
a specific workspace resource"""
|
|
40
|
+
|
|
41
|
+
def as_dict(self) -> dict:
|
|
42
|
+
"""Serializes the AuthorizationDetails into a dictionary suitable for use as a JSON request body."""
|
|
43
|
+
body = {}
|
|
44
|
+
if self.grant_rules:
|
|
45
|
+
body["grant_rules"] = [v.as_dict() for v in self.grant_rules]
|
|
46
|
+
if self.resource_legacy_acl_path is not None:
|
|
47
|
+
body["resource_legacy_acl_path"] = self.resource_legacy_acl_path
|
|
48
|
+
if self.resource_name is not None:
|
|
49
|
+
body["resource_name"] = self.resource_name
|
|
50
|
+
if self.type is not None:
|
|
51
|
+
body["type"] = self.type
|
|
52
|
+
return body
|
|
53
|
+
|
|
54
|
+
def as_shallow_dict(self) -> dict:
|
|
55
|
+
"""Serializes the AuthorizationDetails into a shallow dictionary of its immediate attributes."""
|
|
56
|
+
body = {}
|
|
57
|
+
if self.grant_rules:
|
|
58
|
+
body["grant_rules"] = self.grant_rules
|
|
59
|
+
if self.resource_legacy_acl_path is not None:
|
|
60
|
+
body["resource_legacy_acl_path"] = self.resource_legacy_acl_path
|
|
61
|
+
if self.resource_name is not None:
|
|
62
|
+
body["resource_name"] = self.resource_name
|
|
63
|
+
if self.type is not None:
|
|
64
|
+
body["type"] = self.type
|
|
65
|
+
return body
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def from_dict(cls, d: Dict[str, Any]) -> AuthorizationDetails:
|
|
69
|
+
"""Deserializes the AuthorizationDetails from a dictionary."""
|
|
70
|
+
return cls(
|
|
71
|
+
grant_rules=_repeated_dict(d, "grant_rules", AuthorizationDetailsGrantRule),
|
|
72
|
+
resource_legacy_acl_path=d.get("resource_legacy_acl_path", None),
|
|
73
|
+
resource_name=d.get("resource_name", None),
|
|
74
|
+
type=d.get("type", None),
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@dataclass
|
|
79
|
+
class AuthorizationDetailsGrantRule:
|
|
80
|
+
permission_set: Optional[str] = None
|
|
81
|
+
"""Permission sets for dashboard are defined in
|
|
82
|
+
iam-common/rbac-common/permission-sets/definitions/TreeStoreBasePermissionSets Ex:
|
|
83
|
+
`permissionSets/dashboard.runner`"""
|
|
84
|
+
|
|
85
|
+
def as_dict(self) -> dict:
|
|
86
|
+
"""Serializes the AuthorizationDetailsGrantRule into a dictionary suitable for use as a JSON request body."""
|
|
87
|
+
body = {}
|
|
88
|
+
if self.permission_set is not None:
|
|
89
|
+
body["permission_set"] = self.permission_set
|
|
90
|
+
return body
|
|
91
|
+
|
|
92
|
+
def as_shallow_dict(self) -> dict:
|
|
93
|
+
"""Serializes the AuthorizationDetailsGrantRule into a shallow dictionary of its immediate attributes."""
|
|
94
|
+
body = {}
|
|
95
|
+
if self.permission_set is not None:
|
|
96
|
+
body["permission_set"] = self.permission_set
|
|
97
|
+
return body
|
|
98
|
+
|
|
99
|
+
@classmethod
|
|
100
|
+
def from_dict(cls, d: Dict[str, Any]) -> AuthorizationDetailsGrantRule:
|
|
101
|
+
"""Deserializes the AuthorizationDetailsGrantRule from a dictionary."""
|
|
102
|
+
return cls(permission_set=d.get("permission_set", None))
|
|
103
|
+
|
|
104
|
+
|
|
24
105
|
@dataclass
|
|
25
106
|
class CancelQueryExecutionResponse:
|
|
26
107
|
status: Optional[List[CancelQueryExecutionResponseStatus]] = None
|
|
@@ -531,45 +612,53 @@ class GenieCreateConversationMessageRequest:
|
|
|
531
612
|
|
|
532
613
|
@dataclass
|
|
533
614
|
class GenieGenerateDownloadFullQueryResultResponse:
|
|
534
|
-
|
|
535
|
-
"""
|
|
536
|
-
|
|
537
|
-
status: Optional[MessageStatus] = None
|
|
538
|
-
"""Download result status"""
|
|
539
|
-
|
|
540
|
-
transient_statement_id: Optional[str] = None
|
|
541
|
-
"""Transient Statement ID. Use this ID to track the download request in subsequent polling calls"""
|
|
615
|
+
download_id: Optional[str] = None
|
|
616
|
+
"""Download ID. Use this ID to track the download request in subsequent polling calls"""
|
|
542
617
|
|
|
543
618
|
def as_dict(self) -> dict:
|
|
544
619
|
"""Serializes the GenieGenerateDownloadFullQueryResultResponse into a dictionary suitable for use as a JSON request body."""
|
|
545
620
|
body = {}
|
|
546
|
-
if self.
|
|
547
|
-
body["
|
|
548
|
-
if self.status is not None:
|
|
549
|
-
body["status"] = self.status.value
|
|
550
|
-
if self.transient_statement_id is not None:
|
|
551
|
-
body["transient_statement_id"] = self.transient_statement_id
|
|
621
|
+
if self.download_id is not None:
|
|
622
|
+
body["download_id"] = self.download_id
|
|
552
623
|
return body
|
|
553
624
|
|
|
554
625
|
def as_shallow_dict(self) -> dict:
|
|
555
626
|
"""Serializes the GenieGenerateDownloadFullQueryResultResponse into a shallow dictionary of its immediate attributes."""
|
|
556
627
|
body = {}
|
|
557
|
-
if self.
|
|
558
|
-
body["
|
|
559
|
-
if self.status is not None:
|
|
560
|
-
body["status"] = self.status
|
|
561
|
-
if self.transient_statement_id is not None:
|
|
562
|
-
body["transient_statement_id"] = self.transient_statement_id
|
|
628
|
+
if self.download_id is not None:
|
|
629
|
+
body["download_id"] = self.download_id
|
|
563
630
|
return body
|
|
564
631
|
|
|
565
632
|
@classmethod
|
|
566
633
|
def from_dict(cls, d: Dict[str, Any]) -> GenieGenerateDownloadFullQueryResultResponse:
|
|
567
634
|
"""Deserializes the GenieGenerateDownloadFullQueryResultResponse from a dictionary."""
|
|
568
|
-
return cls(
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
635
|
+
return cls(download_id=d.get("download_id", None))
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
@dataclass
|
|
639
|
+
class GenieGetDownloadFullQueryResultResponse:
|
|
640
|
+
statement_response: Optional[sql.StatementResponse] = None
|
|
641
|
+
"""SQL Statement Execution response. See [Get status, manifest, and result first
|
|
642
|
+
chunk](:method:statementexecution/getstatement) for more details."""
|
|
643
|
+
|
|
644
|
+
def as_dict(self) -> dict:
|
|
645
|
+
"""Serializes the GenieGetDownloadFullQueryResultResponse into a dictionary suitable for use as a JSON request body."""
|
|
646
|
+
body = {}
|
|
647
|
+
if self.statement_response:
|
|
648
|
+
body["statement_response"] = self.statement_response.as_dict()
|
|
649
|
+
return body
|
|
650
|
+
|
|
651
|
+
def as_shallow_dict(self) -> dict:
|
|
652
|
+
"""Serializes the GenieGetDownloadFullQueryResultResponse into a shallow dictionary of its immediate attributes."""
|
|
653
|
+
body = {}
|
|
654
|
+
if self.statement_response:
|
|
655
|
+
body["statement_response"] = self.statement_response
|
|
656
|
+
return body
|
|
657
|
+
|
|
658
|
+
@classmethod
|
|
659
|
+
def from_dict(cls, d: Dict[str, Any]) -> GenieGetDownloadFullQueryResultResponse:
|
|
660
|
+
"""Deserializes the GenieGetDownloadFullQueryResultResponse from a dictionary."""
|
|
661
|
+
return cls(statement_response=_from_dict(d, "statement_response", sql.StatementResponse))
|
|
573
662
|
|
|
574
663
|
|
|
575
664
|
@dataclass
|
|
@@ -972,6 +1061,52 @@ class GetPublishedDashboardEmbeddedResponse:
|
|
|
972
1061
|
return cls()
|
|
973
1062
|
|
|
974
1063
|
|
|
1064
|
+
@dataclass
|
|
1065
|
+
class GetPublishedDashboardTokenInfoResponse:
|
|
1066
|
+
authorization_details: Optional[List[AuthorizationDetails]] = None
|
|
1067
|
+
"""Authorization constraints for accessing the published dashboard. Currently includes
|
|
1068
|
+
`workspace_rule_set` and could be enriched with `unity_catalog_privileges` before oAuth token
|
|
1069
|
+
generation."""
|
|
1070
|
+
|
|
1071
|
+
custom_claim: Optional[str] = None
|
|
1072
|
+
"""Custom claim generated from external_value and external_viewer_id. Format:
|
|
1073
|
+
`urn:aibi:external_data:<external_value>:<external_viewer_id>:<dashboard_id>`"""
|
|
1074
|
+
|
|
1075
|
+
scope: Optional[str] = None
|
|
1076
|
+
"""Scope defining access permissions."""
|
|
1077
|
+
|
|
1078
|
+
def as_dict(self) -> dict:
|
|
1079
|
+
"""Serializes the GetPublishedDashboardTokenInfoResponse into a dictionary suitable for use as a JSON request body."""
|
|
1080
|
+
body = {}
|
|
1081
|
+
if self.authorization_details:
|
|
1082
|
+
body["authorization_details"] = [v.as_dict() for v in self.authorization_details]
|
|
1083
|
+
if self.custom_claim is not None:
|
|
1084
|
+
body["custom_claim"] = self.custom_claim
|
|
1085
|
+
if self.scope is not None:
|
|
1086
|
+
body["scope"] = self.scope
|
|
1087
|
+
return body
|
|
1088
|
+
|
|
1089
|
+
def as_shallow_dict(self) -> dict:
|
|
1090
|
+
"""Serializes the GetPublishedDashboardTokenInfoResponse into a shallow dictionary of its immediate attributes."""
|
|
1091
|
+
body = {}
|
|
1092
|
+
if self.authorization_details:
|
|
1093
|
+
body["authorization_details"] = self.authorization_details
|
|
1094
|
+
if self.custom_claim is not None:
|
|
1095
|
+
body["custom_claim"] = self.custom_claim
|
|
1096
|
+
if self.scope is not None:
|
|
1097
|
+
body["scope"] = self.scope
|
|
1098
|
+
return body
|
|
1099
|
+
|
|
1100
|
+
@classmethod
|
|
1101
|
+
def from_dict(cls, d: Dict[str, Any]) -> GetPublishedDashboardTokenInfoResponse:
|
|
1102
|
+
"""Deserializes the GetPublishedDashboardTokenInfoResponse from a dictionary."""
|
|
1103
|
+
return cls(
|
|
1104
|
+
authorization_details=_repeated_dict(d, "authorization_details", AuthorizationDetails),
|
|
1105
|
+
custom_claim=d.get("custom_claim", None),
|
|
1106
|
+
scope=d.get("scope", None),
|
|
1107
|
+
)
|
|
1108
|
+
|
|
1109
|
+
|
|
975
1110
|
class LifecycleState(Enum):
|
|
976
1111
|
|
|
977
1112
|
ACTIVE = "ACTIVE"
|
|
@@ -2037,8 +2172,12 @@ class GenieAPI:
|
|
|
2037
2172
|
) -> GenieGenerateDownloadFullQueryResultResponse:
|
|
2038
2173
|
"""Generate full query result download.
|
|
2039
2174
|
|
|
2040
|
-
Initiate full SQL query result download and obtain a
|
|
2041
|
-
This call initiates a new SQL execution to generate the query result.
|
|
2175
|
+
Initiate full SQL query result download and obtain a `download_id` to track the download progress.
|
|
2176
|
+
This call initiates a new SQL execution to generate the query result. The result is stored in an
|
|
2177
|
+
external link can be retrieved using the [Get Download Full Query
|
|
2178
|
+
Result](:method:genie/getdownloadfullqueryresult) API. Warning: Databricks strongly recommends that
|
|
2179
|
+
you protect the URLs that are returned by the `EXTERNAL_LINKS` disposition. See [Execute
|
|
2180
|
+
Statement](:method:statementexecution/executestatement) for more details.
|
|
2042
2181
|
|
|
2043
2182
|
:param space_id: str
|
|
2044
2183
|
Space ID
|
|
@@ -2058,11 +2197,52 @@ class GenieAPI:
|
|
|
2058
2197
|
|
|
2059
2198
|
res = self._api.do(
|
|
2060
2199
|
"POST",
|
|
2061
|
-
f"/api/2.0/genie/spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}/
|
|
2200
|
+
f"/api/2.0/genie/spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}/downloads",
|
|
2062
2201
|
headers=headers,
|
|
2063
2202
|
)
|
|
2064
2203
|
return GenieGenerateDownloadFullQueryResultResponse.from_dict(res)
|
|
2065
2204
|
|
|
2205
|
+
def get_download_full_query_result(
|
|
2206
|
+
self, space_id: str, conversation_id: str, message_id: str, attachment_id: str, download_id: str
|
|
2207
|
+
) -> GenieGetDownloadFullQueryResultResponse:
|
|
2208
|
+
"""Get download full query result.
|
|
2209
|
+
|
|
2210
|
+
After [Generating a Full Query Result Download](:method:genie/getdownloadfullqueryresult) and
|
|
2211
|
+
successfully receiving a `download_id`, use this API to Poll download progress and retrieve the SQL
|
|
2212
|
+
query result external link(s) upon completion. Warning: Databricks strongly recommends that you
|
|
2213
|
+
protect the URLs that are returned by the `EXTERNAL_LINKS` disposition. When you use the
|
|
2214
|
+
`EXTERNAL_LINKS` disposition, a short-lived, presigned URL is generated, which can be used to download
|
|
2215
|
+
the results directly from Amazon S3. As a short-lived access credential is embedded in this presigned
|
|
2216
|
+
URL, you should protect the URL. Because presigned URLs are already generated with embedded temporary
|
|
2217
|
+
access credentials, you must not set an Authorization header in the download requests. See [Execute
|
|
2218
|
+
Statement](:method:statementexecution/executestatement) for more details.
|
|
2219
|
+
|
|
2220
|
+
:param space_id: str
|
|
2221
|
+
Space ID
|
|
2222
|
+
:param conversation_id: str
|
|
2223
|
+
Conversation ID
|
|
2224
|
+
:param message_id: str
|
|
2225
|
+
Message ID
|
|
2226
|
+
:param attachment_id: str
|
|
2227
|
+
Attachment ID
|
|
2228
|
+
:param download_id: str
|
|
2229
|
+
Download ID. This ID is provided by the [Generate Download
|
|
2230
|
+
endpoint](:method:genie/generateDownloadFullQueryResult)
|
|
2231
|
+
|
|
2232
|
+
:returns: :class:`GenieGetDownloadFullQueryResultResponse`
|
|
2233
|
+
"""
|
|
2234
|
+
|
|
2235
|
+
headers = {
|
|
2236
|
+
"Accept": "application/json",
|
|
2237
|
+
}
|
|
2238
|
+
|
|
2239
|
+
res = self._api.do(
|
|
2240
|
+
"GET",
|
|
2241
|
+
f"/api/2.0/genie/spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}/downloads/{download_id}",
|
|
2242
|
+
headers=headers,
|
|
2243
|
+
)
|
|
2244
|
+
return GenieGetDownloadFullQueryResultResponse.from_dict(res)
|
|
2245
|
+
|
|
2066
2246
|
def get_message(self, space_id: str, conversation_id: str, message_id: str) -> GenieMessage:
|
|
2067
2247
|
"""Get conversation message.
|
|
2068
2248
|
|
|
@@ -2739,6 +2919,42 @@ class LakeviewEmbeddedAPI:
|
|
|
2739
2919
|
|
|
2740
2920
|
self._api.do("GET", f"/api/2.0/lakeview/dashboards/{dashboard_id}/published/embedded", headers=headers)
|
|
2741
2921
|
|
|
2922
|
+
def get_published_dashboard_token_info(
|
|
2923
|
+
self, dashboard_id: str, *, external_value: Optional[str] = None, external_viewer_id: Optional[str] = None
|
|
2924
|
+
) -> GetPublishedDashboardTokenInfoResponse:
|
|
2925
|
+
"""Read an information of a published dashboard to mint an OAuth token.
|
|
2926
|
+
|
|
2927
|
+
Get a required authorization details and scopes of a published dashboard to mint an OAuth token. The
|
|
2928
|
+
`authorization_details` can be enriched to apply additional restriction.
|
|
2929
|
+
|
|
2930
|
+
Example: Adding the following `authorization_details` object to downscope the viewer permission to
|
|
2931
|
+
specific table ``` { type: "unity_catalog_privileges", privileges: ["SELECT"], object_type: "TABLE",
|
|
2932
|
+
object_full_path: "main.default.testdata" } ```
|
|
2933
|
+
|
|
2934
|
+
:param dashboard_id: str
|
|
2935
|
+
UUID identifying the published dashboard.
|
|
2936
|
+
:param external_value: str (optional)
|
|
2937
|
+
Provided external value to be included in the custom claim.
|
|
2938
|
+
:param external_viewer_id: str (optional)
|
|
2939
|
+
Provided external viewer id to be included in the custom claim.
|
|
2940
|
+
|
|
2941
|
+
:returns: :class:`GetPublishedDashboardTokenInfoResponse`
|
|
2942
|
+
"""
|
|
2943
|
+
|
|
2944
|
+
query = {}
|
|
2945
|
+
if external_value is not None:
|
|
2946
|
+
query["external_value"] = external_value
|
|
2947
|
+
if external_viewer_id is not None:
|
|
2948
|
+
query["external_viewer_id"] = external_viewer_id
|
|
2949
|
+
headers = {
|
|
2950
|
+
"Accept": "application/json",
|
|
2951
|
+
}
|
|
2952
|
+
|
|
2953
|
+
res = self._api.do(
|
|
2954
|
+
"GET", f"/api/2.0/lakeview/dashboards/{dashboard_id}/published/tokeninfo", query=query, headers=headers
|
|
2955
|
+
)
|
|
2956
|
+
return GetPublishedDashboardTokenInfoResponse.from_dict(res)
|
|
2957
|
+
|
|
2742
2958
|
|
|
2743
2959
|
class QueryExecutionAPI:
|
|
2744
2960
|
"""Query execution APIs for AI / BI Dashboards"""
|