Skip to content

Commit 8d6b3f2

Browse files
committed
chore(typing): request factory ts_wrapped
1 parent ffa0601 commit 8d6b3f2

1 file changed

Lines changed: 17 additions & 9 deletions

File tree

tableauserverclient/server/request_factory.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import 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

44
from requests.packages.urllib3.fields import RequestField
55
from requests.packages.urllib3.filepost import encode_multipart_formdata
6+
from typing_extensions import Concatenate
67

78
from 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

10681076
class Connection(object):
@@ -1090,7 +1098,7 @@ def update_req(self, xml_request: ET.Element, connection_item: "ConnectionItem")
10901098

10911099
class 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

12281236
class 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

Comments
 (0)