8000 Address unicode failures by using requests response.content rather th… · ajbosco/server-client-python@cd8969b · GitHub
[go: up one dir, main page]

Skip to content

Commit cd8969b

Browse files
author
Russell Hay
authored
Address unicode failures by using requests response.content rather than text so things are encoded properly when passed to element tree (tableau#23)
1 parent 071179b commit cd8969b

File tree

10 files changed

+44
-44
lines changed

10 files changed

+44
-44
lines changed

tableauserverclient/server/endpoint/auth_endpoint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def sign_in(self, auth_req):
2828
server_response = self.parent_srv.session.post(url, data=signin_req,
2929
**self.parent_srv.http_options)
3030
Endpoint._check_status(server_response)
31-
parsed_response = ET.fromstring(server_response.text)
31+
parsed_response = ET.fromstring(server_response.content)
3232
site_id = parsed_response.find('.//t:site', namespaces=NAMESPACE).get('id', None)
3333
user_id = parsed_response.find('.//t:user', namespaces=NAMESPACE).get('id', None)
3434
auth_token = parsed_response.find('t:credentials', namespaces=NAMESPACE).get('token', None)

tableauserverclient/server/endpoint/datasources_endpoint.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ def get(self, req_options=None):
2929
logger.info('Querying all datasources on site')
3030
url = self._construct_url()
3131
server_response = self.get_request(url, req_options)
32-
pagination_item = PaginationItem.from_response(server_response.text)
33-
all_datasource_items = DatasourceItem.from_response(server_response.text)
32+
pagination_item = PaginationItem.from_response(server_response.content)
33+
all_datasource_items = DatasourceItem.from_response(server_response.content)
3434
return pagination_item, all_datasource_items
3535

3636
# Get 1 datasource by id
@@ -41,7 +41,7 @@ def get_by_id(self, datasource_id):
4141
logger.info('Querying single datasource (ID: {0})'.format(datasource_id))
4242
url = "{0}/{1}".format(self._construct_url(), datasource_id)
4343
server_response = self.get_request(url)
44-
return DatasourceItem.from_response(server_response.text)[0]
44+
return DatasourceItem.from_response(server_response.content)[0]
4545

4646
# Populate datasource item's connections
4747
def populate_connections(self, datasource_item):
@@ -50,7 +50,7 @@ def populate_connections(self, datasource_item):
5050
raise MissingRequiredFieldError(error)
5151
url = '{0}/{1}/connections'.format(self._construct_url(), datasource_item.id)
5252
server_response = self.get_request(url)
53-
datasource_item._set_connections(ConnectionItem.from_response(server_response.text))
53+
datasource_item._set_connections(ConnectionItem.from_response(server_response.content))
5454
logger.info('Populated connections for datasource (ID: {0})'.format(datasource_item.id))
5555

5656
# Delete 1 datasource by id
@@ -91,7 +91,7 @@ def update(self, datasource_item):
9191
server_response = self.put_request(url, update_req)
9292
logger.info('Updated datasource item (ID: {0})'.format(datasource_item.id))
9393
updated_datasource = copy.copy(datasource_item)
94-
return updated_datasource._parse_common_tags(server_response.text)
94+
return updated_datasource._parse_common_tags(server_response.content)
9595

9696
# Publish datasource
9797
def publish(self, datasource_item, file_path, mode):
@@ -131,6 +131,6 @@ def publish(self, datasource_item, file_path, mode):
131131
filename,
132132
file_contents)
133133
server_response = self.post_request(url, xml_request, content_type)
134-
new_datasource = DatasourceItem.from_response(server_response.text)[0]
134+
new_datasource = DatasourceItem.from_response(server_response.content)[0]
135135
logger.info('Published {0} (ID: {1})'.format(filename, new_datasource.id))
136136
return new_datasource

tableauserverclient/server/endpoint/endpoint.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def __init__(self):
1313
@staticmethod
1414
def _check_status(server_response):
1515
if server_response.status_code not in Success_codes:
16-
raise ServerResponseError.from_response(server_response.text)
16+
raise ServerResponseError.from_response(server_response.content)
1717

1818
def get_request(self, url, request_object=None):
1919
if request_object is not None:
@@ -24,7 +24,7 @@ def get_request(self, url, request_object=None):
2424
**self.parent_srv.http_options)
2525
self._check_status(server_response)
2626
if server_response.encoding:
27-
logger.debug('Server response from {0}: \n\t{1}'.format(url, server_response.text))
27+
logger.debug(u'Server response from {0}: \n\t{1}'.format(url, server_response.content.decode(server_response.encoding)))
2828
return server_response
2929

3030
def delete_request(self, url):
@@ -42,7 +42,7 @@ def put_request(self, url, xml_request, content_type='text/xml'):
4242
**self.parent_srv.http_options)
4343
self._check_status(server_response)
4444
if server_response.encoding:
45-
logger.debug('Server response from {0}: \n\t{1}'.format(url, server_response.text))
45+
logger.debug(u'Server response from {0}: \n\t{1}'.format(url, server_response.content.decode(server_response.encoding)))
4646
return server_response
4747

4848
def post_request(self, url, xml_request, content_type='text/xml'):
@@ -53,5 +53,5 @@ def post_request(self, url, xml_request, content_type='text/xml'):
5353
**self.parent_srv.http_options)
5454
self._check_status(server_response)
5555
if server_response.encoding:
56-
logger.debug('Server response from {0}: \n\t{1}'.format(url, server_response.text))
56+
logger.debug(u'Server response from {0}: \n\t{1}'.format(url, server_response.content.decode(server_response.encoding)))
5757
return server_response

tableauserverclient/server/endpoint/fileuploads_endpoint.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def _construct_url(self):
2424
def initiate(self):
2525
url = self._construct_url()
2626
server_response = self.post_request(url, '')
27-
fileupload_item = FileuploadItem.from_response(server_response.text)
27+
fileupload_item = FileuploadItem.from_response(server_response.content)
2828
self.upload_id = fileupload_item.upload_session_id
2929
logger.info('Initiated file upload session (ID: {0})'.format(self.upload_id))
3030
return self.upload_id
@@ -36,7 +36,7 @@ def append(self, xml_request, content_type):
3636
url = "{0}/{1}".format(self._construct_url(), self.upload_id)
3737
server_response = self.put_request(url, xml_request, content_type)
3838
logger.info('Uploading a chunk to session (ID: {0})'.format(self.upload_id))
39-
return FileuploadItem.from_response(server_response.text)
39+
return FileuploadItem.from_response(server_response.content)
4040

4141
def read_chunks(self, file_path):
4242
with open(file_path, 'rb') as f:

tableauserverclient/server/endpoint/groups_endpoint.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ def get(self, req_options=None):
2020
logger.info('Querying all groups on site')
2121
url = self._construct_url()
2222
server_response = self.get_request(url, req_options)
23-
pagination_item = PaginationItem.from_response(server_response.text)
24-
all_group_items = GroupItem.from_response(server_response.text)
23+
pagination_item = PaginationItem.from_response(server_response.content)
24+
all_group_items = GroupItem.from_response(server_response.content)
2525
return pagination_item, all_group_items
2626

2727
# Gets all users in a given group
@@ -31,8 +31,8 @@ def populate_users(self, group_item, req_options=None):
3131
raise MissingRequiredFieldError(error)
3232
url = "{0}/{1}/users".format(self._construct_url(), group_item.id)
3333
server_response = self.get_request(url, req_options)
34-
group_item._set_users(UserItem.from_response(server_response.text))
35-
pagination_item = PaginationItem.from_response(server_response.text)
34+
group_item._set_users(UserItem.from_response(server_response.content))
35+
pagination_item = PaginationItem.from_response(server_response.content)
3636
logger.info('Populated users for group (ID: {0})'.format(group_item.id))
3737
return pagination_item
3838

@@ -74,7 +74,7 @@ def add_user(self, group_item, user_id):
7474
url = "{0}/{1}/users".format(self._construct_url(), group_item.id)
7575
add_req = RequestFactory.Group.add_user_req(user_id)
7676
server_response = self.post_request(url, add_req)
77-
new_user = UserItem.from_response(server_response.text).pop()
77+
new_user = UserItem.from_response(server_response.content).pop()
7878
user_set.add(new_user)
7979
group_item._set_users(user_set)
8080
logger.info('Added user (id: {0}) to group (ID: {1})'.format(user_id, group_item.id))

tableauserverclient/server/endpoint/projects_endpoint.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ def get(self, req_options=None):
2020
logger.info('Querying all projects on site')
2121
url = self._construct_url()
2222
server_response = self.get_request(url, req_options)
23-
pagination_item = PaginationItem.from_response(server_response.text)
24-
all_project_items = ProjectItem.from_response(server_response.text)
23+
pagination_item = PaginationItem.from_response(server_response.content)
24+
all_project_items = ProjectItem.from_response(server_response.content)
2525
return pagination_item, all_project_items
2626

2727
def delete(self, project_id):
@@ -42,13 +42,13 @@ def update(self, project_item):
4242
server_response = self.put_request(url, update_req)
4343
logger.info('Updated project item (ID: {0})'.format(project_item.id))
4444
updated_project = copy.copy(project_item)
45-
return updated_project._parse_common_tags(server_response.text)
45+
return updated_project._parse_common_tags(server_response.content)
4646

4747
def create(self, project_item):
4848
url = self._construct_url()
4949
create_req = RequestFactory.Project.create_req(project_item)
5050
server_response = self.post_request(url, create_req)
51-
new_project = ProjectItem.from_response(server_response.text)[0]
51+
new_project = ProjectItem.from_response(server_response.content)[0]
5252
logger.info('Created new project (ID: {0})'.format(new_project.id))
5353
return new_project
5454

tableauserverclient/server/endpoint/sites_endpoint.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ def get(self, req_options=None):
2121
logger.info('Querying all sites on site')
2222
url = self._construct_url()
2323
server_response = self.get_request(url, req_options)
24-
pagination_item = PaginationItem.from_response(server_response.text)
25-
all_site_items = SiteItem.from_response(server_response.text)
24+
pagination_item = PaginationItem.from_response(server_response.content)
25+
all_site_items = SiteItem.from_response(server_response.content)
2626
return pagination_item, all_site_items
2727

2828
# Gets 1 site by id
@@ -33,7 +33,7 @@ def get_by_id(self, site_id):
3333
logger.info('Querying single site (ID: {0})'.format(site_id))
3434
url = "{0}/{1}".format(self._construct_url(), site_id)
3535
server_response = self.get_request(url)
36-
return SiteItem.from_response(server_response.text)[0]
36+
return SiteItem.from_response(server_response.content)[0]
3737

3838
# Update site
3939
def update(self, site_item):
@@ -50,7 +50,7 @@ def update(self, site_item):
5050
server_response = self.put_request(url, update_req)
5151
logger.info('Updated site item (ID: {0})'.format(site_item.id))
5252
update_site = copy.copy(site_item)
53-
return update_site._parse_common_tags(server_response.text)
53+
return update_site._parse_common_tags(server_response.content)
5454

5555
# Delete 1 site object
5656
def delete(self, site_id):
@@ -71,6 +71,6 @@ def create(self, site_item):
7171
url = self._construct_url()
7272
create_req = RequestFactory.Site.create_req(site_item)
7373
server_response = self.post_request(url, create_req)
74-
new_site = SiteItem.from_response(server_response.text)[0]
74+
new_site = SiteItem.from_response(server_response.content)[0]
7575
logger.info('Created new site (ID: {0})'.format(new_site.id))
7676
return new_site

tableauserverclient/server/endpoint/users_endpoint.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ def get(self, req_options=None):
2121
logger.info('Querying all users on site')
2222
url = self._construct_url()
2323
server_response = self.get_request(url, req_options)
24-
pagination_item = PaginationItem.from_response(server_response.text)
25-
all_user_items = UserItem.from_response(server_response.text)
24+
pagination_item = PaginationItem.from_response(server_response.content)
25+
all_user_items = UserItem.from_response(server_response.content)
2626
return pagination_item, all_user_items
2727

2828
# Gets 1 user by id
@@ -33,7 +33,7 @@ def get_by_id(self, user_id):
3333
logger.info('Querying single user (ID: {0})'.format(user_id))
3434
url = "{0}/{1}".format(self._construct_url(), user_id)
3535
server_response = self.get_request(url)
36-
return UserItem.from_response(server_response.text).pop()
36+
return UserItem.from_response(server_response.content).pop()
3737

3838
# Update user
3939
def update(self, user_item):
@@ -46,7 +46,7 @@ def update(self, user_item):
4646
server_response = self.put_request(url, update_req)
4747
logger.info('Updated user item (ID: {0})'.format(user_item.id))
4848
updated_item = copy.copy(user_item)
49-
return updated_item._parse_common_tags(server_response.text)
49+
return updated_item._parse_common_tags(server_response.content)
5050

5151
# Delete 1 user by id
5252
def remove(self, user_id):
@@ -62,7 +62,7 @@ def add(self, user_item):
6262
url = self._construct_url()
6363
add_req = RequestFactory.User.add_req(user_item)
6464
server_response = self.post_request(url, add_req)
65-
new_user = UserItem.from_response(server_response.text).pop()
65+
new_user = UserItem.from_response(server_response.content).pop()
6666
logger.info('Added new user (ID: {0})'.format(user_item.id))
6767
return new_user
6868

@@ -74,8 +74,8 @@ def populate_workbooks(self, user_item, req_options=None):
7474
url = "{0}/{1}/workbooks".format(self._construct_url(), user_item.id)
7575
server_response = self.get_request(url, req_options)
7676
logger.info('Populated workbooks for user (ID: {0})'.format(user_item.id))
77-
user_item._set_workbooks(WorkbookItem.from_response(server_response.text))
78-
pagination_item = PaginationItem.from_response(server_response.text)
77+
user_item._set_workbooks(WorkbookItem.from_response(server_response.content))
78+
pagination_item = PaginationItem.from_response(server_response.content)
7979
return pagination_item
8080

8181
def populate_favorites(self, user_item):

tableauserverclient/server/endpoint/views_endpoint.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ def get(self, req_options=None):
1919
logger.info('Querying all views on site')
2020
url = "{0}/views".format(self._construct_url())
2121
server_response = self.get_request(url, req_options)
22-
pagination_item = PaginationItem.from_response(server_response.text)
23-
all_view_items = ViewItem.from_response(server_response.text)
22+
pagination_item = PaginationItem.from_response(server_response.content)
23+
all_view_items = ViewItem.from_response(server_response.content)
2424
return pagination_item, all_view_items
2525

2626
def populate_preview_image(self, view_item):

tableauserverclient/server/endpoint/workbooks_endpoint.py

Lines changed: 8 additions & 8 deletions
10000
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def _add_tags(self, workbook_id, tag_set):
3030
url = "{0}/{1}/tags".format(self._construct_url(), workbook_id)
3131
add_req = RequestFactory.Tag.add_req(tag_set)
3232
server_response = self.put_request(url, add_req)
33-
return TagItem.from_response(server_response.text)
33+
return TagItem.from_response(server_response.content)
3434

3535
# Delete a workbook's tag by name
3636
def _delete_tag(self, workbook_id, tag_name):
@@ -42,8 +42,8 @@ def get(self, req_options=None):
4242
logger.info('Querying all workbooks on site')
4343
url = self._construct_url()
4444
server_response = self.get_request(url, req_options)
45-
pagination_item = PaginationItem.from_response(server_response.text)
46-
all_workbook_items = WorkbookItem.from_response(server_response.text)
45+
pagination_item = PaginationItem.from_response(server_response.content)
46+
all_workbook_items = WorkbookItem.from_response(server_response.content)
4747
return pagination_item, all_workbook_items
4848

4949
# Get 1 workbook
@@ -54,7 +54,7 @@ def get_by_id(self, workbook_id):
5454
logger.info('Querying single workbook (ID: {0})'.format(workbook_id))
5555
url = "{0}/{1}".format(self._construct_url(), workbook_id)
5656
server_response = self.get_request(url)
57-
return WorkbookItem.from_response(server_response.text)[0]
57+
return WorkbookItem.from_response(server_response.content)[0]
5858

5959
# Delete 1 workbook by id
6060
def delete(self, workbook_id):
@@ -88,7 +88,7 @@ def update(self, workbook_item):
8888
server_response = self.put_request(url, update_req)
8989
logger.info('Updated workbook item (ID: {0}'.format(workbook_item.id))
9090
updated_workbook = copy.copy(workbook_item)
91-
return updated_workbook._parse_common_tags(server_response.text)
91+
return updated_workbook._parse_common_tags(server_response.content)
9292

9393
# Download workbook contents with option of passing in filepath
9494
def download(self, workbook_id, filepath=None):
@@ -116,7 +116,7 @@ def populate_views(self, workbook_item):
116116
raise MissingRequiredFieldError(error)
117117
url = "{0}/{1}/views".format(self._construct_url(), workbook_item.id)
118118
server_response = self.get_request(url)
119-
workbook_item._set_views(ViewItem.from_response(server_response.text, workbook_id=workbook_item.id))
119+
workbook_item._set_views(ViewItem.from_response(server_response.content, workbook_id=workbook_item.id))
120120
logger.info('Populated views for workbook (ID: {0}'.format(workbook_item.id))
121121

122122
# Get all connections of workbook
@@ -126,7 +126,7 @@ def populate_connections(self, workbook_item):
126126
raise MissingRequiredFieldError(error)
127127
url = "{0}/{1}/connections".format(self._construct_url(), workbook_item.id)
128128
server_response = self.get_request(url)
129-
workbook_item._set_connections(ConnectionItem.from_response(server_response.text))
129+
workbook_item._set_connections(ConnectionItem.from_response(server_response.content))
130130
logger.info('Populated connections for workbook (ID: {0})'.format(workbook_item.id))
131131

132132
# Get preview image of workbook
@@ -180,6 +180,6 @@ def publish(self, workbook_item, file_path, mode):
180180
filename,
181181
file_contents)
182182
server_response = self.post_request(url, xml_request, content_type)
183-
new_workbook = WorkbookItem.from_response(server_response.text)[0]
183+
new_workbook = WorkbookItem.from_response(server_response.content)[0]
184184
logger.info('Published {0} (ID: {1})'.format(filename, new_workbook.id))
185185
return new_workbook

0 commit comments

Comments
 (0)
0