1- from typing import Optional , TypeVar , overload
1+ from typing import Optional , overload
22from typing_extensions import Self
33
44from defusedxml .ElementTree import fromstring
55
6- T = TypeVar ( "T" )
6+ from tableauserverclient . models . property_decorators import property_is_boolean
77
88
99class ExtensionsServer :
@@ -17,6 +17,7 @@ def enabled(self) -> Optional[bool]:
1717 return self ._enabled
1818
1919 @enabled .setter
20+ @property_is_boolean
2021 def enabled (self , value : Optional [bool ]) -> None :
2122 self ._enabled = value
2223
@@ -44,6 +45,87 @@ def from_response(cls: type[Self], response, ns) -> Self:
4445 return obj
4546
4647
48+ class SafeExtension :
49+ def __init__ (
50+ self , url : Optional [str ] = None , full_data_allowed : Optional [bool ] = None , prompt_needed : Optional [bool ] = None
51+ ) -> None :
52+ self .url = url
53+ self ._full_data_allowed = full_data_allowed
54+ self ._prompt_needed = prompt_needed
55+
56+ @property
57+ def full_data_allowed (self ) -> Optional [bool ]:
58+ return self ._full_data_allowed
59+
60+ @full_data_allowed .setter
61+ @property_is_boolean
62+ def full_data_allowed (self , value : Optional [bool ]) -> None :
63+ self ._full_data_allowed = value
64+
65+ @property
66+ def prompt_needed (self ) -> Optional [bool ]:
67+ return self ._prompt_needed
68+
69+ @prompt_needed .setter
70+ @property_is_boolean
71+ def prompt_needed (self , value : Optional [bool ]) -> None :
72+ self ._prompt_needed = value
73+
74+
75+ class ExtensionsSiteSettings :
76+ def __init__ (self ) -> None :
77+ self ._enabled : Optional [bool ] = None
78+ self ._use_default_settings : Optional [bool ] = None
79+ self .safe_list : Optional [list [SafeExtension ]] = None
80+
81+ @property
82+ def enabled (self ) -> Optional [bool ]:
83+ return self ._enabled
84+
85+ @enabled .setter
86+ @property_is_boolean
87+ def enabled (self , value : Optional [bool ]) -> None :
88+ self ._enabled = value
89+
90+ @property
91+ def use_default_settings (self ) -> Optional [bool ]:
92+ return self ._use_default_settings
93+
94+ @use_default_settings .setter
95+ @property_is_boolean
96+ def use_default_settings (self , value : Optional [bool ]) -> None :
97+ self ._use_default_settings = value
98+
99+ @classmethod
100+ def from_response (cls : type [Self ], response , ns ) -> Self :
101+ xml = fromstring (response )
102+ element = xml .find (".//t:extensionsSiteSettings" , namespaces = ns )
103+ obj = cls ()
104+ if element is None :
105+ raise ValueError ("Missing extensionsSiteSettings element in response" )
106+
107+ if (enabled_element := element .find ("./t:extensionsEnabled" , namespaces = ns )) is not None :
108+ obj .enabled = string_to_bool (enabled_element .text )
109+ if (default_settings_element := element .find ("./t:useDefaultSetting" , namespaces = ns )) is not None :
110+ obj .use_default_settings = string_to_bool (default_settings_element .text )
111+
112+ safe_list = []
113+ for safe_extension_element in element .findall ("./t:safeList" , namespaces = ns ):
114+ url = safe_extension_element .find ("./t:url" , namespaces = ns )
115+ full_data_allowed = safe_extension_element .find ("./t:fullDataAllowed" , namespaces = ns )
116+ prompt_needed = safe_extension_element .find ("./t:promptNeeded" , namespaces = ns )
117+
118+ safe_extension = SafeExtension (
119+ url = url .text if url is not None else None ,
120+ full_data_allowed = string_to_bool (full_data_allowed .text ) if full_data_allowed is not None else None ,
121+ prompt_needed = string_to_bool (prompt_needed .text ) if prompt_needed is not None else None ,
122+ )
123+ safe_list .append (safe_extension )
124+
125+ obj .safe_list = safe_list
126+ return obj
127+
128+
47129@overload
48130def string_to_bool (s : str ) -> bool : ...
49131
0 commit comments