Skip to content

Commit 7c76bc4

Browse files
jorwoodsbcantoni
authored andcommitted
feat: support extensions api (#1672)
Adding support for the REST APIs which provide access to Tableau Extensions configuration. --------- Co-authored-by: Jordan Woods <13803242+jorwoods@users.noreply.github.com> Co-authored-by: Brian Cantoni <bcantoni@salesforce.com>
1 parent 9802269 commit 7c76bc4

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

tableauserverclient/server/request_factory.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1665,6 +1665,64 @@ def update_req(self, xml_request: ET.Element, oidc_item: SiteOIDCConfiguration)
16651665
return ET.tostring(xml_request)
16661666

16671667

1668+
class ExtensionsRequest:
1669+
@_tsrequest_wrapped
1670+
def update_server_extensions(self, xml_request: ET.Element, extensions_server: "ExtensionsServer") -> None:
1671+
extensions_element = ET.SubElement(xml_request, "extensionsServerSettings")
1672+
if not isinstance(extensions_server.enabled, bool):
1673+
raise ValueError(f"Extensions Server missing enabled: {extensions_server}")
1674+
enabled_element = ET.SubElement(extensions_element, "extensionsGloballyEnabled")
1675+
enabled_element.text = str(extensions_server.enabled).lower()
1676+
1677+
if extensions_server.block_list is None:
1678+
return
1679+
for blocked in extensions_server.block_list:
1680+
blocked_element = ET.SubElement(extensions_element, "blockList")
1681+
blocked_element.text = blocked
1682+
return
1683+
1684+
@_tsrequest_wrapped
1685+
def update_site_extensions(self, xml_request: ET.Element, extensions_site_settings: ExtensionsSiteSettings) -> None:
1686+
ext_element = ET.SubElement(xml_request, "extensionsSiteSettings")
1687+
if not isinstance(extensions_site_settings.enabled, bool):
1688+
raise ValueError(f"Extensions Site Settings missing enabled: {extensions_site_settings}")
1689+
enabled_element = ET.SubElement(ext_element, "extensionsEnabled")
1690+
enabled_element.text = str(extensions_site_settings.enabled).lower()
1691+
if not isinstance(extensions_site_settings.use_default_setting, bool):
1692+
raise ValueError(
1693+
f"Extensions Site Settings missing use_default_setting: {extensions_site_settings.use_default_setting}"
1694+
)
1695+
default_element = ET.SubElement(ext_element, "useDefaultSetting")
1696+
default_element.text = str(extensions_site_settings.use_default_setting).lower()
1697+
if extensions_site_settings.allow_trusted is not None:
1698+
allow_trusted_element = ET.SubElement(ext_element, "allowTrusted")
1699+
allow_trusted_element.text = str(extensions_site_settings.allow_trusted).lower()
1700+
if extensions_site_settings.include_sandboxed is not None:
1701+
include_sandboxed_element = ET.SubElement(ext_element, "includeSandboxed")
1702+
include_sandboxed_element.text = str(extensions_site_settings.include_sandboxed).lower()
1703+
if extensions_site_settings.include_tableau_built is not None:
1704+
include_tableau_built_element = ET.SubElement(ext_element, "includeTableauBuilt")
1705+
include_tableau_built_element.text = str(extensions_site_settings.include_tableau_built).lower()
1706+
if extensions_site_settings.include_partner_built is not None:
1707+
include_partner_built_element = ET.SubElement(ext_element, "includePartnerBuilt")
1708+
include_partner_built_element.text = str(extensions_site_settings.include_partner_built).lower()
1709+
1710+
if extensions_site_settings.safe_list is None:
1711+
return
1712+
1713+
safe_element = ET.SubElement(ext_element, "safeList")
1714+
for safe in extensions_site_settings.safe_list:
1715+
if safe.url is not None:
1716+
url_element = ET.SubElement(safe_element, "url")
1717+
url_element.text = safe.url
1718+
if safe.full_data_allowed is not None:
1719+
full_data_element = ET.SubElement(safe_element, "fullDataAllowed")
1720+
full_data_element.text = str(safe.full_data_allowed).lower()
1721+
if safe.prompt_needed is not None:
1722+
prompt_element = ET.SubElement(safe_element, "promptNeeded")
1723+
prompt_element.text = str(safe.prompt_needed).lower()
1724+
1725+
16681726
class RequestFactory:
16691727
Auth = AuthRequest()
16701728
Connection = Connection()

tableauserverclient/server/server.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
Tags,
4040
VirtualConnections,
4141
OIDC,
42+
Extensions,
4243
)
4344
from tableauserverclient.server.exceptions import (
4445
ServerInfoEndpointNotFoundError,
@@ -185,6 +186,7 @@ def __init__(self, server_address, use_server_version=False, http_options=None,
185186
self.tags = Tags(self)
186187
self.virtual_connections = VirtualConnections(self)
187188
self.oidc = OIDC(self)
189+
self.extensions = Extensions(self)
188190

189191
self._session = self._session_factory()
190192
self._http_options = dict() # must set this before making a server call

0 commit comments

Comments
 (0)