diff --git a/tableauserverclient/server/endpoint/auth_endpoint.py b/tableauserverclient/server/endpoint/auth_endpoint.py index 9e316d042..ed42d32e6 100644 --- a/tableauserverclient/server/endpoint/auth_endpoint.py +++ b/tableauserverclient/server/endpoint/auth_endpoint.py @@ -17,10 +17,6 @@ def __enter__(self): def __exit__(self, exc_type, exc_val, exc_tb): self._callback() - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/auth".format(self.parent_srv.baseurl) diff --git a/tableauserverclient/server/endpoint/datasources_endpoint.py b/tableauserverclient/server/endpoint/datasources_endpoint.py index ecb66724c..e8e4e4bf6 100644 --- a/tableauserverclient/server/endpoint/datasources_endpoint.py +++ b/tableauserverclient/server/endpoint/datasources_endpoint.py @@ -16,10 +16,6 @@ class Datasources(Endpoint): - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/sites/{1}/datasources".format(self.parent_srv.baseurl, self.parent_srv.site_id) diff --git a/tableauserverclient/server/endpoint/endpoint.py b/tableauserverclient/server/endpoint/endpoint.py index fd8cb3ac7..b532abfcb 100644 --- a/tableauserverclient/server/endpoint/endpoint.py +++ b/tableauserverclient/server/endpoint/endpoint.py @@ -8,64 +8,61 @@ class Endpoint(object): - def __init__(self): - self.parent_srv = None + def __init__(self, parent_srv): + self.parent_srv = parent_srv @staticmethod - def _check_status(server_response): - if server_response.status_code not in Success_codes: - raise ServerResponseError.from_response(server_response.content) + def _make_common_headers(auth_token, content_type): + retval = {} + if auth_token is not None: + retval['x-tableau-auth'] = auth_token + if content_type is not None: + retval['content-type'] = content_type - def get_unauthenticated_request(self, url, request_object=None): + def _make_request(self, method, url, content=None, request_object=None, auth_token=None, content_type=None): if request_object is not None: url = request_object.apply_query_params(url) - server_response = self.parent_srv.session.get(url, **self.parent_srv.http_options) + parameters = {} + parameters.update(self.parent_srv.http_options) + parameters['headers'] = Endpoint._make_common_headers(auth_token, content_type) + + if content is not None: + parameters['data'] = content + + server_response = method(url, **parameters) self._check_status(server_response) + + # This check is to determine if the response is a text response (xml or otherwise) + # so that we do not attempt to log bytes and other binary data. if server_response.encoding: logger.debug(u'Server response from {0}:\n\t{1}'.format( url, server_response.content.decode(server_response.encoding))) return server_response + @staticmethod + def _check_status(server_response): + if server_response.status_code not in Success_codes: + raise ServerResponseError.from_response(server_response.content) + + def get_unauthenticated_request(self, url, request_object=None): + return self._make_request(self.parent_srv.session.get, url, request_object=request_object) + def get_request(self, url, request_object=None): - if request_object is not None: - url = request_object.apply_query_params(url) - auth_token = self.parent_srv.auth_token - server_response = self.parent_srv.session.get(url, - headers={'x-tableau-auth': auth_token}, - **self.parent_srv.http_options) - self._check_status(server_response) - if server_response.encoding: - logger.debug(u'Server response from {0}: \n\t{1}'.format( - url, server_response.content.decode(server_response.encoding))) - return server_response + return self._make_request(self.parent_srv.session.get, url, auth_token=self.parent_srv.auth_token, + request_object=request_object) def delete_request(self, url): - auth_token = self.parent_srv.auth_token - server_response = self.parent_srv.session.delete(url, - headers={'x-tableau-auth': auth_token}, - **self.parent_srv.http_options) - self._check_status(server_response) + # We don't return anything for a delete + self._make_request(self.parent_srv.session.delete, url, auth_token=self.parent_srv.auth_token) def put_request(self, url, xml_request, content_type='text/xml'): - auth_token = self.parent_srv.auth_token - server_response = self.parent_srv.session.put(url, data=xml_request, - headers={'x-tableau-auth': auth_token, - 'content-type': content_type}, - **self.parent_srv.http_options) - self._check_status(server_response) - if server_response.encoding: - logger.debug(u'Server response from {0}: \n\t{1}'.format( - url, server_response.content.decode(server_response.encoding))) - return server_response + return self._make_request(self.parent_srv.session.put, url, + content=xml_request, + auth_token=self.parent_srv.auth_token, + content_type=content_type) def post_request(self, url, xml_request, content_type='text/xml'): - auth_token = self.parent_srv.auth_token - server_response = self.parent_srv.session.post(url, data=xml_request, - headers={'x-tableau-auth': auth_token, - 'content-type': content_type}, - **self.parent_srv.http_options) - self._check_status(server_response) - if server_response.encoding: - logger.debug(u'Server response from {0}: \n\t{1}'.format( - url, server_response.content.decode(server_response.encoding))) - return server_response + return self._make_request(self.parent_srv.session.post, url, + content=xml_request, + auth_token=self.parent_srv.auth_token, + content_type=content_type) diff --git a/tableauserverclient/server/endpoint/fileuploads_endpoint.py b/tableauserverclient/server/endpoint/fileuploads_endpoint.py index 65a3b2526..df26d3db5 100644 --- a/tableauserverclient/server/endpoint/fileuploads_endpoint.py +++ b/tableauserverclient/server/endpoint/fileuploads_endpoint.py @@ -13,8 +13,7 @@ class Fileuploads(Endpoint): def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv + super(Fileuploads, self).__init__(parent_srv) self.upload_id = '' @property diff --git a/tableauserverclient/server/endpoint/groups_endpoint.py b/tableauserverclient/server/endpoint/groups_endpoint.py index a21888695..e1eb2ecfc 100644 --- a/tableauserverclient/server/endpoint/groups_endpoint.py +++ b/tableauserverclient/server/endpoint/groups_endpoint.py @@ -8,10 +8,6 @@ class Groups(Endpoint): - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/sites/{1}/groups".format(self.parent_srv.baseurl, self.parent_srv.site_id) diff --git a/tableauserverclient/server/endpoint/projects_endpoint.py b/tableauserverclient/server/endpoint/projects_endpoint.py index 484ee2aff..b146d4418 100644 --- a/tableauserverclient/server/endpoint/projects_endpoint.py +++ b/tableauserverclient/server/endpoint/projects_endpoint.py @@ -8,10 +8,6 @@ class Projects(Endpoint): - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/sites/{1}/projects".format(self.parent_srv.baseurl, self.parent_srv.site_id) diff --git a/tableauserverclient/server/endpoint/schedules_endpoint.py b/tableauserverclient/server/endpoint/schedules_endpoint.py index 9b4721941..705f9577b 100644 --- a/tableauserverclient/server/endpoint/schedules_endpoint.py +++ b/tableauserverclient/server/endpoint/schedules_endpoint.py @@ -8,10 +8,6 @@ class Schedules(Endpoint): - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/schedules".format(self.parent_srv.baseurl) diff --git a/tableauserverclient/server/endpoint/server_info_endpoint.py b/tableauserverclient/server/endpoint/server_info_endpoint.py index 901778c58..1fb17f26f 100644 --- a/tableauserverclient/server/endpoint/server_info_endpoint.py +++ b/tableauserverclient/server/endpoint/server_info_endpoint.py @@ -6,10 +6,6 @@ class ServerInfo(Endpoint): - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/serverInfo".format(self.parent_srv.baseurl) diff --git a/tableauserverclient/server/endpoint/sites_endpoint.py b/tableauserverclient/server/endpoint/sites_endpoint.py index 51736ffc7..3977ad0f2 100644 --- a/tableauserverclient/server/endpoint/sites_endpoint.py +++ b/tableauserverclient/server/endpoint/sites_endpoint.py @@ -8,10 +8,6 @@ class Sites(Endpoint): - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/sites".format(self.parent_srv.baseurl) diff --git a/tableauserverclient/server/endpoint/users_endpoint.py b/tableauserverclient/server/endpoint/users_endpoint.py index 1bc32d50e..d5b5155fa 100644 --- a/tableauserverclient/server/endpoint/users_endpoint.py +++ b/tableauserverclient/server/endpoint/users_endpoint.py @@ -8,10 +8,6 @@ class Users(Endpoint): - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/sites/{1}/users".format(self.parent_srv.baseurl, self.parent_srv.site_id) diff --git a/tableauserverclient/server/endpoint/views_endpoint.py b/tableauserverclient/server/endpoint/views_endpoint.py index 1ccc418f4..2b5f0e5dd 100644 --- a/tableauserverclient/server/endpoint/views_endpoint.py +++ b/tableauserverclient/server/endpoint/views_endpoint.py @@ -7,10 +7,6 @@ class Views(Endpoint): - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/sites/{1}".format(self.parent_srv.baseurl, self.parent_srv.site_id) diff --git a/tableauserverclient/server/endpoint/workbooks_endpoint.py b/tableauserverclient/server/endpoint/workbooks_endpoint.py index 46ec3c5ee..6aabc6029 100644 --- a/tableauserverclient/server/endpoint/workbooks_endpoint.py +++ b/tableauserverclient/server/endpoint/workbooks_endpoint.py @@ -17,10 +17,6 @@ class Workbooks(Endpoint): - def __init__(self, parent_srv): - super(Endpoint, self).__init__() - self.parent_srv = parent_srv - @property def baseurl(self): return "{0}/sites/{1}/workbooks".format(self.parent_srv.baseurl, self.parent_srv.site_id)