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

@@ -412,6 +412,9 @@ class CreateWorkspaceRequest:
412
412
  gke_config: Optional[GkeConfig] = None
413
413
  """The configurations for the GKE cluster of a Databricks workspace."""
414
414
 
415
+ is_no_public_ip_enabled: Optional[bool] = None
416
+ """Whether no public IP is enabled for the workspace."""
417
+
415
418
  location: Optional[str] = None
416
419
  """The Google Cloud region of the workspace data plane in your Google account. For example,
417
420
  `us-east4`."""
@@ -460,6 +463,8 @@ class CreateWorkspaceRequest:
460
463
  if self.gcp_managed_network_config:
461
464
  body['gcp_managed_network_config'] = self.gcp_managed_network_config.as_dict()
462
465
  if self.gke_config: body['gke_config'] = self.gke_config.as_dict()
466
+ if self.is_no_public_ip_enabled is not None:
467
+ body['is_no_public_ip_enabled'] = self.is_no_public_ip_enabled
463
468
  if self.location is not None: body['location'] = self.location
464
469
  if self.managed_services_customer_managed_key_id is not None:
465
470
  body['managed_services_customer_managed_key_id'] = self.managed_services_customer_managed_key_id
@@ -486,6 +491,7 @@ class CreateWorkspaceRequest:
486
491
  gcp_managed_network_config=_from_dict(d, 'gcp_managed_network_config',
487
492
  GcpManagedNetworkConfig),
488
493
  gke_config=_from_dict(d, 'gke_config', GkeConfig),
494
+ is_no_public_ip_enabled=d.get('is_no_public_ip_enabled', None),
489
495
  location=d.get('location', None),
490
496
  managed_services_customer_managed_key_id=d.get('managed_services_customer_managed_key_id',
491
497
  None),
@@ -632,6 +638,35 @@ class ErrorType(Enum):
632
638
  VPC = 'vpc'
633
639
 
634
640
 
641
+ @dataclass
642
+ class ExternalCustomerInfo:
643
+ authoritative_user_email: Optional[str] = None
644
+ """Email of the authoritative user."""
645
+
646
+ authoritative_user_full_name: Optional[str] = None
647
+ """The authoritative user full name."""
648
+
649
+ customer_name: Optional[str] = None
650
+ """The legal entity name for the external workspace"""
651
+
652
+ def as_dict(self) -> dict:
653
+ """Serializes the ExternalCustomerInfo into a dictionary suitable for use as a JSON request body."""
654
+ body = {}
655
+ if self.authoritative_user_email is not None:
656
+ body['authoritative_user_email'] = self.authoritative_user_email
657
+ if self.authoritative_user_full_name is not None:
658
+ body['authoritative_user_full_name'] = self.authoritative_user_full_name
659
+ if self.customer_name is not None: body['customer_name'] = self.customer_name
660
+ return body
661
+
662
+ @classmethod
663
+ def from_dict(cls, d: Dict[str, any]) -> ExternalCustomerInfo:
664
+ """Deserializes the ExternalCustomerInfo from a dictionary."""
665
+ return cls(authoritative_user_email=d.get('authoritative_user_email', None),
666
+ authoritative_user_full_name=d.get('authoritative_user_full_name', None),
667
+ customer_name=d.get('customer_name', None))
668
+
669
+
635
670
  @dataclass
636
671
  class GcpKeyInfo:
637
672
  kms_key_id: str
@@ -1443,6 +1478,10 @@ class Workspace:
1443
1478
 
1444
1479
  This value must be unique across all non-deleted deployments across all AWS regions."""
1445
1480
 
1481
+ external_customer_info: Optional[ExternalCustomerInfo] = None
1482
+ """If this workspace is for a external customer, then external_customer_info is populated. If this
1483
+ workspace is not for a external customer, then external_customer_info is empty."""
1484
+
1446
1485
  gcp_managed_network_config: Optional[GcpManagedNetworkConfig] = None
1447
1486
  """The network settings for the workspace. The configurations are only for Databricks-managed VPCs.
1448
1487
  It is ignored if you specify a customer-managed VPC in the `network_id` field.", All the IP
@@ -1466,6 +1505,9 @@ class Workspace:
1466
1505
  gke_config: Optional[GkeConfig] = None
1467
1506
  """The configurations for the GKE cluster of a Databricks workspace."""
1468
1507
 
1508
+ is_no_public_ip_enabled: Optional[bool] = None
1509
+ """Whether no public IP is enabled for the workspace."""
1510
+
1469
1511
  location: Optional[str] = None
1470
1512
  """The Google Cloud region of the workspace data plane in your Google account (for example,
1471
1513
  `us-east4`)."""
@@ -1524,9 +1566,12 @@ class Workspace:
1524
1566
  if self.credentials_id is not None: body['credentials_id'] = self.credentials_id
1525
1567
  if self.custom_tags: body['custom_tags'] = self.custom_tags
1526
1568
  if self.deployment_name is not None: body['deployment_name'] = self.deployment_name
1569
+ if self.external_customer_info: body['external_customer_info'] = self.external_customer_info.as_dict()
1527
1570
  if self.gcp_managed_network_config:
1528
1571
  body['gcp_managed_network_config'] = self.gcp_managed_network_config.as_dict()
1529
1572
  if self.gke_config: body['gke_config'] = self.gke_config.as_dict()
1573
+ if self.is_no_public_ip_enabled is not None:
1574
+ body['is_no_public_ip_enabled'] = self.is_no_public_ip_enabled
1530
1575
  if self.location is not None: body['location'] = self.location
1531
1576
  if self.managed_services_customer_managed_key_id is not None:
1532
1577
  body['managed_services_customer_managed_key_id'] = self.managed_services_customer_managed_key_id
@@ -1557,9 +1602,11 @@ class Workspace:
1557
1602
  credentials_id=d.get('credentials_id', None),
1558
1603
  custom_tags=d.get('custom_tags', None),
1559
1604
  deployment_name=d.get('deployment_name', None),
1605
+ external_customer_info=_from_dict(d, 'external_customer_info', ExternalCustomerInfo),
1560
1606
  gcp_managed_network_config=_from_dict(d, 'gcp_managed_network_config',
1561
1607
  GcpManagedNetworkConfig),
1562
1608
  gke_config=_from_dict(d, 'gke_config', GkeConfig),
1609
+ is_no_public_ip_enabled=d.get('is_no_public_ip_enabled', None),
1563
1610
  location=d.get('location', None),
1564
1611
  managed_services_customer_managed_key_id=d.get('managed_services_customer_managed_key_id',
1565
1612
  None),
@@ -2399,6 +2446,7 @@ class WorkspacesAPI:
2399
2446
  deployment_name: Optional[str] = None,
2400
2447
  gcp_managed_network_config: Optional[GcpManagedNetworkConfig] = None,
2401
2448
  gke_config: Optional[GkeConfig] = None,
2449
+ is_no_public_ip_enabled: Optional[bool] = None,
2402
2450
  location: Optional[str] = None,
2403
2451
  managed_services_customer_managed_key_id: Optional[str] = None,
2404
2452
  network_id: Optional[str] = None,
@@ -2477,6 +2525,8 @@ class WorkspacesAPI:
2477
2525
  [calculate subnet sizes for a new workspace]: https://docs.gcp.databricks.com/administration-guide/cloud-configurations/gcp/network-sizing.html
2478
2526
  :param gke_config: :class:`GkeConfig` (optional)
2479
2527
  The configurations for the GKE cluster of a Databricks workspace.
2528
+ :param is_no_public_ip_enabled: bool (optional)
2529
+ Whether no public IP is enabled for the workspace.
2480
2530
  :param location: str (optional)
2481
2531
  The Google Cloud region of the workspace data plane in your Google account. For example, `us-east4`.
2482
2532
  :param managed_services_customer_managed_key_id: str (optional)
@@ -2519,6 +2569,7 @@ class WorkspacesAPI:
2519
2569
  if gcp_managed_network_config is not None:
2520
2570
  body['gcp_managed_network_config'] = gcp_managed_network_config.as_dict()
2521
2571
  if gke_config is not None: body['gke_config'] = gke_config.as_dict()
2572
+ if is_no_public_ip_enabled is not None: body['is_no_public_ip_enabled'] = is_no_public_ip_enabled
2522
2573
  if location is not None: body['location'] = location
2523
2574
  if managed_services_customer_managed_key_id is not None:
2524
2575
  body['managed_services_customer_managed_key_id'] = managed_services_customer_managed_key_id
@@ -2552,6 +2603,7 @@ class WorkspacesAPI:
2552
2603
  deployment_name: Optional[str] = None,
2553
2604
  gcp_managed_network_config: Optional[GcpManagedNetworkConfig] = None,
2554
2605
  gke_config: Optional[GkeConfig] = None,
2606
+ is_no_public_ip_enabled: Optional[bool] = None,
2555
2607
  location: Optional[str] = None,
2556
2608
  managed_services_customer_managed_key_id: Optional[str] = None,
2557
2609
  network_id: Optional[str] = None,
@@ -2568,6 +2620,7 @@ class WorkspacesAPI:
2568
2620
  deployment_name=deployment_name,
2569
2621
  gcp_managed_network_config=gcp_managed_network_config,
2570
2622
  gke_config=gke_config,
2623
+ is_no_public_ip_enabled=is_no_public_ip_enabled,
2571
2624
  location=location,
2572
2625
  managed_services_customer_managed_key_id=managed_services_customer_managed_key_id,
2573
2626
  network_id=network_id,
@@ -2994,8 +2994,8 @@ class ServingEndpointsAPI:
2994
2994
  ) -> ServingEndpointPermissions:
2995
2995
  """Set serving endpoint permissions.
2996
2996
 
2997
- Sets permissions on a serving endpoint. Serving endpoints can inherit permissions from their root
2998
- object.
2997
+ Sets permissions on an object, replacing existing permissions if they exist. Deletes all direct
2998
+ permissions if none are specified. Objects can inherit permissions from their root object.
2999
2999
 
3000
3000
  :param serving_endpoint_id: str
3001
3001
  The serving endpoint for which to get or manage permissions.
@@ -14,6 +14,122 @@ _LOG = logging.getLogger('databricks.sdk')
14
14
  # all definitions in this file are in alphabetical order
15
15
 
16
16
 
17
+ @dataclass
18
+ class AibiDashboardEmbeddingAccessPolicy:
19
+ access_policy_type: AibiDashboardEmbeddingAccessPolicyAccessPolicyType
20
+
21
+ def as_dict(self) -> dict:
22
+ """Serializes the AibiDashboardEmbeddingAccessPolicy into a dictionary suitable for use as a JSON request body."""
23
+ body = {}
24
+ if self.access_policy_type is not None: body['access_policy_type'] = self.access_policy_type.value
25
+ return body
26
+
27
+ @classmethod
28
+ def from_dict(cls, d: Dict[str, any]) -> AibiDashboardEmbeddingAccessPolicy:
29
+ """Deserializes the AibiDashboardEmbeddingAccessPolicy from a dictionary."""
30
+ return cls(access_policy_type=_enum(d, 'access_policy_type',
31
+ AibiDashboardEmbeddingAccessPolicyAccessPolicyType))
32
+
33
+
34
+ class AibiDashboardEmbeddingAccessPolicyAccessPolicyType(Enum):
35
+
36
+ ALLOW_ALL_DOMAINS = 'ALLOW_ALL_DOMAINS'
37
+ ALLOW_APPROVED_DOMAINS = 'ALLOW_APPROVED_DOMAINS'
38
+ DENY_ALL_DOMAINS = 'DENY_ALL_DOMAINS'
39
+
40
+
41
+ @dataclass
42
+ class AibiDashboardEmbeddingAccessPolicySetting:
43
+ aibi_dashboard_embedding_access_policy: AibiDashboardEmbeddingAccessPolicy
44
+
45
+ etag: Optional[str] = None
46
+ """etag used for versioning. The response is at least as fresh as the eTag provided. This is used
47
+ for optimistic concurrency control as a way to help prevent simultaneous writes of a setting
48
+ overwriting each other. It is strongly suggested that systems make use of the etag in the read
49
+ -> update pattern to perform setting updates in order to avoid race conditions. That is, get an
50
+ etag from a GET request, and pass it with the PATCH request to identify the setting version you
51
+ are updating."""
52
+
53
+ setting_name: Optional[str] = None
54
+ """Name of the corresponding setting. This field is populated in the response, but it will not be
55
+ respected even if it's set in the request body. The setting name in the path parameter will be
56
+ respected instead. Setting name is required to be 'default' if the setting only has one instance
57
+ per workspace."""
58
+
59
+ def as_dict(self) -> dict:
60
+ """Serializes the AibiDashboardEmbeddingAccessPolicySetting into a dictionary suitable for use as a JSON request body."""
61
+ body = {}
62
+ if self.aibi_dashboard_embedding_access_policy:
63
+ body[
64
+ 'aibi_dashboard_embedding_access_policy'] = self.aibi_dashboard_embedding_access_policy.as_dict(
65
+ )
66
+ if self.etag is not None: body['etag'] = self.etag
67
+ if self.setting_name is not None: body['setting_name'] = self.setting_name
68
+ return body
69
+
70
+ @classmethod
71
+ def from_dict(cls, d: Dict[str, any]) -> AibiDashboardEmbeddingAccessPolicySetting:
72
+ """Deserializes the AibiDashboardEmbeddingAccessPolicySetting from a dictionary."""
73
+ return cls(aibi_dashboard_embedding_access_policy=_from_dict(
74
+ d, 'aibi_dashboard_embedding_access_policy', AibiDashboardEmbeddingAccessPolicy),
75
+ etag=d.get('etag', None),
76
+ setting_name=d.get('setting_name', None))
77
+
78
+
79
+ @dataclass
80
+ class AibiDashboardEmbeddingApprovedDomains:
81
+ approved_domains: Optional[List[str]] = None
82
+
83
+ def as_dict(self) -> dict:
84
+ """Serializes the AibiDashboardEmbeddingApprovedDomains into a dictionary suitable for use as a JSON request body."""
85
+ body = {}
86
+ if self.approved_domains: body['approved_domains'] = [v for v in self.approved_domains]
87
+ return body
88
+
89
+ @classmethod
90
+ def from_dict(cls, d: Dict[str, any]) -> AibiDashboardEmbeddingApprovedDomains:
91
+ """Deserializes the AibiDashboardEmbeddingApprovedDomains from a dictionary."""
92
+ return cls(approved_domains=d.get('approved_domains', None))
93
+
94
+
95
+ @dataclass
96
+ class AibiDashboardEmbeddingApprovedDomainsSetting:
97
+ aibi_dashboard_embedding_approved_domains: AibiDashboardEmbeddingApprovedDomains
98
+
99
+ etag: Optional[str] = None
100
+ """etag used for versioning. The response is at least as fresh as the eTag provided. This is used
101
+ for optimistic concurrency control as a way to help prevent simultaneous writes of a setting
102
+ overwriting each other. It is strongly suggested that systems make use of the etag in the read
103
+ -> update pattern to perform setting updates in order to avoid race conditions. That is, get an
104
+ etag from a GET request, and pass it with the PATCH request to identify the setting version you
105
+ are updating."""
106
+
107
+ setting_name: Optional[str] = None
108
+ """Name of the corresponding setting. This field is populated in the response, but it will not be
109
+ respected even if it's set in the request body. The setting name in the path parameter will be
110
+ respected instead. Setting name is required to be 'default' if the setting only has one instance
111
+ per workspace."""
112
+
113
+ def as_dict(self) -> dict:
114
+ """Serializes the AibiDashboardEmbeddingApprovedDomainsSetting into a dictionary suitable for use as a JSON request body."""
115
+ body = {}
116
+ if self.aibi_dashboard_embedding_approved_domains:
117
+ body[
118
+ 'aibi_dashboard_embedding_approved_domains'] = self.aibi_dashboard_embedding_approved_domains.as_dict(
119
+ )
120
+ if self.etag is not None: body['etag'] = self.etag
121
+ if self.setting_name is not None: body['setting_name'] = self.setting_name
122
+ return body
123
+
124
+ @classmethod
125
+ def from_dict(cls, d: Dict[str, any]) -> AibiDashboardEmbeddingApprovedDomainsSetting:
126
+ """Deserializes the AibiDashboardEmbeddingApprovedDomainsSetting from a dictionary."""
127
+ return cls(aibi_dashboard_embedding_approved_domains=_from_dict(
128
+ d, 'aibi_dashboard_embedding_approved_domains', AibiDashboardEmbeddingApprovedDomains),
129
+ etag=d.get('etag', None),
130
+ setting_name=d.get('setting_name', None))
131
+
132
+
17
133
  @dataclass
18
134
  class AutomaticClusterUpdateSetting:
19
135
  automatic_cluster_update_workspace: ClusterAutoRestartMessage
@@ -2299,6 +2415,9 @@ class TokenInfo:
2299
2415
  expiry_time: Optional[int] = None
2300
2416
  """Timestamp when the token expires."""
2301
2417
 
2418
+ last_used_day: Optional[int] = None
2419
+ """Approximate timestamp for the day the token was last used. Accurate up to 1 day."""
2420
+
2302
2421
  owner_id: Optional[int] = None
2303
2422
  """User ID of the user that owns the token."""
2304
2423
 
@@ -2316,6 +2435,7 @@ class TokenInfo:
2316
2435
  if self.created_by_username is not None: body['created_by_username'] = self.created_by_username
2317
2436
  if self.creation_time is not None: body['creation_time'] = self.creation_time
2318
2437
  if self.expiry_time is not None: body['expiry_time'] = self.expiry_time
2438
+ if self.last_used_day is not None: body['last_used_day'] = self.last_used_day
2319
2439
  if self.owner_id is not None: body['owner_id'] = self.owner_id
2320
2440
  if self.token_id is not None: body['token_id'] = self.token_id
2321
2441
  if self.workspace_id is not None: body['workspace_id'] = self.workspace_id
@@ -2329,6 +2449,7 @@ class TokenInfo:
2329
2449
  created_by_username=d.get('created_by_username', None),
2330
2450
  creation_time=d.get('creation_time', None),
2331
2451
  expiry_time=d.get('expiry_time', None),
2452
+ last_used_day=d.get('last_used_day', None),
2332
2453
  owner_id=d.get('owner_id', None),
2333
2454
  token_id=d.get('token_id', None),
2334
2455
  workspace_id=d.get('workspace_id', None))
@@ -2435,6 +2556,66 @@ class TokenType(Enum):
2435
2556
  AZURE_ACTIVE_DIRECTORY_TOKEN = 'AZURE_ACTIVE_DIRECTORY_TOKEN'
2436
2557
 
2437
2558
 
2559
+ @dataclass
2560
+ class UpdateAibiDashboardEmbeddingAccessPolicySettingRequest:
2561
+ """Details required to update a setting."""
2562
+
2563
+ allow_missing: bool
2564
+ """This should always be set to true for Settings API. Added for AIP compliance."""
2565
+
2566
+ setting: AibiDashboardEmbeddingAccessPolicySetting
2567
+
2568
+ field_mask: str
2569
+ """Field mask is required to be passed into the PATCH request. Field mask specifies which fields of
2570
+ the setting payload will be updated. The field mask needs to be supplied as single string. To
2571
+ specify multiple fields in the field mask, use comma as the separator (no space)."""
2572
+
2573
+ def as_dict(self) -> dict:
2574
+ """Serializes the UpdateAibiDashboardEmbeddingAccessPolicySettingRequest into a dictionary suitable for use as a JSON request body."""
2575
+ body = {}
2576
+ if self.allow_missing is not None: body['allow_missing'] = self.allow_missing
2577
+ if self.field_mask is not None: body['field_mask'] = self.field_mask
2578
+ if self.setting: body['setting'] = self.setting.as_dict()
2579
+ return body
2580
+
2581
+ @classmethod
2582
+ def from_dict(cls, d: Dict[str, any]) -> UpdateAibiDashboardEmbeddingAccessPolicySettingRequest:
2583
+ """Deserializes the UpdateAibiDashboardEmbeddingAccessPolicySettingRequest from a dictionary."""
2584
+ return cls(allow_missing=d.get('allow_missing', None),
2585
+ field_mask=d.get('field_mask', None),
2586
+ setting=_from_dict(d, 'setting', AibiDashboardEmbeddingAccessPolicySetting))
2587
+
2588
+
2589
+ @dataclass
2590
+ class UpdateAibiDashboardEmbeddingApprovedDomainsSettingRequest:
2591
+ """Details required to update a setting."""
2592
+
2593
+ allow_missing: bool
2594
+ """This should always be set to true for Settings API. Added for AIP compliance."""
2595
+
2596
+ setting: AibiDashboardEmbeddingApprovedDomainsSetting
2597
+
2598
+ field_mask: str
2599
+ """Field mask is required to be passed into the PATCH request. Field mask specifies which fields of
2600
+ the setting payload will be updated. The field mask needs to be supplied as single string. To
2601
+ specify multiple fields in the field mask, use comma as the separator (no space)."""
2602
+
2603
+ def as_dict(self) -> dict:
2604
+ """Serializes the UpdateAibiDashboardEmbeddingApprovedDomainsSettingRequest into a dictionary suitable for use as a JSON request body."""
2605
+ body = {}
2606
+ if self.allow_missing is not None: body['allow_missing'] = self.allow_missing
2607
+ if self.field_mask is not None: body['field_mask'] = self.field_mask
2608
+ if self.setting: body['setting'] = self.setting.as_dict()
2609
+ return body
2610
+
2611
+ @classmethod
2612
+ def from_dict(cls, d: Dict[str, any]) -> UpdateAibiDashboardEmbeddingApprovedDomainsSettingRequest:
2613
+ """Deserializes the UpdateAibiDashboardEmbeddingApprovedDomainsSettingRequest from a dictionary."""
2614
+ return cls(allow_missing=d.get('allow_missing', None),
2615
+ field_mask=d.get('field_mask', None),
2616
+ setting=_from_dict(d, 'setting', AibiDashboardEmbeddingApprovedDomainsSetting))
2617
+
2618
+
2438
2619
  @dataclass
2439
2620
  class UpdateAutomaticClusterUpdateSettingRequest:
2440
2621
  """Details required to update a setting."""
@@ -3103,6 +3284,130 @@ class AccountSettingsAPI:
3103
3284
  return self._personal_compute
3104
3285
 
3105
3286
 
3287
+ class AibiDashboardEmbeddingAccessPolicyAPI:
3288
+ """Controls whether AI/BI published dashboard embedding is enabled, conditionally enabled, or disabled at the
3289
+ workspace level. By default, this setting is conditionally enabled (ALLOW_APPROVED_DOMAINS)."""
3290
+
3291
+ def __init__(self, api_client):
3292
+ self._api = api_client
3293
+
3294
+ def get(self, *, etag: Optional[str] = None) -> AibiDashboardEmbeddingAccessPolicySetting:
3295
+ """Retrieve the AI/BI dashboard embedding access policy.
3296
+
3297
+ Retrieves the AI/BI dashboard embedding access policy. The default setting is ALLOW_APPROVED_DOMAINS,
3298
+ permitting AI/BI dashboards to be embedded on approved domains.
3299
+
3300
+ :param etag: str (optional)
3301
+ etag used for versioning. The response is at least as fresh as the eTag provided. This is used for
3302
+ optimistic concurrency control as a way to help prevent simultaneous writes of a setting overwriting
3303
+ each other. It is strongly suggested that systems make use of the etag in the read -> delete pattern
3304
+ to perform setting deletions in order to avoid race conditions. That is, get an etag from a GET
3305
+ request, and pass it with the DELETE request to identify the rule set version you are deleting.
3306
+
3307
+ :returns: :class:`AibiDashboardEmbeddingAccessPolicySetting`
3308
+ """
3309
+
3310
+ query = {}
3311
+ if etag is not None: query['etag'] = etag
3312
+ headers = {'Accept': 'application/json', }
3313
+
3314
+ res = self._api.do('GET',
3315
+ '/api/2.0/settings/types/aibi_dash_embed_ws_acc_policy/names/default',
3316
+ query=query,
3317
+ headers=headers)
3318
+ return AibiDashboardEmbeddingAccessPolicySetting.from_dict(res)
3319
+
3320
+ def update(self, allow_missing: bool, setting: AibiDashboardEmbeddingAccessPolicySetting,
3321
+ field_mask: str) -> AibiDashboardEmbeddingAccessPolicySetting:
3322
+ """Update the AI/BI dashboard embedding access policy.
3323
+
3324
+ Updates the AI/BI dashboard embedding access policy at the workspace level.
3325
+
3326
+ :param allow_missing: bool
3327
+ This should always be set to true for Settings API. Added for AIP compliance.
3328
+ :param setting: :class:`AibiDashboardEmbeddingAccessPolicySetting`
3329
+ :param field_mask: str
3330
+ Field mask is required to be passed into the PATCH request. Field mask specifies which fields of the
3331
+ setting payload will be updated. The field mask needs to be supplied as single string. To specify
3332
+ multiple fields in the field mask, use comma as the separator (no space).
3333
+
3334
+ :returns: :class:`AibiDashboardEmbeddingAccessPolicySetting`
3335
+ """
3336
+ body = {}
3337
+ if allow_missing is not None: body['allow_missing'] = allow_missing
3338
+ if field_mask is not None: body['field_mask'] = field_mask
3339
+ if setting is not None: body['setting'] = setting.as_dict()
3340
+ headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
3341
+
3342
+ res = self._api.do('PATCH',
3343
+ '/api/2.0/settings/types/aibi_dash_embed_ws_acc_policy/names/default',
3344
+ body=body,
3345
+ headers=headers)
3346
+ return AibiDashboardEmbeddingAccessPolicySetting.from_dict(res)
3347
+
3348
+
3349
+ class AibiDashboardEmbeddingApprovedDomainsAPI:
3350
+ """Controls the list of domains approved to host the embedded AI/BI dashboards. The approved domains list
3351
+ can't be mutated when the current access policy is not set to ALLOW_APPROVED_DOMAINS."""
3352
+
3353
+ def __init__(self, api_client):
3354
+ self._api = api_client
3355
+
3356
+ def get(self, *, etag: Optional[str] = None) -> AibiDashboardEmbeddingApprovedDomainsSetting:
3357
+ """Retrieve the list of domains approved to host embedded AI/BI dashboards.
3358
+
3359
+ Retrieves the list of domains approved to host embedded AI/BI dashboards.
3360
+
3361
+ :param etag: str (optional)
3362
+ etag used for versioning. The response is at least as fresh as the eTag provided. This is used for
3363
+ optimistic concurrency control as a way to help prevent simultaneous writes of a setting overwriting
3364
+ each other. It is strongly suggested that systems make use of the etag in the read -> delete pattern
3365
+ to perform setting deletions in order to avoid race conditions. That is, get an etag from a GET
3366
+ request, and pass it with the DELETE request to identify the rule set version you are deleting.
3367
+
3368
+ :returns: :class:`AibiDashboardEmbeddingApprovedDomainsSetting`
3369
+ """
3370
+
3371
+ query = {}
3372
+ if etag is not None: query['etag'] = etag
3373
+ headers = {'Accept': 'application/json', }
3374
+
3375
+ res = self._api.do('GET',
3376
+ '/api/2.0/settings/types/aibi_dash_embed_ws_apprvd_domains/names/default',
3377
+ query=query,
3378
+ headers=headers)
3379
+ return AibiDashboardEmbeddingApprovedDomainsSetting.from_dict(res)
3380
+
3381
+ def update(self, allow_missing: bool, setting: AibiDashboardEmbeddingApprovedDomainsSetting,
3382
+ field_mask: str) -> AibiDashboardEmbeddingApprovedDomainsSetting:
3383
+ """Update the list of domains approved to host embedded AI/BI dashboards.
3384
+
3385
+ Updates the list of domains approved to host embedded AI/BI dashboards. This update will fail if the
3386
+ current workspace access policy is not ALLOW_APPROVED_DOMAINS.
3387
+
3388
+ :param allow_missing: bool
3389
+ This should always be set to true for Settings API. Added for AIP compliance.
3390
+ :param setting: :class:`AibiDashboardEmbeddingApprovedDomainsSetting`
3391
+ :param field_mask: str
3392
+ Field mask is required to be passed into the PATCH request. Field mask specifies which fields of the
3393
+ setting payload will be updated. The field mask needs to be supplied as single string. To specify
3394
+ multiple fields in the field mask, use comma as the separator (no space).
3395
+
3396
+ :returns: :class:`AibiDashboardEmbeddingApprovedDomainsSetting`
3397
+ """
3398
+ body = {}
3399
+ if allow_missing is not None: body['allow_missing'] = allow_missing
3400
+ if field_mask is not None: body['field_mask'] = field_mask
3401
+ if setting is not None: body['setting'] = setting.as_dict()
3402
+ headers = {'Accept': 'application/json', 'Content-Type': 'application/json', }
3403
+
3404
+ res = self._api.do('PATCH',
3405
+ '/api/2.0/settings/types/aibi_dash_embed_ws_apprvd_domains/names/default',
3406
+ body=body,
3407
+ headers=headers)
3408
+ return AibiDashboardEmbeddingApprovedDomainsSetting.from_dict(res)
3409
+
3410
+
3106
3411
  class AutomaticClusterUpdateAPI:
3107
3412
  """Controls whether automatic cluster update is enabled for the current workspace. By default, it is turned
3108
3413
  off."""
@@ -4580,6 +4885,8 @@ class SettingsAPI:
4580
4885
  def __init__(self, api_client):
4581
4886
  self._api = api_client
4582
4887
 
4888
+ self._aibi_dashboard_embedding_access_policy = AibiDashboardEmbeddingAccessPolicyAPI(self._api)
4889
+ self._aibi_dashboard_embedding_approved_domains = AibiDashboardEmbeddingApprovedDomainsAPI(self._api)
4583
4890
  self._automatic_cluster_update = AutomaticClusterUpdateAPI(self._api)
4584
4891
  self._compliance_security_profile = ComplianceSecurityProfileAPI(self._api)
4585
4892
  self._default_namespace = DefaultNamespaceAPI(self._api)
@@ -4588,6 +4895,16 @@ class SettingsAPI:
4588
4895
  self._enhanced_security_monitoring = EnhancedSecurityMonitoringAPI(self._api)
4589
4896
  self._restrict_workspace_admins = RestrictWorkspaceAdminsAPI(self._api)
4590
4897
 
4898
+ @property
4899
+ def aibi_dashboard_embedding_access_policy(self) -> AibiDashboardEmbeddingAccessPolicyAPI:
4900
+ """Controls whether AI/BI published dashboard embedding is enabled, conditionally enabled, or disabled at the workspace level."""
4901
+ return self._aibi_dashboard_embedding_access_policy
4902
+
4903
+ @property
4904
+ def aibi_dashboard_embedding_approved_domains(self) -> AibiDashboardEmbeddingApprovedDomainsAPI:
4905
+ """Controls the list of domains approved to host the embedded AI/BI dashboards."""
4906
+ return self._aibi_dashboard_embedding_approved_domains
4907
+
4591
4908
  @property
4592
4909
  def automatic_cluster_update(self) -> AutomaticClusterUpdateAPI:
4593
4910
  """Controls whether automatic cluster update is enabled for the current workspace."""
@@ -4751,7 +5068,8 @@ class TokenManagementAPI:
4751
5068
  access_control_list: Optional[List[TokenAccessControlRequest]] = None) -> TokenPermissions:
4752
5069
  """Set token permissions.
4753
5070
 
4754
- Sets permissions on all tokens. Tokens can inherit permissions from their root object.
5071
+ Sets permissions on an object, replacing existing permissions if they exist. Deletes all direct
5072
+ permissions if none are specified. Objects can inherit permissions from their root object.
4755
5073
 
4756
5074
  :param access_control_list: List[:class:`TokenAccessControlRequest`] (optional)
4757
5075