11import xml .etree .ElementTree as ET
2- from typing import Any , Dict , Iterable , List , Optional , Set , Tuple , Union , TYPE_CHECKING
2+ from typing import Any , Callable , Dict , Iterable , List , Optional , ParamSpec , Set , Tuple , TypeVar , TYPE_CHECKING , Union
33
44from requests .packages .urllib3 .fields import RequestField
55from requests .packages .urllib3 .filepost import encode_multipart_formdata
6+ from typing_extensions import Concatenate
67
78from tableauserverclient .models import *
89
@@ -23,8 +24,12 @@ def _add_multipart(parts: Dict) -> Tuple[Any, str]:
2324 return xml_request , content_type
2425
2526
26- def _tsrequest_wrapped (func ):
27- def wrapper (self , * args , ** kwargs ) -> bytes :
27+ T = TypeVar ("T" )
28+ P = ParamSpec ("P" )
29+
30+
31+ def _tsrequest_wrapped (func : Callable [Concatenate [T , ET .Element , P ], Any ]) -> Callable [Concatenate [T , P ], bytes ]:
32+ def wrapper (self : T , * args : P .args , ** kwargs : P .kwargs ) -> bytes :
2833 xml_request = ET .Element ("tsRequest" )
2934 func (self , xml_request , * args , ** kwargs )
3035 return ET .tostring (xml_request )
@@ -388,7 +393,7 @@ def add_user_req(self, user_id: str) -> bytes:
388393 return ET .tostring (xml_request )
389394
390395 @_tsrequest_wrapped
391- def add_users_req (self , xml_request , users : Iterable [Union [str , UserItem ]]) -> bytes :
396+ def add_users_req (self , xml_request : ET . Element , users : Iterable [Union [str , UserItem ]]) -> bytes :
392397 users_element = ET .SubElement (xml_request , "users" )
393398 for user in users :
394399 user_element = ET .SubElement (users_element , "user" )
@@ -399,7 +404,7 @@ def add_users_req(self, xml_request, users: Iterable[Union[str, UserItem]]) -> b
399404 return ET .tostring (xml_request )
400405
401406 @_tsrequest_wrapped
402- def remove_users_req (self , xml_request , users : Iterable [Union [str , UserItem ]]) -> bytes :
407+ def remove_users_req (self , xml_request : ET . Element , users : Iterable [Union [str , UserItem ]]) -> bytes :
403408 users_element = ET .SubElement (xml_request , "users" )
404409 for user in users :
405410 user_element = ET .SubElement (users_element , "user" )
@@ -1055,14 +1060,17 @@ def publish_req_chunked(
10551060 return _add_multipart (parts )
10561061
10571062 @_tsrequest_wrapped
1058- def embedded_extract_req (self , xml_request , include_all = True , datasources = None ):
1063+ def embedded_extract_req (
1064+ self , xml_request : ET .Element , include_all : bool = True , datasources : Optional [Iterable [DatasourceItem ]] = None
1065+ ) -> None :
10591066 list_element = ET .SubElement (xml_request , "datasources" )
10601067 if include_all :
10611068 list_element .attrib ["includeAll" ] = "true"
10621069 elif datasources :
10631070 for datasource_item in datasources :
10641071 datasource_element = ET .SubElement (list_element , "datasource" )
1065- datasource_element .attrib ["id" ] = datasource_item .id
1072+ if (id_ := datasource_item .id ) is not None :
1073+ datasource_element .attrib ["id" ] = id_
10661074
10671075
10681076class Connection (object ):
@@ -1090,7 +1098,7 @@ def update_req(self, xml_request: ET.Element, connection_item: "ConnectionItem")
10901098
10911099class TaskRequest (object ):
10921100 @_tsrequest_wrapped
1093- def run_req (self , xml_request , task_item ) :
1101+ def run_req (self , xml_request : ET . Element , task_item : Any ) -> None :
10941102 # Send an empty tsRequest
10951103 pass
10961104
@@ -1227,7 +1235,7 @@ def update_req(self, xml_request: ET.Element, subscription_item: "SubscriptionIt
12271235
12281236class EmptyRequest (object ):
12291237 @_tsrequest_wrapped
1230- def empty_req (self , xml_request ) :
1238+ def empty_req (self , xml_request : ET . Element ) -> None :
12311239 pass
12321240
12331241
0 commit comments