Skip to content

Commit 897d088

Browse files
authored
always use the server version by default (#1796)
Fixes #876 and #959 by auto-detecting and use the server's current REST API version *after* signin. This gives cleaner error scenarios when something goes wrong connecting/signing in.
1 parent e9d4860 commit 897d088

4 files changed

Lines changed: 12 additions & 9 deletions

File tree

tableauserverclient/server/endpoint/auth_endpoint.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ def sign_in(self, auth_req: "Credentials") -> contextmgr:
8989
auth_token = parsed_response.find("t:credentials", namespaces=self.parent_srv.namespace).get("token", None)
9090
self.parent_srv._set_auth(site_id, user_id, auth_token, site_url)
9191
logger.info(f"Signed into {self.parent_srv.server_address} as user with id {user_id}")
92+
if self.parent_srv._use_server_version:
93+
self.parent_srv.use_server_version()
9294
return Auth.contextmgr(self.sign_out)
9395

9496
# We use the same request that username/password login uses for all auth types.

tableauserverclient/server/server.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,7 @@ def __init__(self, server_address, use_server_version=False, http_options=None,
195195
self.validate_connection_settings() # does not make an actual outgoing request
196196

197197
self.version = default_server_version
198-
if use_server_version:
199-
self.use_server_version() # this makes a server call
198+
self._use_server_version = use_server_version
200199

201200
def validate_connection_settings(self):
202201
try:

test/http/test_http_requests.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,11 @@ def test_init_server_model_bad_server_name_not_version_check():
4949
server = TSC.Server("fake-url", use_server_version=False)
5050

5151

52-
@mock.patch("requests.sessions.Session.get", side_effect=mocked_requests_get)
53-
def test_init_server_model_bad_server_name_do_version_check(mock_get):
52+
def test_init_server_model_bad_server_name_do_version_check():
53+
# use_server_version=True no longer makes a network call at construction;
54+
# version detection is deferred until sign_in
5455
server = TSC.Server("fake-url", use_server_version=True)
56+
assert server._use_server_version is True
5557

5658

5759
def test_init_server_model_bad_server_name_not_version_check_random_options():

test/test_server_info.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ def test_server_info_use_highest_version_upgrades(server: TSC.Server) -> None:
6666

6767

6868
def test_server_use_server_version_flag(server: TSC.Server) -> None:
69-
si_response_xml = SERVER_INFO_25_XML.read_text()
70-
with requests_mock.mock() as m:
71-
m.get("http://test/api/2.4/serverInfo", text=si_response_xml)
72-
server = TSC.Server("http://test", use_server_version=True)
73-
assert server.version == "2.5"
69+
# use_server_version=True defers version detection to sign_in, so the
70+
# version is not updated at construction time
71+
server = TSC.Server("http://test", use_server_version=True)
72+
assert server._use_server_version is True
73+
assert server.version == "2.4" # still at default until sign_in
7474

7575

7676
def test_server_wrong_site(server: TSC.Server) -> None:

0 commit comments

Comments
 (0)