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

@@ -610,6 +610,10 @@ 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
 
@@ -631,6 +635,8 @@ class IngestionPipelineDefinition:
631
635
  body["connection_name"] = self.connection_name
632
636
  if self.ingestion_gateway_id is not None:
633
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
634
640
  if self.objects:
635
641
  body["objects"] = [v.as_dict() for v in self.objects]
636
642
  if self.source_configurations:
@@ -648,6 +654,8 @@ class IngestionPipelineDefinition:
648
654
  body["connection_name"] = self.connection_name
649
655
  if self.ingestion_gateway_id is not None:
650
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
651
659
  if self.objects:
652
660
  body["objects"] = self.objects
653
661
  if self.source_configurations:
@@ -664,6 +672,7 @@ class IngestionPipelineDefinition:
664
672
  return cls(
665
673
  connection_name=d.get("connection_name", None),
666
674
  ingestion_gateway_id=d.get("ingestion_gateway_id", None),
675
+ netsuite_jar_path=d.get("netsuite_jar_path", None),
667
676
  objects=_repeated_dict(d, "objects", IngestionConfig),
668
677
  source_configurations=_repeated_dict(d, "source_configurations", SourceConfig),
669
678
  source_type=_enum(d, "source_type", IngestionSourceType),
@@ -730,11 +739,97 @@ class IngestionPipelineDefinitionTableSpecificConfigQueryBasedConnectorConfig:
730
739
  )
731
740
 
732
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
+
733
827
  class IngestionSourceType(Enum):
734
828
 
735
829
  BIGQUERY = "BIGQUERY"
736
830
  CONFLUENCE = "CONFLUENCE"
737
831
  DYNAMICS365 = "DYNAMICS365"
832
+ FOREIGN_CATALOG = "FOREIGN_CATALOG"
738
833
  GA4_RAW_DATA = "GA4_RAW_DATA"
739
834
  MANAGED_POSTGRESQL = "MANAGED_POSTGRESQL"
740
835
  META_MARKETING = "META_MARKETING"
@@ -2871,6 +2966,9 @@ class TableSpecificConfig:
2871
2966
  """The column names specifying the logical order of events in the source data. Delta Live Tables
2872
2967
  uses this sequencing to handle change events that arrive out of order."""
2873
2968
 
2969
+ workday_report_parameters: Optional[IngestionPipelineDefinitionWorkdayReportParameters] = None
2970
+ """(Optional) Additional custom parameters for Workday Report"""
2971
+
2874
2972
  def as_dict(self) -> dict:
2875
2973
  """Serializes the TableSpecificConfig into a dictionary suitable for use as a JSON request body."""
2876
2974
  body = {}
@@ -2888,6 +2986,8 @@ class TableSpecificConfig:
2888
2986
  body["scd_type"] = self.scd_type.value
2889
2987
  if self.sequence_by:
2890
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()
2891
2991
  return body
2892
2992
 
2893
2993
  def as_shallow_dict(self) -> dict:
@@ -2907,6 +3007,8 @@ class TableSpecificConfig:
2907
3007
  body["scd_type"] = self.scd_type
2908
3008
  if self.sequence_by:
2909
3009
  body["sequence_by"] = self.sequence_by
3010
+ if self.workday_report_parameters:
3011
+ body["workday_report_parameters"] = self.workday_report_parameters
2910
3012
  return body
2911
3013
 
2912
3014
  @classmethod
@@ -2924,6 +3026,9 @@ class TableSpecificConfig:
2924
3026
  salesforce_include_formula_fields=d.get("salesforce_include_formula_fields", None),
2925
3027
  scd_type=_enum(d, "scd_type", TableSpecificConfigScdType),
2926
3028
  sequence_by=d.get("sequence_by", None),
3029
+ workday_report_parameters=_from_dict(
3030
+ d, "workday_report_parameters", IngestionPipelineDefinitionWorkdayReportParameters
3031
+ ),
2927
3032
  )
2928
3033
 
2929
3034
 
@@ -3905,6 +3905,38 @@ class TrafficConfig:
3905
3905
  return cls(routes=_repeated_dict(d, "routes", Route))
3906
3906
 
3907
3907
 
3908
+ @dataclass
3909
+ class UpdateInferenceEndpointNotificationsResponse:
3910
+ email_notifications: Optional[EmailNotifications] = None
3911
+
3912
+ name: Optional[str] = None
3913
+
3914
+ def as_dict(self) -> dict:
3915
+ """Serializes the UpdateInferenceEndpointNotificationsResponse into a dictionary suitable for use as a JSON request body."""
3916
+ body = {}
3917
+ if self.email_notifications:
3918
+ body["email_notifications"] = self.email_notifications.as_dict()
3919
+ if self.name is not None:
3920
+ body["name"] = self.name
3921
+ return body
3922
+
3923
+ def as_shallow_dict(self) -> dict:
3924
+ """Serializes the UpdateInferenceEndpointNotificationsResponse into a shallow dictionary of its immediate attributes."""
3925
+ body = {}
3926
+ if self.email_notifications:
3927
+ body["email_notifications"] = self.email_notifications
3928
+ if self.name is not None:
3929
+ body["name"] = self.name
3930
+ return body
3931
+
3932
+ @classmethod
3933
+ def from_dict(cls, d: Dict[str, Any]) -> UpdateInferenceEndpointNotificationsResponse:
3934
+ """Deserializes the UpdateInferenceEndpointNotificationsResponse from a dictionary."""
3935
+ return cls(
3936
+ email_notifications=_from_dict(d, "email_notifications", EmailNotifications), name=d.get("name", None)
3937
+ )
3938
+
3939
+
3908
3940
  @dataclass
3909
3941
  class V1ResponseChoiceElement:
3910
3942
  finish_reason: Optional[str] = None
@@ -4706,6 +4738,30 @@ class ServingEndpointsAPI:
4706
4738
  traffic_config=traffic_config,
4707
4739
  ).result(timeout=timeout)
4708
4740
 
4741
+ def update_notifications(
4742
+ self, name: str, *, email_notifications: Optional[EmailNotifications] = None
4743
+ ) -> UpdateInferenceEndpointNotificationsResponse:
4744
+ """Updates the email and webhook notification settings for an endpoint.
4745
+
4746
+ :param name: str
4747
+ The name of the serving endpoint whose notifications are being updated. This field is required.
4748
+ :param email_notifications: :class:`EmailNotifications` (optional)
4749
+ The email notification settings to update. Specify email addresses to notify when endpoint state
4750
+ changes occur.
4751
+
4752
+ :returns: :class:`UpdateInferenceEndpointNotificationsResponse`
4753
+ """
4754
+ body = {}
4755
+ if email_notifications is not None:
4756
+ body["email_notifications"] = email_notifications.as_dict()
4757
+ headers = {
4758
+ "Accept": "application/json",
4759
+ "Content-Type": "application/json",
4760
+ }
4761
+
4762
+ res = self._api.do("PATCH", f"/api/2.0/serving-endpoints/{name}/notifications", body=body, headers=headers)
4763
+ return UpdateInferenceEndpointNotificationsResponse.from_dict(res)
4764
+
4709
4765
  def update_permissions(
4710
4766
  self,
4711
4767
  serving_endpoint_id: str,
@@ -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 [GET
805
- /api/2.1/settings/{name}](#~1api~1account~1settingsv2~1getpublicaccountsetting) and [PATCH
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 [GET
887
- /api/2.1/settings/{name}](#~1api~1workspace~1settingsv2~1getpublicworkspacesetting) and [PATCH
888
- /api/2.1/settings/{name}](#~1api~1workspace~1settingsv2~patchpublicworkspacesetting) APIs
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 list(self, *, max_results: Optional[int] = None, page_token: Optional[str] = None) -> Iterator[ShareInfo]:
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
 
@@ -792,7 +792,8 @@ class AlertV2Evaluation:
792
792
  """Operator used for comparison in alert evaluation."""
793
793
 
794
794
  empty_result_state: Optional[AlertEvaluationState] = None
795
- """Alert state if result is empty."""
795
+ """Alert state if result is empty. Please avoid setting this field to be `UNKNOWN` because
796
+ `UNKNOWN` state is planned to be deprecated."""
796
797
 
797
798
  last_evaluated_at: Optional[str] = None
798
799
  """Timestamp of the last evaluation."""
@@ -3914,13 +3915,18 @@ class ListAlertsResponseAlert:
3914
3915
 
3915
3916
  @dataclass
3916
3917
  class ListAlertsV2Response:
3918
+ alerts: Optional[List[AlertV2]] = None
3919
+
3917
3920
  next_page_token: Optional[str] = None
3918
3921
 
3919
3922
  results: Optional[List[AlertV2]] = None
3923
+ """Deprecated. Use `alerts` instead."""
3920
3924
 
3921
3925
  def as_dict(self) -> dict:
3922
3926
  """Serializes the ListAlertsV2Response into a dictionary suitable for use as a JSON request body."""
3923
3927
  body = {}
3928
+ if self.alerts:
3929
+ body["alerts"] = [v.as_dict() for v in self.alerts]
3924
3930
  if self.next_page_token is not None:
3925
3931
  body["next_page_token"] = self.next_page_token
3926
3932
  if self.results:
@@ -3930,6 +3936,8 @@ class ListAlertsV2Response:
3930
3936
  def as_shallow_dict(self) -> dict:
3931
3937
  """Serializes the ListAlertsV2Response into a shallow dictionary of its immediate attributes."""
3932
3938
  body = {}
3939
+ if self.alerts:
3940
+ body["alerts"] = self.alerts
3933
3941
  if self.next_page_token is not None:
3934
3942
  body["next_page_token"] = self.next_page_token
3935
3943
  if self.results:
@@ -3939,7 +3947,11 @@ class ListAlertsV2Response:
3939
3947
  @classmethod
3940
3948
  def from_dict(cls, d: Dict[str, Any]) -> ListAlertsV2Response:
3941
3949
  """Deserializes the ListAlertsV2Response from a dictionary."""
3942
- return cls(next_page_token=d.get("next_page_token", None), results=_repeated_dict(d, "results", AlertV2))
3950
+ return cls(
3951
+ alerts=_repeated_dict(d, "alerts", AlertV2),
3952
+ next_page_token=d.get("next_page_token", None),
3953
+ results=_repeated_dict(d, "results", AlertV2),
3954
+ )
3943
3955
 
3944
3956
 
3945
3957
  class ListOrder(Enum):
@@ -9534,7 +9546,7 @@ class WarehousesAPI:
9534
9546
  return GetWorkspaceWarehouseConfigResponse.from_dict(res)
9535
9547
 
9536
9548
  def list(self, *, run_as_user_id: Optional[int] = None) -> Iterator[EndpointInfo]:
9537
- """Lists all SQL warehouses that a user has manager permissions on.
9549
+ """Lists all SQL warehouses that a user has access to.
9538
9550
 
9539
9551
  :param run_as_user_id: int (optional)
9540
9552
  Service Principal which will be used to fetch the list of warehouses. If not specified, the user
@@ -50,21 +50,31 @@ class ListTagPoliciesResponse:
50
50
  class TagPolicy:
51
51
  tag_key: str
52
52
 
53
+ create_time: Optional[str] = None
54
+ """Timestamp when the tag policy was created"""
55
+
53
56
  description: Optional[str] = None
54
57
 
55
58
  id: Optional[str] = None
56
59
 
60
+ update_time: Optional[str] = None
61
+ """Timestamp when the tag policy was last updated"""
62
+
57
63
  values: Optional[List[Value]] = None
58
64
 
59
65
  def as_dict(self) -> dict:
60
66
  """Serializes the TagPolicy into a dictionary suitable for use as a JSON request body."""
61
67
  body = {}
68
+ if self.create_time is not None:
69
+ body["create_time"] = self.create_time
62
70
  if self.description is not None:
63
71
  body["description"] = self.description
64
72
  if self.id is not None:
65
73
  body["id"] = self.id
66
74
  if self.tag_key is not None:
67
75
  body["tag_key"] = self.tag_key
76
+ if self.update_time is not None:
77
+ body["update_time"] = self.update_time
68
78
  if self.values:
69
79
  body["values"] = [v.as_dict() for v in self.values]
70
80
  return body
@@ -72,12 +82,16 @@ class TagPolicy:
72
82
  def as_shallow_dict(self) -> dict:
73
83
  """Serializes the TagPolicy into a shallow dictionary of its immediate attributes."""
74
84
  body = {}
85
+ if self.create_time is not None:
86
+ body["create_time"] = self.create_time
75
87
  if self.description is not None:
76
88
  body["description"] = self.description
77
89
  if self.id is not None:
78
90
  body["id"] = self.id
79
91
  if self.tag_key is not None:
80
92
  body["tag_key"] = self.tag_key
93
+ if self.update_time is not None:
94
+ body["update_time"] = self.update_time
81
95
  if self.values:
82
96
  body["values"] = self.values
83
97
  return body
@@ -86,9 +100,11 @@ class TagPolicy:
86
100
  def from_dict(cls, d: Dict[str, Any]) -> TagPolicy:
87
101
  """Deserializes the TagPolicy from a dictionary."""
88
102
  return cls(
103
+ create_time=d.get("create_time", None),
89
104
  description=d.get("description", None),
90
105
  id=d.get("id", None),
91
106
  tag_key=d.get("tag_key", None),
107
+ update_time=d.get("update_time", None),
92
108
  values=_repeated_dict(d, "values", Value),
93
109
  )
94
110
 
@@ -118,13 +134,16 @@ class Value:
118
134
 
119
135
 
120
136
  class TagPoliciesAPI:
121
- """The Tag Policy API allows you to manage tag policies in Databricks."""
137
+ """The Tag Policy API allows you to manage policies for governed tags in Databricks. Permissions for tag
138
+ policies can be managed using the [Account Access Control Proxy API].
139
+
140
+ [Account Access Control Proxy API]: https://docs.databricks.com/api/workspace/accountaccesscontrolproxy"""
122
141
 
123
142
  def __init__(self, api_client):
124
143
  self._api = api_client
125
144
 
126
145
  def create_tag_policy(self, tag_policy: TagPolicy) -> TagPolicy:
127
- """Creates a new tag policy.
146
+ """Creates a new tag policy, making the associated tag key governed.
128
147
 
129
148
  :param tag_policy: :class:`TagPolicy`
130
149
 
@@ -140,7 +159,7 @@ class TagPoliciesAPI:
140
159
  return TagPolicy.from_dict(res)
141
160
 
142
161
  def delete_tag_policy(self, tag_key: str):
143
- """Deletes a tag policy by its key.
162
+ """Deletes a tag policy by its associated governed tag's key, leaving that tag key ungoverned.
144
163
 
145
164
  :param tag_key: str
146
165
 
@@ -154,7 +173,7 @@ class TagPoliciesAPI:
154
173
  self._api.do("DELETE", f"/api/2.1/tag-policies/{tag_key}", headers=headers)
155
174
 
156
175
  def get_tag_policy(self, tag_key: str) -> TagPolicy:
157
- """Gets a single tag policy by its key.
176
+ """Gets a single tag policy by its associated governed tag's key.
158
177
 
159
178
  :param tag_key: str
160
179
 
@@ -171,7 +190,7 @@ class TagPoliciesAPI:
171
190
  def list_tag_policies(
172
191
  self, *, page_size: Optional[int] = None, page_token: Optional[str] = None
173
192
  ) -> Iterator[TagPolicy]:
174
- """Lists all tag policies in the account.
193
+ """Lists the tag policies for all governed tags in the account.
175
194
 
176
195
  :param page_size: int (optional)
177
196
  The maximum number of results to return in this request. Fewer results may be returned than
@@ -202,7 +221,7 @@ class TagPoliciesAPI:
202
221
  query["page_token"] = json["next_page_token"]
203
222
 
204
223
  def update_tag_policy(self, tag_key: str, tag_policy: TagPolicy, update_mask: str) -> TagPolicy:
205
- """Updates an existing tag policy.
224
+ """Updates an existing tag policy for a single governed tag.
206
225
 
207
226
  :param tag_key: str
208
227
  :param tag_policy: :class:`TagPolicy`
databricks/sdk/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.65.0"
1
+ __version__ = "0.67.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-sdk
3
- Version: 0.65.0
3
+ Version: 0.67.0
4
4
  Summary: Databricks SDK for Python (Beta)
5
5
  Project-URL: Documentation, https://databricks-sdk-py.readthedocs.io
6
6
  Keywords: databricks,sdk