1+ import logging
12import warnings
23
34import requests
45import urllib3
56
6- from defusedxml .ElementTree import fromstring
7+ from defusedxml .ElementTree import fromstring , ParseError
78from packaging .version import Version
89from .endpoint import (
910 Sites ,
@@ -103,12 +104,13 @@ def __init__(self, server_address, use_server_version=False, http_options=None,
103104
104105 def validate_server_connection (self ):
105106 try :
106- if not self ._server_address .startswith ("http" ):
107+ if not self ._server_address .startswith ("http://" ) and not self . _server_address . startswith ( "https:// " ):
107108 self ._server_address = "http://" + self ._server_address
108- self ._session .prepare_request (requests .Request ("GET" , url = self ._server_address , params = self ._http_options ))
109+ self ._session .prepare_request (
110+ requests .Request ("GET" , url = self ._server_address , params = self ._http_options )
111+ )
109112 except Exception as req_ex :
110- warnings .warn ("Invalid server initialization\n {}" .format (req_ex .__str__ ()), UserWarning )
111- print ("==================" )
113+ raise ValueError ("Invalid server initialization" , req_ex )
112114
113115 def __repr__ (self ):
114116 return "<TableauServerClient> [Connection: {}, {}]" .format (self .baseurl , self .server_info .serverInfo )
@@ -142,7 +144,13 @@ def _set_auth(self, site_id, user_id, auth_token):
142144
143145 def _get_legacy_version (self ):
144146 response = self ._session .get (self .server_address + "/auth?format=xml" )
145- info_xml = fromstring (response .content )
147+ try :
148+ info_xml = fromstring (response .content )
149+ except ParseError as parseError :
150+ logging .getLogger ("TSC.server" ).info (
151+ "Could not read server version info. The server may not be running or configured."
152+ )
153+ return self .version
146154 prod_version = info_xml .find (".//product_version" ).text
147155 version = _PRODUCT_TO_REST_VERSION .get (prod_version , "2.1" ) # 2.1
148156 return version
@@ -154,9 +162,6 @@ def _determine_highest_version(self):
154162 version = self .server_info .get ().rest_api_version
155163 except ServerInfoEndpointNotFoundError :
156164 version = self ._get_legacy_version ()
157- except BaseException as e :
158- warnings .warn ("Could not get version info from server, guessing {}" .format (e .__class__ ))
159- version = self ._get_legacy_version ()
160165
161166 self .version = old_version
162167
@@ -167,8 +172,6 @@ def use_server_version(self):
167172
168173 def use_highest_version (self ):
169174 self .use_server_version ()
170- import warnings
171-
172175 warnings .warn ("use use_server_version instead" , DeprecationWarning )
173176
174177 def check_at_least_version (self , target : str ):
0 commit comments