Skip to content

Commit ffa2d49

Browse files
authored
catch exceptions from ServerInfo (#1204)
* catch all exceptions from ServerInfoEndpoint remove use of warnings add check before making http request
1 parent 83c216e commit ffa2d49

File tree

4 files changed

+24
-7
lines changed

4 files changed

+24
-7
lines changed

tableauserverclient/models/server_info_item.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
import warnings
23
import xml
34

@@ -35,11 +36,18 @@ def rest_api_version(self):
3536

3637
@classmethod
3738
def from_response(cls, resp, ns):
39+
logger = logging.getLogger("TSC.ServerInfo")
3840
try:
3941
parsed_response = fromstring(resp)
4042
except xml.etree.ElementTree.ParseError as error:
41-
print("Unexpected response for ServerInfo: {}".format(resp))
43+
logger.info("Unexpected response for ServerInfo: {}".format(resp))
44+
logger.info(error)
4245
return cls("Unknown", "Unknown", "Unknown")
46+
except Exception as error:
47+
logger.info("Unexpected response for ServerInfo: {}".format(resp))
48+
logger.info(error)
49+
return cls("Unknown", "Unknown", "Unknown")
50+
4351
product_version_tag = parsed_response.find(".//t:productVersion", namespaces=ns)
4452
rest_api_version_tag = parsed_response.find(".//t:restApiVersion", namespaces=ns)
4553

tableauserverclient/server/endpoint/server_info_endpoint.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,9 @@ def get(self):
4141
raise EndpointUnavailableError(e)
4242
raise e
4343

44-
self._info = ServerInfoItem.from_response(server_response.content, self.parent_srv.namespace)
44+
try:
45+
self._info = ServerInfoItem.from_response(server_response.content, self.parent_srv.namespace)
46+
except Exception as e:
47+
logging.getLogger(self.__class__.__name__).debug(e)
48+
logging.getLogger(self.__class__.__name__).debug(server_response.content)
4549
return self._info

tableauserverclient/server/server.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,28 +147,32 @@ def _set_auth(self, site_id, user_id, auth_token):
147147
self._auth_token = auth_token
148148

149149
def _get_legacy_version(self):
150-
dest = Endpoint(self)
151-
response = dest._make_request(method=self.session.get, url=self.server_address + "/auth?format=xml")
150+
# the serverInfo call was introduced in 2.4, earlier than that we have this different call
151+
response = self._session.get(self.server_address + "/auth?format=xml")
152152
try:
153153
info_xml = fromstring(response.content)
154154
except ParseError as parseError:
155155
self.logger.info(parseError)
156156
self.logger.info("Could not read server version info. The server may not be running or configured.")
157157
return self.version
158158
prod_version = info_xml.find(".//product_version").text
159-
version = _PRODUCT_TO_REST_VERSION.get(prod_version, default_server_version) # 2.4
159+
version = _PRODUCT_TO_REST_VERSION.get(prod_version, minimum_supported_server_version)
160160
return version
161161

162162
def _determine_highest_version(self):
163163
try:
164164
old_version = self.version
165165
version = self.server_info.get().rest_api_version
166+
except ServerInfoEndpointNotFoundError as e:
167+
self.logger.info("Could not get version info from server: {}{}".format(e.__class__, e))
168+
version = self._get_legacy_version()
166169
except EndpointUnavailableError as e:
170+
self.logger.info("Could not get version info from server: {}{}".format(e.__class__, e))
167171
version = self._get_legacy_version()
168172
except Exception as e:
169173
self.logger.info("Could not get version info from server: {}{}".format(e.__class__, e))
170174
version = None
171-
self.logger.info(version, old_version)
175+
self.logger.info("versions: {}, {}".format(version, old_version))
172176
return version or old_version
173177

174178
def use_server_version(self):

test/test_server_info.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ def test_server_info_use_highest_version_downgrades(self):
4242
m.get(self.server.server_address + "/api/2.4/serverInfo", text=si_response_xml, status_code=404)
4343
m.get(self.server.server_address + "/auth?format=xml", text=auth_response_xml)
4444
self.server.use_server_version()
45-
self.assertEqual(self.server.version, "2.4")
45+
# does server-version[9.2] lookup in PRODUCT_TO_REST_VERSION
46+
self.assertEqual(self.server.version, "2.2")
4647

4748
def test_server_info_use_highest_version_upgrades(self):
4849
with open(SERVER_INFO_GET_XML, "rb") as f:

0 commit comments

Comments
 (0)