databricks-sdk 0.64.0__py3-none-any.whl → 0.66.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.
- databricks/sdk/__init__.py +89 -28
- databricks/sdk/credentials_provider.py +6 -5
- databricks/sdk/mixins/open_ai_client.py +55 -6
- databricks/sdk/mixins/sharing.py +44 -0
- databricks/sdk/service/catalog.py +12 -6
- databricks/sdk/service/cleanrooms.py +4 -3
- databricks/sdk/service/compute.py +11 -0
- databricks/sdk/service/dashboards.py +91 -19
- databricks/sdk/service/database.py +38 -32
- databricks/sdk/service/iam.py +2556 -489
- databricks/sdk/service/iamv2.py +643 -0
- databricks/sdk/service/jobs.py +43 -60
- databricks/sdk/service/ml.py +416 -24
- databricks/sdk/service/oauth2.py +3 -3
- databricks/sdk/service/pipelines.py +235 -0
- databricks/sdk/service/settings.py +69 -2
- databricks/sdk/service/settingsv2.py +13 -65
- databricks/sdk/service/sharing.py +13 -1
- databricks/sdk/service/sql.py +15 -3
- databricks/sdk/service/tags.py +25 -6
- databricks/sdk/service/vectorsearch.py +69 -3
- databricks/sdk/version.py +1 -1
- {databricks_sdk-0.64.0.dist-info → databricks_sdk-0.66.0.dist-info}/METADATA +2 -2
- {databricks_sdk-0.64.0.dist-info → databricks_sdk-0.66.0.dist-info}/RECORD +28 -26
- {databricks_sdk-0.64.0.dist-info → databricks_sdk-0.66.0.dist-info}/WHEEL +0 -0
- {databricks_sdk-0.64.0.dist-info → databricks_sdk-0.66.0.dist-info}/licenses/LICENSE +0 -0
- {databricks_sdk-0.64.0.dist-info → databricks_sdk-0.66.0.dist-info}/licenses/NOTICE +0 -0
- {databricks_sdk-0.64.0.dist-info → databricks_sdk-0.66.0.dist-info}/top_level.txt +0 -0
|
@@ -610,9 +610,16 @@ class IngestionPipelineDefinition:
|
|
|
610
610
|
"""Immutable. Identifier for the gateway that is used by this ingestion pipeline to communicate
|
|
611
611
|
with the source database. This is used with connectors to databases like SQL Server."""
|
|
612
612
|
|
|
613
|
+
netsuite_jar_path: Optional[str] = None
|
|
614
|
+
"""Netsuite only configuration. When the field is set for a netsuite connector, the jar stored in
|
|
615
|
+
the field will be validated and added to the classpath of pipeline's cluster."""
|
|
616
|
+
|
|
613
617
|
objects: Optional[List[IngestionConfig]] = None
|
|
614
618
|
"""Required. Settings specifying tables to replicate and the destination for the replicated tables."""
|
|
615
619
|
|
|
620
|
+
source_configurations: Optional[List[SourceConfig]] = None
|
|
621
|
+
"""Top-level source configurations"""
|
|
622
|
+
|
|
616
623
|
source_type: Optional[IngestionSourceType] = None
|
|
617
624
|
"""The type of the foreign source. The source type will be inferred from the source connection or
|
|
618
625
|
ingestion gateway. This field is output only and will be ignored if provided."""
|
|
@@ -628,8 +635,12 @@ class IngestionPipelineDefinition:
|
|
|
628
635
|
body["connection_name"] = self.connection_name
|
|
629
636
|
if self.ingestion_gateway_id is not None:
|
|
630
637
|
body["ingestion_gateway_id"] = self.ingestion_gateway_id
|
|
638
|
+
if self.netsuite_jar_path is not None:
|
|
639
|
+
body["netsuite_jar_path"] = self.netsuite_jar_path
|
|
631
640
|
if self.objects:
|
|
632
641
|
body["objects"] = [v.as_dict() for v in self.objects]
|
|
642
|
+
if self.source_configurations:
|
|
643
|
+
body["source_configurations"] = [v.as_dict() for v in self.source_configurations]
|
|
633
644
|
if self.source_type is not None:
|
|
634
645
|
body["source_type"] = self.source_type.value
|
|
635
646
|
if self.table_configuration:
|
|
@@ -643,8 +654,12 @@ class IngestionPipelineDefinition:
|
|
|
643
654
|
body["connection_name"] = self.connection_name
|
|
644
655
|
if self.ingestion_gateway_id is not None:
|
|
645
656
|
body["ingestion_gateway_id"] = self.ingestion_gateway_id
|
|
657
|
+
if self.netsuite_jar_path is not None:
|
|
658
|
+
body["netsuite_jar_path"] = self.netsuite_jar_path
|
|
646
659
|
if self.objects:
|
|
647
660
|
body["objects"] = self.objects
|
|
661
|
+
if self.source_configurations:
|
|
662
|
+
body["source_configurations"] = self.source_configurations
|
|
648
663
|
if self.source_type is not None:
|
|
649
664
|
body["source_type"] = self.source_type
|
|
650
665
|
if self.table_configuration:
|
|
@@ -657,7 +672,9 @@ class IngestionPipelineDefinition:
|
|
|
657
672
|
return cls(
|
|
658
673
|
connection_name=d.get("connection_name", None),
|
|
659
674
|
ingestion_gateway_id=d.get("ingestion_gateway_id", None),
|
|
675
|
+
netsuite_jar_path=d.get("netsuite_jar_path", None),
|
|
660
676
|
objects=_repeated_dict(d, "objects", IngestionConfig),
|
|
677
|
+
source_configurations=_repeated_dict(d, "source_configurations", SourceConfig),
|
|
661
678
|
source_type=_enum(d, "source_type", IngestionSourceType),
|
|
662
679
|
table_configuration=_from_dict(d, "table_configuration", TableSpecificConfig),
|
|
663
680
|
)
|
|
@@ -722,11 +739,97 @@ class IngestionPipelineDefinitionTableSpecificConfigQueryBasedConnectorConfig:
|
|
|
722
739
|
)
|
|
723
740
|
|
|
724
741
|
|
|
742
|
+
@dataclass
|
|
743
|
+
class IngestionPipelineDefinitionWorkdayReportParameters:
|
|
744
|
+
incremental: Optional[bool] = None
|
|
745
|
+
"""(Optional) Marks the report as incremental. This field is deprecated and should not be used. Use
|
|
746
|
+
`parameters` instead. The incremental behavior is now controlled by the `parameters` field."""
|
|
747
|
+
|
|
748
|
+
parameters: Optional[Dict[str, str]] = None
|
|
749
|
+
"""Parameters for the Workday report. Each key represents the parameter name (e.g., "start_date",
|
|
750
|
+
"end_date"), and the corresponding value is a SQL-like expression used to compute the parameter
|
|
751
|
+
value at runtime. Example: { "start_date": "{ coalesce(current_offset(), date(\"2025-02-01\"))
|
|
752
|
+
}", "end_date": "{ current_date() - INTERVAL 1 DAY }" }"""
|
|
753
|
+
|
|
754
|
+
report_parameters: Optional[List[IngestionPipelineDefinitionWorkdayReportParametersQueryKeyValue]] = None
|
|
755
|
+
"""(Optional) Additional custom parameters for Workday Report This field is deprecated and should
|
|
756
|
+
not be used. Use `parameters` instead."""
|
|
757
|
+
|
|
758
|
+
def as_dict(self) -> dict:
|
|
759
|
+
"""Serializes the IngestionPipelineDefinitionWorkdayReportParameters into a dictionary suitable for use as a JSON request body."""
|
|
760
|
+
body = {}
|
|
761
|
+
if self.incremental is not None:
|
|
762
|
+
body["incremental"] = self.incremental
|
|
763
|
+
if self.parameters:
|
|
764
|
+
body["parameters"] = self.parameters
|
|
765
|
+
if self.report_parameters:
|
|
766
|
+
body["report_parameters"] = [v.as_dict() for v in self.report_parameters]
|
|
767
|
+
return body
|
|
768
|
+
|
|
769
|
+
def as_shallow_dict(self) -> dict:
|
|
770
|
+
"""Serializes the IngestionPipelineDefinitionWorkdayReportParameters into a shallow dictionary of its immediate attributes."""
|
|
771
|
+
body = {}
|
|
772
|
+
if self.incremental is not None:
|
|
773
|
+
body["incremental"] = self.incremental
|
|
774
|
+
if self.parameters:
|
|
775
|
+
body["parameters"] = self.parameters
|
|
776
|
+
if self.report_parameters:
|
|
777
|
+
body["report_parameters"] = self.report_parameters
|
|
778
|
+
return body
|
|
779
|
+
|
|
780
|
+
@classmethod
|
|
781
|
+
def from_dict(cls, d: Dict[str, Any]) -> IngestionPipelineDefinitionWorkdayReportParameters:
|
|
782
|
+
"""Deserializes the IngestionPipelineDefinitionWorkdayReportParameters from a dictionary."""
|
|
783
|
+
return cls(
|
|
784
|
+
incremental=d.get("incremental", None),
|
|
785
|
+
parameters=d.get("parameters", None),
|
|
786
|
+
report_parameters=_repeated_dict(
|
|
787
|
+
d, "report_parameters", IngestionPipelineDefinitionWorkdayReportParametersQueryKeyValue
|
|
788
|
+
),
|
|
789
|
+
)
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
@dataclass
|
|
793
|
+
class IngestionPipelineDefinitionWorkdayReportParametersQueryKeyValue:
|
|
794
|
+
key: Optional[str] = None
|
|
795
|
+
"""Key for the report parameter, can be a column name or other metadata"""
|
|
796
|
+
|
|
797
|
+
value: Optional[str] = None
|
|
798
|
+
"""Value for the report parameter. Possible values it can take are these sql functions: 1.
|
|
799
|
+
coalesce(current_offset(), date("YYYY-MM-DD")) -> if current_offset() is null, then the passed
|
|
800
|
+
date, else current_offset() 2. current_date() 3. date_sub(current_date(), x) -> subtract x (some
|
|
801
|
+
non-negative integer) days from current date"""
|
|
802
|
+
|
|
803
|
+
def as_dict(self) -> dict:
|
|
804
|
+
"""Serializes the IngestionPipelineDefinitionWorkdayReportParametersQueryKeyValue into a dictionary suitable for use as a JSON request body."""
|
|
805
|
+
body = {}
|
|
806
|
+
if self.key is not None:
|
|
807
|
+
body["key"] = self.key
|
|
808
|
+
if self.value is not None:
|
|
809
|
+
body["value"] = self.value
|
|
810
|
+
return body
|
|
811
|
+
|
|
812
|
+
def as_shallow_dict(self) -> dict:
|
|
813
|
+
"""Serializes the IngestionPipelineDefinitionWorkdayReportParametersQueryKeyValue into a shallow dictionary of its immediate attributes."""
|
|
814
|
+
body = {}
|
|
815
|
+
if self.key is not None:
|
|
816
|
+
body["key"] = self.key
|
|
817
|
+
if self.value is not None:
|
|
818
|
+
body["value"] = self.value
|
|
819
|
+
return body
|
|
820
|
+
|
|
821
|
+
@classmethod
|
|
822
|
+
def from_dict(cls, d: Dict[str, Any]) -> IngestionPipelineDefinitionWorkdayReportParametersQueryKeyValue:
|
|
823
|
+
"""Deserializes the IngestionPipelineDefinitionWorkdayReportParametersQueryKeyValue from a dictionary."""
|
|
824
|
+
return cls(key=d.get("key", None), value=d.get("value", None))
|
|
825
|
+
|
|
826
|
+
|
|
725
827
|
class IngestionSourceType(Enum):
|
|
726
828
|
|
|
727
829
|
BIGQUERY = "BIGQUERY"
|
|
728
830
|
CONFLUENCE = "CONFLUENCE"
|
|
729
831
|
DYNAMICS365 = "DYNAMICS365"
|
|
832
|
+
FOREIGN_CATALOG = "FOREIGN_CATALOG"
|
|
730
833
|
GA4_RAW_DATA = "GA4_RAW_DATA"
|
|
731
834
|
MANAGED_POSTGRESQL = "MANAGED_POSTGRESQL"
|
|
732
835
|
META_MARKETING = "META_MARKETING"
|
|
@@ -2239,6 +2342,67 @@ class PipelinesEnvironment:
|
|
|
2239
2342
|
return cls(dependencies=d.get("dependencies", None))
|
|
2240
2343
|
|
|
2241
2344
|
|
|
2345
|
+
@dataclass
|
|
2346
|
+
class PostgresCatalogConfig:
|
|
2347
|
+
"""PG-specific catalog-level configuration parameters"""
|
|
2348
|
+
|
|
2349
|
+
slot_config: Optional[PostgresSlotConfig] = None
|
|
2350
|
+
"""Optional. The Postgres slot configuration to use for logical replication"""
|
|
2351
|
+
|
|
2352
|
+
def as_dict(self) -> dict:
|
|
2353
|
+
"""Serializes the PostgresCatalogConfig into a dictionary suitable for use as a JSON request body."""
|
|
2354
|
+
body = {}
|
|
2355
|
+
if self.slot_config:
|
|
2356
|
+
body["slot_config"] = self.slot_config.as_dict()
|
|
2357
|
+
return body
|
|
2358
|
+
|
|
2359
|
+
def as_shallow_dict(self) -> dict:
|
|
2360
|
+
"""Serializes the PostgresCatalogConfig into a shallow dictionary of its immediate attributes."""
|
|
2361
|
+
body = {}
|
|
2362
|
+
if self.slot_config:
|
|
2363
|
+
body["slot_config"] = self.slot_config
|
|
2364
|
+
return body
|
|
2365
|
+
|
|
2366
|
+
@classmethod
|
|
2367
|
+
def from_dict(cls, d: Dict[str, Any]) -> PostgresCatalogConfig:
|
|
2368
|
+
"""Deserializes the PostgresCatalogConfig from a dictionary."""
|
|
2369
|
+
return cls(slot_config=_from_dict(d, "slot_config", PostgresSlotConfig))
|
|
2370
|
+
|
|
2371
|
+
|
|
2372
|
+
@dataclass
|
|
2373
|
+
class PostgresSlotConfig:
|
|
2374
|
+
"""PostgresSlotConfig contains the configuration for a Postgres logical replication slot"""
|
|
2375
|
+
|
|
2376
|
+
publication_name: Optional[str] = None
|
|
2377
|
+
"""The name of the publication to use for the Postgres source"""
|
|
2378
|
+
|
|
2379
|
+
slot_name: Optional[str] = None
|
|
2380
|
+
"""The name of the logical replication slot to use for the Postgres source"""
|
|
2381
|
+
|
|
2382
|
+
def as_dict(self) -> dict:
|
|
2383
|
+
"""Serializes the PostgresSlotConfig into a dictionary suitable for use as a JSON request body."""
|
|
2384
|
+
body = {}
|
|
2385
|
+
if self.publication_name is not None:
|
|
2386
|
+
body["publication_name"] = self.publication_name
|
|
2387
|
+
if self.slot_name is not None:
|
|
2388
|
+
body["slot_name"] = self.slot_name
|
|
2389
|
+
return body
|
|
2390
|
+
|
|
2391
|
+
def as_shallow_dict(self) -> dict:
|
|
2392
|
+
"""Serializes the PostgresSlotConfig into a shallow dictionary of its immediate attributes."""
|
|
2393
|
+
body = {}
|
|
2394
|
+
if self.publication_name is not None:
|
|
2395
|
+
body["publication_name"] = self.publication_name
|
|
2396
|
+
if self.slot_name is not None:
|
|
2397
|
+
body["slot_name"] = self.slot_name
|
|
2398
|
+
return body
|
|
2399
|
+
|
|
2400
|
+
@classmethod
|
|
2401
|
+
def from_dict(cls, d: Dict[str, Any]) -> PostgresSlotConfig:
|
|
2402
|
+
"""Deserializes the PostgresSlotConfig from a dictionary."""
|
|
2403
|
+
return cls(publication_name=d.get("publication_name", None), slot_name=d.get("slot_name", None))
|
|
2404
|
+
|
|
2405
|
+
|
|
2242
2406
|
@dataclass
|
|
2243
2407
|
class ReportSpec:
|
|
2244
2408
|
source_url: str
|
|
@@ -2527,6 +2691,67 @@ class SerializedException:
|
|
|
2527
2691
|
)
|
|
2528
2692
|
|
|
2529
2693
|
|
|
2694
|
+
@dataclass
|
|
2695
|
+
class SourceCatalogConfig:
|
|
2696
|
+
"""SourceCatalogConfig contains catalog-level custom configuration parameters for each source"""
|
|
2697
|
+
|
|
2698
|
+
postgres: Optional[PostgresCatalogConfig] = None
|
|
2699
|
+
"""Postgres-specific catalog-level configuration parameters"""
|
|
2700
|
+
|
|
2701
|
+
source_catalog: Optional[str] = None
|
|
2702
|
+
"""Source catalog name"""
|
|
2703
|
+
|
|
2704
|
+
def as_dict(self) -> dict:
|
|
2705
|
+
"""Serializes the SourceCatalogConfig into a dictionary suitable for use as a JSON request body."""
|
|
2706
|
+
body = {}
|
|
2707
|
+
if self.postgres:
|
|
2708
|
+
body["postgres"] = self.postgres.as_dict()
|
|
2709
|
+
if self.source_catalog is not None:
|
|
2710
|
+
body["source_catalog"] = self.source_catalog
|
|
2711
|
+
return body
|
|
2712
|
+
|
|
2713
|
+
def as_shallow_dict(self) -> dict:
|
|
2714
|
+
"""Serializes the SourceCatalogConfig into a shallow dictionary of its immediate attributes."""
|
|
2715
|
+
body = {}
|
|
2716
|
+
if self.postgres:
|
|
2717
|
+
body["postgres"] = self.postgres
|
|
2718
|
+
if self.source_catalog is not None:
|
|
2719
|
+
body["source_catalog"] = self.source_catalog
|
|
2720
|
+
return body
|
|
2721
|
+
|
|
2722
|
+
@classmethod
|
|
2723
|
+
def from_dict(cls, d: Dict[str, Any]) -> SourceCatalogConfig:
|
|
2724
|
+
"""Deserializes the SourceCatalogConfig from a dictionary."""
|
|
2725
|
+
return cls(
|
|
2726
|
+
postgres=_from_dict(d, "postgres", PostgresCatalogConfig), source_catalog=d.get("source_catalog", None)
|
|
2727
|
+
)
|
|
2728
|
+
|
|
2729
|
+
|
|
2730
|
+
@dataclass
|
|
2731
|
+
class SourceConfig:
|
|
2732
|
+
catalog: Optional[SourceCatalogConfig] = None
|
|
2733
|
+
"""Catalog-level source configuration parameters"""
|
|
2734
|
+
|
|
2735
|
+
def as_dict(self) -> dict:
|
|
2736
|
+
"""Serializes the SourceConfig into a dictionary suitable for use as a JSON request body."""
|
|
2737
|
+
body = {}
|
|
2738
|
+
if self.catalog:
|
|
2739
|
+
body["catalog"] = self.catalog.as_dict()
|
|
2740
|
+
return body
|
|
2741
|
+
|
|
2742
|
+
def as_shallow_dict(self) -> dict:
|
|
2743
|
+
"""Serializes the SourceConfig into a shallow dictionary of its immediate attributes."""
|
|
2744
|
+
body = {}
|
|
2745
|
+
if self.catalog:
|
|
2746
|
+
body["catalog"] = self.catalog
|
|
2747
|
+
return body
|
|
2748
|
+
|
|
2749
|
+
@classmethod
|
|
2750
|
+
def from_dict(cls, d: Dict[str, Any]) -> SourceConfig:
|
|
2751
|
+
"""Deserializes the SourceConfig from a dictionary."""
|
|
2752
|
+
return cls(catalog=_from_dict(d, "catalog", SourceCatalogConfig))
|
|
2753
|
+
|
|
2754
|
+
|
|
2530
2755
|
@dataclass
|
|
2531
2756
|
class StackFrame:
|
|
2532
2757
|
declaring_class: Optional[str] = None
|
|
@@ -2741,6 +2966,9 @@ class TableSpecificConfig:
|
|
|
2741
2966
|
"""The column names specifying the logical order of events in the source data. Delta Live Tables
|
|
2742
2967
|
uses this sequencing to handle change events that arrive out of order."""
|
|
2743
2968
|
|
|
2969
|
+
workday_report_parameters: Optional[IngestionPipelineDefinitionWorkdayReportParameters] = None
|
|
2970
|
+
"""(Optional) Additional custom parameters for Workday Report"""
|
|
2971
|
+
|
|
2744
2972
|
def as_dict(self) -> dict:
|
|
2745
2973
|
"""Serializes the TableSpecificConfig into a dictionary suitable for use as a JSON request body."""
|
|
2746
2974
|
body = {}
|
|
@@ -2758,6 +2986,8 @@ class TableSpecificConfig:
|
|
|
2758
2986
|
body["scd_type"] = self.scd_type.value
|
|
2759
2987
|
if self.sequence_by:
|
|
2760
2988
|
body["sequence_by"] = [v for v in self.sequence_by]
|
|
2989
|
+
if self.workday_report_parameters:
|
|
2990
|
+
body["workday_report_parameters"] = self.workday_report_parameters.as_dict()
|
|
2761
2991
|
return body
|
|
2762
2992
|
|
|
2763
2993
|
def as_shallow_dict(self) -> dict:
|
|
@@ -2777,6 +3007,8 @@ class TableSpecificConfig:
|
|
|
2777
3007
|
body["scd_type"] = self.scd_type
|
|
2778
3008
|
if self.sequence_by:
|
|
2779
3009
|
body["sequence_by"] = self.sequence_by
|
|
3010
|
+
if self.workday_report_parameters:
|
|
3011
|
+
body["workday_report_parameters"] = self.workday_report_parameters
|
|
2780
3012
|
return body
|
|
2781
3013
|
|
|
2782
3014
|
@classmethod
|
|
@@ -2794,6 +3026,9 @@ class TableSpecificConfig:
|
|
|
2794
3026
|
salesforce_include_formula_fields=d.get("salesforce_include_formula_fields", None),
|
|
2795
3027
|
scd_type=_enum(d, "scd_type", TableSpecificConfigScdType),
|
|
2796
3028
|
sequence_by=d.get("sequence_by", None),
|
|
3029
|
+
workday_report_parameters=_from_dict(
|
|
3030
|
+
d, "workday_report_parameters", IngestionPipelineDefinitionWorkdayReportParameters
|
|
3031
|
+
),
|
|
2797
3032
|
)
|
|
2798
3033
|
|
|
2799
3034
|
|
|
@@ -3587,8 +3587,32 @@ class LlmProxyPartnerPoweredWorkspace:
|
|
|
3587
3587
|
|
|
3588
3588
|
@dataclass
|
|
3589
3589
|
class MicrosoftTeamsConfig:
|
|
3590
|
+
app_id: Optional[str] = None
|
|
3591
|
+
"""[Input-Only] App ID for Microsoft Teams App."""
|
|
3592
|
+
|
|
3593
|
+
app_id_set: Optional[bool] = None
|
|
3594
|
+
"""[Output-Only] Whether App ID is set."""
|
|
3595
|
+
|
|
3596
|
+
auth_secret: Optional[str] = None
|
|
3597
|
+
"""[Input-Only] Secret for Microsoft Teams App authentication."""
|
|
3598
|
+
|
|
3599
|
+
auth_secret_set: Optional[bool] = None
|
|
3600
|
+
"""[Output-Only] Whether secret is set."""
|
|
3601
|
+
|
|
3602
|
+
channel_url: Optional[str] = None
|
|
3603
|
+
"""[Input-Only] Channel URL for Microsoft Teams App."""
|
|
3604
|
+
|
|
3605
|
+
channel_url_set: Optional[bool] = None
|
|
3606
|
+
"""[Output-Only] Whether Channel URL is set."""
|
|
3607
|
+
|
|
3608
|
+
tenant_id: Optional[str] = None
|
|
3609
|
+
"""[Input-Only] Tenant ID for Microsoft Teams App."""
|
|
3610
|
+
|
|
3611
|
+
tenant_id_set: Optional[bool] = None
|
|
3612
|
+
"""[Output-Only] Whether Tenant ID is set."""
|
|
3613
|
+
|
|
3590
3614
|
url: Optional[str] = None
|
|
3591
|
-
"""[Input-Only] URL for Microsoft Teams."""
|
|
3615
|
+
"""[Input-Only] URL for Microsoft Teams webhook."""
|
|
3592
3616
|
|
|
3593
3617
|
url_set: Optional[bool] = None
|
|
3594
3618
|
"""[Output-Only] Whether URL is set."""
|
|
@@ -3596,6 +3620,22 @@ class MicrosoftTeamsConfig:
|
|
|
3596
3620
|
def as_dict(self) -> dict:
|
|
3597
3621
|
"""Serializes the MicrosoftTeamsConfig into a dictionary suitable for use as a JSON request body."""
|
|
3598
3622
|
body = {}
|
|
3623
|
+
if self.app_id is not None:
|
|
3624
|
+
body["app_id"] = self.app_id
|
|
3625
|
+
if self.app_id_set is not None:
|
|
3626
|
+
body["app_id_set"] = self.app_id_set
|
|
3627
|
+
if self.auth_secret is not None:
|
|
3628
|
+
body["auth_secret"] = self.auth_secret
|
|
3629
|
+
if self.auth_secret_set is not None:
|
|
3630
|
+
body["auth_secret_set"] = self.auth_secret_set
|
|
3631
|
+
if self.channel_url is not None:
|
|
3632
|
+
body["channel_url"] = self.channel_url
|
|
3633
|
+
if self.channel_url_set is not None:
|
|
3634
|
+
body["channel_url_set"] = self.channel_url_set
|
|
3635
|
+
if self.tenant_id is not None:
|
|
3636
|
+
body["tenant_id"] = self.tenant_id
|
|
3637
|
+
if self.tenant_id_set is not None:
|
|
3638
|
+
body["tenant_id_set"] = self.tenant_id_set
|
|
3599
3639
|
if self.url is not None:
|
|
3600
3640
|
body["url"] = self.url
|
|
3601
3641
|
if self.url_set is not None:
|
|
@@ -3605,6 +3645,22 @@ class MicrosoftTeamsConfig:
|
|
|
3605
3645
|
def as_shallow_dict(self) -> dict:
|
|
3606
3646
|
"""Serializes the MicrosoftTeamsConfig into a shallow dictionary of its immediate attributes."""
|
|
3607
3647
|
body = {}
|
|
3648
|
+
if self.app_id is not None:
|
|
3649
|
+
body["app_id"] = self.app_id
|
|
3650
|
+
if self.app_id_set is not None:
|
|
3651
|
+
body["app_id_set"] = self.app_id_set
|
|
3652
|
+
if self.auth_secret is not None:
|
|
3653
|
+
body["auth_secret"] = self.auth_secret
|
|
3654
|
+
if self.auth_secret_set is not None:
|
|
3655
|
+
body["auth_secret_set"] = self.auth_secret_set
|
|
3656
|
+
if self.channel_url is not None:
|
|
3657
|
+
body["channel_url"] = self.channel_url
|
|
3658
|
+
if self.channel_url_set is not None:
|
|
3659
|
+
body["channel_url_set"] = self.channel_url_set
|
|
3660
|
+
if self.tenant_id is not None:
|
|
3661
|
+
body["tenant_id"] = self.tenant_id
|
|
3662
|
+
if self.tenant_id_set is not None:
|
|
3663
|
+
body["tenant_id_set"] = self.tenant_id_set
|
|
3608
3664
|
if self.url is not None:
|
|
3609
3665
|
body["url"] = self.url
|
|
3610
3666
|
if self.url_set is not None:
|
|
@@ -3614,7 +3670,18 @@ class MicrosoftTeamsConfig:
|
|
|
3614
3670
|
@classmethod
|
|
3615
3671
|
def from_dict(cls, d: Dict[str, Any]) -> MicrosoftTeamsConfig:
|
|
3616
3672
|
"""Deserializes the MicrosoftTeamsConfig from a dictionary."""
|
|
3617
|
-
return cls(
|
|
3673
|
+
return cls(
|
|
3674
|
+
app_id=d.get("app_id", None),
|
|
3675
|
+
app_id_set=d.get("app_id_set", None),
|
|
3676
|
+
auth_secret=d.get("auth_secret", None),
|
|
3677
|
+
auth_secret_set=d.get("auth_secret_set", None),
|
|
3678
|
+
channel_url=d.get("channel_url", None),
|
|
3679
|
+
channel_url_set=d.get("channel_url_set", None),
|
|
3680
|
+
tenant_id=d.get("tenant_id", None),
|
|
3681
|
+
tenant_id_set=d.get("tenant_id_set", None),
|
|
3682
|
+
url=d.get("url", None),
|
|
3683
|
+
url_set=d.get("url_set", None),
|
|
3684
|
+
)
|
|
3618
3685
|
|
|
3619
3686
|
|
|
3620
3687
|
@dataclass
|
|
@@ -322,44 +322,6 @@ class ClusterAutoRestartMessageMaintenanceWindowWindowStartTime:
|
|
|
322
322
|
return cls(hours=d.get("hours", None), minutes=d.get("minutes", None))
|
|
323
323
|
|
|
324
324
|
|
|
325
|
-
@dataclass
|
|
326
|
-
class DefaultDataSecurityModeMessage:
|
|
327
|
-
"""Changes the behaviour of Jobs service when creating job clusters.
|
|
328
|
-
|
|
329
|
-
Before this setting is introduced, all workspaces with metastore attached had behaviour matching
|
|
330
|
-
SINGLE_USER setting.
|
|
331
|
-
|
|
332
|
-
See: - go/defaultdatasecuritymode - go/defaultdatasecuritymode/setting - go/datasecuritymode"""
|
|
333
|
-
|
|
334
|
-
status: DefaultDataSecurityModeMessageStatus
|
|
335
|
-
|
|
336
|
-
def as_dict(self) -> dict:
|
|
337
|
-
"""Serializes the DefaultDataSecurityModeMessage into a dictionary suitable for use as a JSON request body."""
|
|
338
|
-
body = {}
|
|
339
|
-
if self.status is not None:
|
|
340
|
-
body["status"] = self.status.value
|
|
341
|
-
return body
|
|
342
|
-
|
|
343
|
-
def as_shallow_dict(self) -> dict:
|
|
344
|
-
"""Serializes the DefaultDataSecurityModeMessage into a shallow dictionary of its immediate attributes."""
|
|
345
|
-
body = {}
|
|
346
|
-
if self.status is not None:
|
|
347
|
-
body["status"] = self.status
|
|
348
|
-
return body
|
|
349
|
-
|
|
350
|
-
@classmethod
|
|
351
|
-
def from_dict(cls, d: Dict[str, Any]) -> DefaultDataSecurityModeMessage:
|
|
352
|
-
"""Deserializes the DefaultDataSecurityModeMessage from a dictionary."""
|
|
353
|
-
return cls(status=_enum(d, "status", DefaultDataSecurityModeMessageStatus))
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
class DefaultDataSecurityModeMessageStatus(Enum):
|
|
357
|
-
|
|
358
|
-
NOT_SET = "NOT_SET"
|
|
359
|
-
SINGLE_USER = "SINGLE_USER"
|
|
360
|
-
USER_ISOLATION = "USER_ISOLATION"
|
|
361
|
-
|
|
362
|
-
|
|
363
325
|
@dataclass
|
|
364
326
|
class IntegerMessage:
|
|
365
327
|
value: Optional[int] = None
|
|
@@ -528,12 +490,9 @@ class Setting:
|
|
|
528
490
|
aibi_dashboard_embedding_approved_domains: Optional[AibiDashboardEmbeddingApprovedDomains] = None
|
|
529
491
|
|
|
530
492
|
automatic_cluster_update_workspace: Optional[ClusterAutoRestartMessage] = None
|
|
531
|
-
"""todo: Mark these Public after onboarded to DSL"""
|
|
532
493
|
|
|
533
494
|
boolean_val: Optional[BooleanMessage] = None
|
|
534
495
|
|
|
535
|
-
default_data_security_mode: Optional[DefaultDataSecurityModeMessage] = None
|
|
536
|
-
|
|
537
496
|
effective_aibi_dashboard_embedding_access_policy: Optional[AibiDashboardEmbeddingAccessPolicy] = None
|
|
538
497
|
|
|
539
498
|
effective_aibi_dashboard_embedding_approved_domains: Optional[AibiDashboardEmbeddingApprovedDomains] = None
|
|
@@ -542,8 +501,6 @@ class Setting:
|
|
|
542
501
|
|
|
543
502
|
effective_boolean_val: Optional[BooleanMessage] = None
|
|
544
503
|
|
|
545
|
-
effective_default_data_security_mode: Optional[DefaultDataSecurityModeMessage] = None
|
|
546
|
-
|
|
547
504
|
effective_integer_val: Optional[IntegerMessage] = None
|
|
548
505
|
|
|
549
506
|
effective_personal_compute: Optional[PersonalComputeMessage] = None
|
|
@@ -574,8 +531,6 @@ class Setting:
|
|
|
574
531
|
body["automatic_cluster_update_workspace"] = self.automatic_cluster_update_workspace.as_dict()
|
|
575
532
|
if self.boolean_val:
|
|
576
533
|
body["boolean_val"] = self.boolean_val.as_dict()
|
|
577
|
-
if self.default_data_security_mode:
|
|
578
|
-
body["default_data_security_mode"] = self.default_data_security_mode.as_dict()
|
|
579
534
|
if self.effective_aibi_dashboard_embedding_access_policy:
|
|
580
535
|
body["effective_aibi_dashboard_embedding_access_policy"] = (
|
|
581
536
|
self.effective_aibi_dashboard_embedding_access_policy.as_dict()
|
|
@@ -590,8 +545,6 @@ class Setting:
|
|
|
590
545
|
)
|
|
591
546
|
if self.effective_boolean_val:
|
|
592
547
|
body["effective_boolean_val"] = self.effective_boolean_val.as_dict()
|
|
593
|
-
if self.effective_default_data_security_mode:
|
|
594
|
-
body["effective_default_data_security_mode"] = self.effective_default_data_security_mode.as_dict()
|
|
595
548
|
if self.effective_integer_val:
|
|
596
549
|
body["effective_integer_val"] = self.effective_integer_val.as_dict()
|
|
597
550
|
if self.effective_personal_compute:
|
|
@@ -623,8 +576,6 @@ class Setting:
|
|
|
623
576
|
body["automatic_cluster_update_workspace"] = self.automatic_cluster_update_workspace
|
|
624
577
|
if self.boolean_val:
|
|
625
578
|
body["boolean_val"] = self.boolean_val
|
|
626
|
-
if self.default_data_security_mode:
|
|
627
|
-
body["default_data_security_mode"] = self.default_data_security_mode
|
|
628
579
|
if self.effective_aibi_dashboard_embedding_access_policy:
|
|
629
580
|
body["effective_aibi_dashboard_embedding_access_policy"] = (
|
|
630
581
|
self.effective_aibi_dashboard_embedding_access_policy
|
|
@@ -637,8 +588,6 @@ class Setting:
|
|
|
637
588
|
body["effective_automatic_cluster_update_workspace"] = self.effective_automatic_cluster_update_workspace
|
|
638
589
|
if self.effective_boolean_val:
|
|
639
590
|
body["effective_boolean_val"] = self.effective_boolean_val
|
|
640
|
-
if self.effective_default_data_security_mode:
|
|
641
|
-
body["effective_default_data_security_mode"] = self.effective_default_data_security_mode
|
|
642
591
|
if self.effective_integer_val:
|
|
643
592
|
body["effective_integer_val"] = self.effective_integer_val
|
|
644
593
|
if self.effective_personal_compute:
|
|
@@ -673,7 +622,6 @@ class Setting:
|
|
|
673
622
|
d, "automatic_cluster_update_workspace", ClusterAutoRestartMessage
|
|
674
623
|
),
|
|
675
624
|
boolean_val=_from_dict(d, "boolean_val", BooleanMessage),
|
|
676
|
-
default_data_security_mode=_from_dict(d, "default_data_security_mode", DefaultDataSecurityModeMessage),
|
|
677
625
|
effective_aibi_dashboard_embedding_access_policy=_from_dict(
|
|
678
626
|
d, "effective_aibi_dashboard_embedding_access_policy", AibiDashboardEmbeddingAccessPolicy
|
|
679
627
|
),
|
|
@@ -684,9 +632,6 @@ class Setting:
|
|
|
684
632
|
d, "effective_automatic_cluster_update_workspace", ClusterAutoRestartMessage
|
|
685
633
|
),
|
|
686
634
|
effective_boolean_val=_from_dict(d, "effective_boolean_val", BooleanMessage),
|
|
687
|
-
effective_default_data_security_mode=_from_dict(
|
|
688
|
-
d, "effective_default_data_security_mode", DefaultDataSecurityModeMessage
|
|
689
|
-
),
|
|
690
635
|
effective_integer_val=_from_dict(d, "effective_integer_val", IntegerMessage),
|
|
691
636
|
effective_personal_compute=_from_dict(d, "effective_personal_compute", PersonalComputeMessage),
|
|
692
637
|
effective_restrict_workspace_admins=_from_dict(
|
|
@@ -784,7 +729,8 @@ class AccountSettingsV2API:
|
|
|
784
729
|
self._api = api_client
|
|
785
730
|
|
|
786
731
|
def get_public_account_setting(self, name: str) -> Setting:
|
|
787
|
-
"""Get a setting value at account level
|
|
732
|
+
"""Get a setting value at account level. See :method:settingsv2/listaccountsettingsmetadata for list of
|
|
733
|
+
setting available via public APIs at account level.
|
|
788
734
|
|
|
789
735
|
:param name: str
|
|
790
736
|
|
|
@@ -801,9 +747,8 @@ class AccountSettingsV2API:
|
|
|
801
747
|
def list_account_settings_metadata(
|
|
802
748
|
self, *, page_size: Optional[int] = None, page_token: Optional[str] = None
|
|
803
749
|
) -> Iterator[SettingsMetadata]:
|
|
804
|
-
"""List valid setting keys and metadata. These settings are available to referenced via
|
|
805
|
-
/
|
|
806
|
-
/api/2.1/settings/{name}](#~1api~1account~1settingsv2~patchpublicaccountsetting) APIs
|
|
750
|
+
"""List valid setting keys and metadata. These settings are available to be referenced via GET
|
|
751
|
+
:method:settingsv2/getpublicaccountsetting and PATCH :method:settingsv2/patchpublicaccountsetting APIs
|
|
807
752
|
|
|
808
753
|
:param page_size: int (optional)
|
|
809
754
|
The maximum number of settings to return. The service may return fewer than this value. If
|
|
@@ -840,7 +785,8 @@ class AccountSettingsV2API:
|
|
|
840
785
|
query["page_token"] = json["next_page_token"]
|
|
841
786
|
|
|
842
787
|
def patch_public_account_setting(self, name: str, setting: Setting) -> Setting:
|
|
843
|
-
"""Patch a setting value at account level
|
|
788
|
+
"""Patch a setting value at account level. See :method:settingsv2/listaccountsettingsmetadata for list of
|
|
789
|
+
setting available via public APIs at account level.
|
|
844
790
|
|
|
845
791
|
:param name: str
|
|
846
792
|
:param setting: :class:`Setting`
|
|
@@ -866,7 +812,8 @@ class WorkspaceSettingsV2API:
|
|
|
866
812
|
self._api = api_client
|
|
867
813
|
|
|
868
814
|
def get_public_workspace_setting(self, name: str) -> Setting:
|
|
869
|
-
"""Get a setting value at workspace level
|
|
815
|
+
"""Get a setting value at workspace level. See :method:settingsv2/listworkspacesettingsmetadata for list
|
|
816
|
+
of setting available via public APIs.
|
|
870
817
|
|
|
871
818
|
:param name: str
|
|
872
819
|
|
|
@@ -883,9 +830,9 @@ class WorkspaceSettingsV2API:
|
|
|
883
830
|
def list_workspace_settings_metadata(
|
|
884
831
|
self, *, page_size: Optional[int] = None, page_token: Optional[str] = None
|
|
885
832
|
) -> Iterator[SettingsMetadata]:
|
|
886
|
-
"""List valid setting keys and metadata. These settings are available to referenced via
|
|
887
|
-
/
|
|
888
|
-
|
|
833
|
+
"""List valid setting keys and metadata. These settings are available to be referenced via GET
|
|
834
|
+
:method:settingsv2/getpublicworkspacesetting and PATCH :method:settingsv2/patchpublicworkspacesetting
|
|
835
|
+
APIs
|
|
889
836
|
|
|
890
837
|
:param page_size: int (optional)
|
|
891
838
|
The maximum number of settings to return. The service may return fewer than this value. If
|
|
@@ -920,7 +867,8 @@ class WorkspaceSettingsV2API:
|
|
|
920
867
|
query["page_token"] = json["next_page_token"]
|
|
921
868
|
|
|
922
869
|
def patch_public_workspace_setting(self, name: str, setting: Setting) -> Setting:
|
|
923
|
-
"""Patch a setting value at workspace level
|
|
870
|
+
"""Patch a setting value at workspace level. See :method:settingsv2/listworkspacesettingsmetadata for
|
|
871
|
+
list of setting available via public APIs at workspace level.
|
|
924
872
|
|
|
925
873
|
:param name: str
|
|
926
874
|
:param setting: :class:`Setting`
|
|
@@ -2307,6 +2307,9 @@ class Table:
|
|
|
2307
2307
|
class TableInternalAttributes:
|
|
2308
2308
|
"""Internal information for D2D sharing that should not be disclosed to external users."""
|
|
2309
2309
|
|
|
2310
|
+
auxiliary_managed_location: Optional[str] = None
|
|
2311
|
+
"""Managed Delta Metadata location for foreign iceberg tables."""
|
|
2312
|
+
|
|
2310
2313
|
parent_storage_location: Optional[str] = None
|
|
2311
2314
|
"""Will be populated in the reconciliation response for VIEW and FOREIGN_TABLE, with the value of
|
|
2312
2315
|
the parent UC entity's storage_location, following the same logic as getManagedEntityPath in
|
|
@@ -2327,6 +2330,8 @@ class TableInternalAttributes:
|
|
|
2327
2330
|
def as_dict(self) -> dict:
|
|
2328
2331
|
"""Serializes the TableInternalAttributes into a dictionary suitable for use as a JSON request body."""
|
|
2329
2332
|
body = {}
|
|
2333
|
+
if self.auxiliary_managed_location is not None:
|
|
2334
|
+
body["auxiliary_managed_location"] = self.auxiliary_managed_location
|
|
2330
2335
|
if self.parent_storage_location is not None:
|
|
2331
2336
|
body["parent_storage_location"] = self.parent_storage_location
|
|
2332
2337
|
if self.storage_location is not None:
|
|
@@ -2340,6 +2345,8 @@ class TableInternalAttributes:
|
|
|
2340
2345
|
def as_shallow_dict(self) -> dict:
|
|
2341
2346
|
"""Serializes the TableInternalAttributes into a shallow dictionary of its immediate attributes."""
|
|
2342
2347
|
body = {}
|
|
2348
|
+
if self.auxiliary_managed_location is not None:
|
|
2349
|
+
body["auxiliary_managed_location"] = self.auxiliary_managed_location
|
|
2343
2350
|
if self.parent_storage_location is not None:
|
|
2344
2351
|
body["parent_storage_location"] = self.parent_storage_location
|
|
2345
2352
|
if self.storage_location is not None:
|
|
@@ -2354,6 +2361,7 @@ class TableInternalAttributes:
|
|
|
2354
2361
|
def from_dict(cls, d: Dict[str, Any]) -> TableInternalAttributes:
|
|
2355
2362
|
"""Deserializes the TableInternalAttributes from a dictionary."""
|
|
2356
2363
|
return cls(
|
|
2364
|
+
auxiliary_managed_location=d.get("auxiliary_managed_location", None),
|
|
2357
2365
|
parent_storage_location=d.get("parent_storage_location", None),
|
|
2358
2366
|
storage_location=d.get("storage_location", None),
|
|
2359
2367
|
type=_enum(d, "type", TableInternalAttributesSharedTableType),
|
|
@@ -2366,8 +2374,10 @@ class TableInternalAttributesSharedTableType(Enum):
|
|
|
2366
2374
|
DELTA_ICEBERG_TABLE = "DELTA_ICEBERG_TABLE"
|
|
2367
2375
|
DIRECTORY_BASED_TABLE = "DIRECTORY_BASED_TABLE"
|
|
2368
2376
|
FILE_BASED_TABLE = "FILE_BASED_TABLE"
|
|
2377
|
+
FOREIGN_ICEBERG_TABLE = "FOREIGN_ICEBERG_TABLE"
|
|
2369
2378
|
FOREIGN_TABLE = "FOREIGN_TABLE"
|
|
2370
2379
|
MATERIALIZED_VIEW = "MATERIALIZED_VIEW"
|
|
2380
|
+
METRIC_VIEW = "METRIC_VIEW"
|
|
2371
2381
|
STREAMING_TABLE = "STREAMING_TABLE"
|
|
2372
2382
|
VIEW = "VIEW"
|
|
2373
2383
|
|
|
@@ -3363,7 +3373,9 @@ class SharesAPI:
|
|
|
3363
3373
|
res = self._api.do("GET", f"/api/2.1/unity-catalog/shares/{name}", query=query, headers=headers)
|
|
3364
3374
|
return ShareInfo.from_dict(res)
|
|
3365
3375
|
|
|
3366
|
-
def
|
|
3376
|
+
def list_shares(
|
|
3377
|
+
self, *, max_results: Optional[int] = None, page_token: Optional[str] = None
|
|
3378
|
+
) -> Iterator[ShareInfo]:
|
|
3367
3379
|
"""Gets an array of data object shares from the metastore. The caller must be a metastore admin or the
|
|
3368
3380
|
owner of the share. There is no guarantee of a specific ordering of the elements in the array.
|
|
3369
3381
|
|