33from packaging .version import Version
44from functools import wraps
55from xml .etree .ElementTree import ParseError
6- from typing import Any , Callable , Dict , Optional , TYPE_CHECKING
6+ from typing import Any , Callable , Dict , Optional , TYPE_CHECKING , Mapping
77
88from .exceptions import (
99 ServerResponseError ,
@@ -35,15 +35,35 @@ def __init__(self, parent_srv: "Server"):
3535 self .parent_srv = parent_srv
3636
3737 @staticmethod
38- def _make_common_headers (auth_token , content_type ):
39- _client_version : Optional [str ] = get_versions ()["version" ]
40- headers = {}
38+ def set_parameters (http_options , auth_token , content , content_type , parameters ) -> Dict [str , Any ]:
39+ parameters = parameters or {}
40+ parameters .update (http_options )
41+ if "headers" not in parameters :
42+ parameters ["headers" ] = {}
43+
4144 if auth_token is not None :
42- headers [TABLEAU_AUTH_HEADER ] = auth_token
45+ parameters [ " headers" ] [TABLEAU_AUTH_HEADER ] = auth_token
4346 if content_type is not None :
44- headers [CONTENT_TYPE_HEADER ] = content_type
45- headers [USER_AGENT_HEADER ] = "Tableau Server Client/{}" .format (_client_version )
46- return headers
47+ parameters ["headers" ][CONTENT_TYPE_HEADER ] = content_type
48+
49+ Endpoint .set_user_agent (parameters )
50+ if content is not None :
51+ parameters ["data" ] = content
52+ return parameters or {}
53+
54+ @staticmethod
55+ def set_user_agent (parameters ):
56+ if USER_AGENT_HEADER not in parameters ["headers" ]:
57+ if USER_AGENT_HEADER in parameters :
58+ parameters ["headers" ][USER_AGENT_HEADER ] = parameters [USER_AGENT_HEADER ]
59+ else :
60+ # only set the TSC user agent if not already populated
61+ _client_version : Optional [str ] = get_versions ()["version" ]
62+ parameters ["headers" ][USER_AGENT_HEADER ] = "Tableau Server Client/{}" .format (_client_version )
63+
64+ # result: parameters["headers"]["User-Agent"] is set
65+ # return explicitly for testing only
66+ return parameters
4767
4868 def _make_request (
4969 self ,
@@ -54,18 +74,14 @@ def _make_request(
5474 content_type : Optional [str ] = None ,
5575 parameters : Optional [Dict [str , Any ]] = None ,
5676 ) -> "Response" :
57- parameters = parameters or {}
58- if "headers" not in parameters :
59- parameters ["headers" ] = {}
60- parameters .update (self .parent_srv .http_options )
61- parameters ["headers" ].update (Endpoint ._make_common_headers (auth_token , content_type ))
62-
63- if content is not None :
64- parameters ["data" ] = content
77+ parameters = Endpoint .set_parameters (
78+ self .parent_srv .http_options , auth_token , content , content_type , parameters
79+ )
6580
66- logger .debug ("request {}, url: {}" .format (method . __name__ , url ))
81+ logger .debug ("request {}, url: {}" .format (method , url ))
6782 if content :
68- logger .debug ("request content: {}" .format (helpers .strings .redact_xml (content [:1000 ])))
83+ redacted = helpers .strings .redact_xml (content [:1000 ])
84+ logger .debug ("request content: {}" .format (redacted ))
6985
7086 server_response = method (url , ** parameters )
7187 self ._check_status (server_response , url )
0 commit comments