diff --git a/tableauserverapi/models/datasource_item.py b/tableauserverapi/models/datasource_item.py index 82ecf32aa..981be7be4 100644 --- a/tableauserverapi/models/datasource_item.py +++ b/tableauserverapi/models/datasource_item.py @@ -1,6 +1,6 @@ import xml.etree.ElementTree as ET -from exceptions import UnpopulatedPropertyError -from tag_item import TagItem +from .exceptions import UnpopulatedPropertyError +from .tag_item import TagItem from .. import NAMESPACE diff --git a/tableauserverapi/models/group_item.py b/tableauserverapi/models/group_item.py index adb54d9db..9e6de73cd 100644 --- a/tableauserverapi/models/group_item.py +++ b/tableauserverapi/models/group_item.py @@ -1,5 +1,5 @@ import xml.etree.ElementTree as ET -from exceptions import UnpopulatedPropertyError +from .exceptions import UnpopulatedPropertyError from .. import NAMESPACE diff --git a/tableauserverapi/models/user_item.py b/tableauserverapi/models/user_item.py index 961dfe3ab..3c530e676 100644 --- a/tableauserverapi/models/user_item.py +++ b/tableauserverapi/models/user_item.py @@ -1,5 +1,5 @@ import xml.etree.ElementTree as ET -from exceptions import UnpopulatedPropertyError +from .exceptions import UnpopulatedPropertyError from .. import NAMESPACE diff --git a/tableauserverapi/models/workbook_item.py b/tableauserverapi/models/workbook_item.py index f53cea95e..6522ebdef 100644 --- a/tableauserverapi/models/workbook_item.py +++ b/tableauserverapi/models/workbook_item.py @@ -1,7 +1,7 @@ import xml.etree.ElementTree as ET -from exceptions import UnpopulatedPropertyError -from tag_item import TagItem -from view_item import ViewItem +from .exceptions import UnpopulatedPropertyError +from .tag_item import TagItem +from .view_item import ViewItem from .. import NAMESPACE import copy diff --git a/tableauserverapi/server/endpoint/auth_endpoint.py b/tableauserverapi/server/endpoint/auth_endpoint.py index 816ba7ceb..21d988458 100644 --- a/tableauserverapi/server/endpoint/auth_endpoint.py +++ b/tableauserverapi/server/endpoint/auth_endpoint.py @@ -1,4 +1,4 @@ -from endpoint import Endpoint +from .endpoint import Endpoint from .. import RequestFactory, NAMESPACE import xml.etree.ElementTree as ET import logging diff --git a/tableauserverapi/server/endpoint/datasources_endpoint.py b/tableauserverapi/server/endpoint/datasources_endpoint.py index fb0a9d0d2..c112872e6 100644 --- a/tableauserverapi/server/endpoint/datasources_endpoint.py +++ b/tableauserverapi/server/endpoint/datasources_endpoint.py @@ -1,5 +1,5 @@ -from endpoint import Endpoint -from exceptions import MissingRequiredFieldError +from .endpoint import Endpoint +from .exceptions import MissingRequiredFieldError from .fileuploads_endpoint import Fileuploads from .. import RequestFactory, DatasourceItem, PaginationItem, ConnectionItem import os diff --git a/tableauserverapi/server/endpoint/endpoint.py b/tableauserverapi/server/endpoint/endpoint.py index f04faf8e5..b0c28c515 100644 --- a/tableauserverapi/server/endpoint/endpoint.py +++ b/tableauserverapi/server/endpoint/endpoint.py @@ -1,4 +1,4 @@ -from exceptions import ServerResponseError +from .exceptions import ServerResponseError import logging logger = logging.getLogger('tableau.endpoint') diff --git a/tableauserverapi/server/endpoint/fileuploads_endpoint.py b/tableauserverapi/server/endpoint/fileuploads_endpoint.py index baa7f2168..72cd389d1 100644 --- a/tableauserverapi/server/endpoint/fileuploads_endpoint.py +++ b/tableauserverapi/server/endpoint/fileuploads_endpoint.py @@ -1,5 +1,5 @@ -from endpoint import Endpoint -from exceptions import MissingRequiredFieldError +from .exceptions import MissingRequiredFieldError +from .endpoint import Endpoint from .. import RequestFactory from ...models.fileupload_item import FileuploadItem import os.path diff --git a/tableauserverapi/server/endpoint/groups_endpoint.py b/tableauserverapi/server/endpoint/groups_endpoint.py index 6ac3e4159..db734afe9 100644 --- a/tableauserverapi/server/endpoint/groups_endpoint.py +++ b/tableauserverapi/server/endpoint/groups_endpoint.py @@ -1,5 +1,5 @@ -from endpoint import Endpoint -from exceptions import MissingRequiredFieldError +from .endpoint import Endpoint +from .exceptions import MissingRequiredFieldError from .. import RequestFactory, GroupItem, UserItem, PaginationItem import logging diff --git a/tableauserverapi/server/endpoint/projects_endpoint.py b/tableauserverapi/server/endpoint/projects_endpoint.py index e2790af73..a4242925b 100644 --- a/tableauserverapi/server/endpoint/projects_endpoint.py +++ b/tableauserverapi/server/endpoint/projects_endpoint.py @@ -1,5 +1,5 @@ -from endpoint import Endpoint -from exceptions import MissingRequiredFieldError +from .endpoint import Endpoint +from .exceptions import MissingRequiredFieldError from .. import RequestFactory, ProjectItem, PaginationItem import logging import copy diff --git a/tableauserverapi/server/endpoint/sites_endpoint.py b/tableauserverapi/server/endpoint/sites_endpoint.py index e8dd02606..750f7112e 100644 --- a/tableauserverapi/server/endpoint/sites_endpoint.py +++ b/tableauserverapi/server/endpoint/sites_endpoint.py @@ -1,5 +1,5 @@ -from endpoint import Endpoint -from exceptions import MissingRequiredFieldError +from .endpoint import Endpoint +from .exceptions import MissingRequiredFieldError from .. import RequestFactory, SiteItem, PaginationItem import logging import copy diff --git a/tableauserverapi/server/endpoint/users_endpoint.py b/tableauserverapi/server/endpoint/users_endpoint.py index 443f7729a..61abff070 100644 --- a/tableauserverapi/server/endpoint/users_endpoint.py +++ b/tableauserverapi/server/endpoint/users_endpoint.py @@ -1,5 +1,5 @@ -from endpoint import Endpoint -from exceptions import MissingRequiredFieldError +from .endpoint import Endpoint +from .exceptions import MissingRequiredFieldError from .. import RequestFactory, UserItem, WorkbookItem, PaginationItem import logging import copy @@ -33,7 +33,7 @@ def get_by_id(self, user_id): logger.info('Querying single user (ID: {0})'.format(user_id)) url = "{0}/{1}".format(self._construct_url(), user_id) server_response = self.get_request(url) - return UserItem.from_response(server_response.text)[0] + return UserItem.from_response(server_response.text).pop() # Update user def update(self, user_item): @@ -62,7 +62,7 @@ def add(self, user_item): url = self._construct_url() add_req = RequestFactory.User.add_req(user_item) server_response = self.post_request(url, add_req) - new_user = UserItem.from_response(server_response.text)[0] + new_user = UserItem.from_response(server_response.text).pop() logger.info('Added new user (ID: {0})'.format(user_item.id)) return new_user diff --git a/tableauserverapi/server/endpoint/views_endpoint.py b/tableauserverapi/server/endpoint/views_endpoint.py index 91af81fbe..983399598 100644 --- a/tableauserverapi/server/endpoint/views_endpoint.py +++ b/tableauserverapi/server/endpoint/views_endpoint.py @@ -1,5 +1,5 @@ -from endpoint import Endpoint -from exceptions import MissingRequiredFieldError +from .endpoint import Endpoint +from .exceptions import MissingRequiredFieldError from .. import ViewItem, PaginationItem import logging diff --git a/tableauserverapi/server/endpoint/workbooks_endpoint.py b/tableauserverapi/server/endpoint/workbooks_endpoint.py index be56a0d43..3c70cb253 100644 --- a/tableauserverapi/server/endpoint/workbooks_endpoint.py +++ b/tableauserverapi/server/endpoint/workbooks_endpoint.py @@ -1,5 +1,5 @@ -from endpoint import Endpoint -from exceptions import MissingRequiredFieldError +from .endpoint import Endpoint +from .exceptions import MissingRequiredFieldError from .fileuploads_endpoint import Fileuploads from .. import RequestFactory, WorkbookItem, ConnectionItem, ViewItem, PaginationItem from ...models.tag_item import TagItem diff --git a/tableauserverapi/server/filter.py b/tableauserverapi/server/filter.py index c02b66925..aa42a6439 100644 --- a/tableauserverapi/server/filter.py +++ b/tableauserverapi/server/filter.py @@ -1,4 +1,4 @@ -from request_options import RequestOptions +from .request_options import RequestOptions class Filter(object): diff --git a/tableauserverapi/server/server.py b/tableauserverapi/server/server.py index 9c8b0212f..3458e0644 100644 --- a/tableauserverapi/server/server.py +++ b/tableauserverapi/server/server.py @@ -1,5 +1,5 @@ -from exceptions import NotSignedInError -from endpoint import Sites, Views, Users, Groups, Workbooks, Datasources, Projects, Auth +from .exceptions import NotSignedInError +from .endpoint import Sites, Views, Users, Groups, Workbooks, Datasources, Projects, Auth import requests diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/test/assets/SampleDS.tds b/test/assets/SampleDS.tds new file mode 100644 index 000000000..40b850ace --- /dev/null +++ b/test/assets/SampleDS.tds @@ -0,0 +1,93 @@ + + + + + + + a + 130 + [a] + [xy] + a + 1 + string + Count + 255 + true + + "SQL_WVARCHAR" + "SQL_C_WCHAR" + "true" + + + + Today's Date + 130 + [Today's Date] + [xy] + a + 1 + string + Count + 255 + true + + "SQL_WVARCHAR" + "SQL_C_WCHAR" + "true" + + + + x + 3 + [x] + [xy] + x + 2 + integer + Sum + 10 + true + + "SQL_INTEGER" + "SQL_C_SLONG" + + + + y + 3 + [y] + [xy] + y + 3 + integer + Sum + 10 + true + + "SQL_INTEGER" + "SQL_C_SLONG" + + + + + + + + + + + + A thing + Something will go here too, in a muted gray + + + + + + + + + + + diff --git a/test/assets/SampleWB.twbx b/test/assets/SampleWB.twbx new file mode 100644 index 000000000..bd7b2755b Binary files /dev/null and b/test/assets/SampleWB.twbx differ diff --git a/test/test_auth.py b/test/test_auth.py index 0e0f0b2c0..7a5808f10 100644 --- a/test/test_auth.py +++ b/test/test_auth.py @@ -17,7 +17,7 @@ def setUp(self): def test_sign_in(self): with open(SIGN_IN_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl + '/signin', text=response_xml) tableau_auth = TSA.TableauAuth('testuser', 'password', site='Samples') @@ -29,7 +29,7 @@ def test_sign_in(self): def test_sign_in_impersonate(self): with open(SIGN_IN_IMPERSONATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl + '/signin', text=response_xml) tableau_auth = TSA.TableauAuth('testuser', 'password', @@ -42,7 +42,7 @@ def test_sign_in_impersonate(self): def test_sign_in_error(self): with open(SIGN_IN_ERROR_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl + '/signin', text=response_xml, status_code=401) tableau_auth = TSA.TableauAuth('testuser', 'wrongpassword') @@ -50,7 +50,7 @@ def test_sign_in_error(self): def test_sign_in_without_auth(self): with open(SIGN_IN_ERROR_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl + '/signin', text=response_xml, status_code=401) tableau_auth = TSA.TableauAuth('', '') @@ -58,7 +58,7 @@ def test_sign_in_without_auth(self): def test_sign_out(self): with open(SIGN_IN_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl + '/signin', text=response_xml) m.post(self.baseurl + '/signout', text='') diff --git a/test/test_datasource.py b/test/test_datasource.py index 65f6472bf..d5246ceeb 100644 --- a/test/test_datasource.py +++ b/test/test_datasource.py @@ -24,7 +24,7 @@ def setUp(self): def test_get(self): with open(GET_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl, text=response_xml) pagination_item, all_datasources = self.server.datasources.get() @@ -57,7 +57,7 @@ def test_get_before_signin(self): def test_get_empty(self): with open(GET_EMPTY_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl, text=response_xml) pagination_item, all_datasources = self.server.datasources.get() @@ -67,7 +67,7 @@ def test_get_empty(self): def test_get_by_id(self): with open(GET_BY_ID_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb', text=response_xml) single_datasource = self.server.datasources.get_by_id('9dbd2263-16b5-46e1-9c43-a76bb8ab65fb') @@ -85,7 +85,7 @@ def test_get_by_id(self): def test_update(self): with open(UPDATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.put(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb', text=response_xml) single_datasource = TSA.DatasourceItem('test', '1d0304cd-3796-429f-b815-7258370b9b74') @@ -99,7 +99,7 @@ def test_update(self): def test_update_copy_fields(self): with open(UPDATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.put(self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb', text=response_xml) single_datasource = TSA.DatasourceItem('test', '1d0304cd-3796-429f-b815-7258370b9b74') @@ -113,11 +113,12 @@ def test_update_copy_fields(self): def test_publish(self): with open(PUBLISH_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl, text=response_xml) new_datasource = TSA.DatasourceItem('SampleDS', 'ee8c6e70-43b6-11e6-af4f-f7b0d8e20760') - new_datasource = self.server.datasources.publish(new_datasource, '../samples/SampleDS.tds', + new_datasource = self.server.datasources.publish(new_datasource, + os.path.join(TEST_ASSET_DIR, 'SampleDS.tds'), mode=self.server.PublishMode.CreateNew) self.assertEqual('e76a1461-3b1d-4588-bf1b-17551a879ad9', new_datasource.id) @@ -155,9 +156,9 @@ def test_publish_missing_path(self): def test_publish_missing_mode(self): new_datasource = TSA.DatasourceItem('test', 'ee8c6e70-43b6-11e6-af4f-f7b0d8e20760') self.assertRaises(ValueError, self.server.datasources.publish, new_datasource, - '../samples/SampleDS.tds', None) + os.path.join(TEST_ASSET_DIR, 'SampleDS.tds'), None) def test_publish_invalid_file_type(self): new_datasource = TSA.DatasourceItem('test', 'ee8c6e70-43b6-11e6-af4f-f7b0d8e20760') self.assertRaises(ValueError, self.server.datasources.publish, new_datasource, - '../samples/SampleWB.twbx', self.server.PublishMode.Append) + os.path.join(TEST_ASSET_DIR, 'SampleWB.twbx'), self.server.PublishMode.Append) diff --git a/test/test_group.py b/test/test_group.py index bc8f5dbb7..dbabcdef7 100644 --- a/test/test_group.py +++ b/test/test_group.py @@ -22,7 +22,7 @@ def setUp(self): def test_get(self): with open(GET_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl, text=response_xml) pagination_item, all_groups = self.server.groups.get() @@ -46,7 +46,7 @@ def test_get_before_signin(self): def test_populate_users(self): with open(POPULATE_USERS, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/e7833b48-c6f7-47b5-a2a7-36e7dd232758/users', text=response_xml) single_group = TSA.GroupItem(name='Test Group') @@ -67,7 +67,7 @@ def test_delete(self): def test_remove_user(self): with open(POPULATE_USERS, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: url = self.baseurl + '/e7833b48-c6f7-47b5-a2a7-36e7dd232758/users' \ '/dd2239f6-ddf1-4107-981a-4cf94e415794' @@ -83,7 +83,7 @@ def test_remove_user(self): def test_add_user(self): with open(ADD_USER, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl + '/e7833b48-c6f7-47b5-a2a7-36e7dd232758/users', text=response_xml) single_group = TSA.GroupItem('test') @@ -104,7 +104,7 @@ def test_add_user_before_populating(self): def test_add_user_missing_user_id(self): with open(POPULATE_USERS, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/e7833b48-c6f7-47b5-a2a7-36e7dd232758/users', text=response_xml) single_group = TSA.GroupItem(name='Test Group') @@ -126,7 +126,7 @@ def test_remove_user_before_populating(self): def test_remove_user_missing_user_id(self): with open(POPULATE_USERS, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/e7833b48-c6f7-47b5-a2a7-36e7dd232758/users', text=response_xml) single_group = TSA.GroupItem(name='Test Group') diff --git a/test/test_project.py b/test/test_project.py index 4e53dae46..13b5e8aa9 100644 --- a/test/test_project.py +++ b/test/test_project.py @@ -22,7 +22,7 @@ def setUp(self): def test_get(self): with open(GET_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl, text=response_xml) pagination_item, all_projects = self.server.projects.get() @@ -52,7 +52,7 @@ def test_delete_missing_id(self): def test_update(self): with open(UPDATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.put(self.baseurl + '/1d0304cd-3796-429f-b815-7258370b9b74', text=response_xml) single_project = TSA.ProjectItem(name='Test Project', content_permissions='LockedToProject', @@ -67,7 +67,7 @@ def test_update(self): def test_update_copy_fields(self): with open(UPDATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.put(self.baseurl + '/1d0304cd-3796-429f-b815-7258370b9b74', text=response_xml) single_project = TSA.ProjectItem('test') @@ -83,7 +83,7 @@ def test_update_missing_id(self): def test_create(self): with open(CREATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl, text=response_xml) new_project = TSA.ProjectItem(name='Test Project', description='Project created for testing') diff --git a/test/test_request_option.py b/test/test_request_option.py index 6d22be958..8edb41cc9 100644 --- a/test/test_request_option.py +++ b/test/test_request_option.py @@ -24,7 +24,7 @@ def setUp(self): def test_pagination(self): with open(PAGINATION_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/views?pageNumber=1&pageSize=10', text=response_xml) req_option = TSA.RequestOptions().page_size(10) @@ -37,7 +37,7 @@ def test_pagination(self): def test_page_number(self): with open(PAGE_NUMBER_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/views?pageNumber=3', text=response_xml) req_option = TSA.RequestOptions().page_number(3) @@ -50,7 +50,7 @@ def test_page_number(self): def test_page_size(self): with open(PAGE_SIZE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/views?pageSize=5', text=response_xml) req_option = TSA.RequestOptions().page_size(5) @@ -63,7 +63,7 @@ def test_page_size(self): def test_filter_equals(self): with open(FILTER_EQUALS, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/workbooks?filter=name:eq:RESTAPISample', text=response_xml) req_option = TSA.RequestOptions() @@ -77,7 +77,7 @@ def test_filter_equals(self): def test_filter_tags_in(self): with open(FILTER_TAGS_IN, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/workbooks?filter=tags:in:[sample,safari,weather]', text=response_xml) req_option = TSA.RequestOptions() diff --git a/test/test_site.py b/test/test_site.py index becb3e2bb..ac7d20f45 100644 --- a/test/test_site.py +++ b/test/test_site.py @@ -22,7 +22,7 @@ def setUp(self): def test_get(self): with open(GET_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl, text=response_xml) pagination_item, all_sites = self.server.sites.get() @@ -48,7 +48,7 @@ def test_get_before_signin(self): def test_get_by_id(self): with open(GET_BY_ID_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/dad65087-b08b-4603-af4e-2887b8aafc67', text=response_xml) single_site = self.server.sites.get_by_id('dad65087-b08b-4603-af4e-2887b8aafc67') @@ -66,7 +66,7 @@ def test_get_by_id_missing_id(self): def test_update(self): with open(UPDATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.put(self.baseurl + '/6b7179ba-b82b-4f0f-91ed-812074ac5da6', text=response_xml) single_site = TSA.SiteItem(name='Tableau', content_url='tableau', @@ -90,7 +90,7 @@ def test_update_missing_id(self): def test_create(self): with open(CREATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl, text=response_xml) new_site = TSA.SiteItem(name='Tableau', content_url='tableau', diff --git a/test/test_user.py b/test/test_user.py index 3dd7ec971..933b5aa96 100644 --- a/test/test_user.py +++ b/test/test_user.py @@ -26,30 +26,34 @@ def setUp(self): def test_get(self): with open(GET_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl, text=response_xml) pagination_item, all_users = self.server.users.get() self.assertEqual(2, pagination_item.total_available) - self.assertEqual('dd2239f6-ddf1-4107-981a-4cf94e415794', all_users[0].id) - self.assertEqual('alice', all_users[0].name) - self.assertEqual('Publisher', all_users[0].site_role) - self.assertEqual('2016-08-16T23:17:06Z', all_users[0].last_login) + self.assertEqual(2, len(all_users)) - self.assertEqual('2a47bbf8-8900-4ebb-b0a4-2723bd7c46c3', all_users[1].id) - self.assertEqual('Bob', all_users[1].name) - self.assertEqual('Interactor', all_users[1].site_role) + self.assertTrue(any(user.id == 'dd2239f6-ddf1-4107-981a-4cf94e415794' for user in all_users)) + single_user = next(user for user in all_users if user.id == 'dd2239f6-ddf1-4107-981a-4cf94e415794') + self.assertEqual('alice', single_user.name) + self.assertEqual('Publisher', single_user.site_role) + self.assertEqual('2016-08-16T23:17:06Z', single_user.last_login) + + self.assertTrue(any(user.id == '2a47bbf8-8900-4ebb-b0a4-2723bd7c46c3' for user in all_users)) + single_user = next(user for user in all_users if user.id == '2a47bbf8-8900-4ebb-b0a4-2723bd7c46c3') + self.assertEqual('Bob', single_user.name) + self.assertEqual('Interactor', single_user.site_role) def test_get_empty(self): with open(GET_EMPTY_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl, text=response_xml) pagination_item, all_users = self.server.users.get() self.assertEqual(0, pagination_item.total_available) - self.assertEqual([], all_users) + self.assertEqual(set(), all_users) def test_get_before_signin(self): self.server._auth_token = None @@ -57,7 +61,7 @@ def test_get_before_signin(self): def test_get_by_id(self): with open(GET_BY_ID_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/dd2239f6-ddf1-4107-981a-4cf94e415794', text=response_xml) single_user = self.server.users.get_by_id('dd2239f6-ddf1-4107-981a-4cf94e415794') @@ -75,7 +79,7 @@ def test_get_by_id_missing_id(self): def test_update(self): with open(UPDATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.put(self.baseurl + '/dd2239f6-ddf1-4107-981a-4cf94e415794', text=response_xml) single_user = TSA.UserItem('test', 'Viewer') @@ -105,7 +109,7 @@ def test_remove_missing_id(self): def test_add(self): with open(ADD_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl + '', text=response_xml) new_user = TSA.UserItem(name='Cassie', site_role='Viewer', auth_setting='ServerDefault') @@ -118,7 +122,7 @@ def test_add(self): def test_populate_workbooks(self): with open(POPULATE_WORKBOOKS_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/dd2239f6-ddf1-4107-981a-4cf94e415794/workbooks', text=response_xml) diff --git a/test/test_view.py b/test/test_view.py index ea807f536..f6f0f2330 100644 --- a/test/test_view.py +++ b/test/test_view.py @@ -21,7 +21,7 @@ def setUp(self): def test_get(self): with open(GET_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/views', text=response_xml) pagination_item, all_views = self.server.views.get() diff --git a/test/test_workbook.py b/test/test_workbook.py index 81ad17ad0..105f97426 100644 --- a/test/test_workbook.py +++ b/test/test_workbook.py @@ -28,7 +28,7 @@ def setUp(self): def test_get(self): with open(GET_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl, text=response_xml) pagination_item, all_workbooks = self.server.workbooks.get() @@ -63,7 +63,7 @@ def test_get_before_signin(self): def test_get_empty(self): with open(GET_EMPTY_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl, text=response_xml) pagination_item, all_workbooks = self.server.workbooks.get() @@ -73,7 +73,7 @@ def test_get_empty(self): def test_get_by_id(self): with open(GET_BY_ID_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/3cc6cd06-89ce-4fdc-b935-5294135d6d42', text=response_xml) single_workbook = self.server.workbooks.get_by_id('3cc6cd06-89ce-4fdc-b935-5294135d6d42') @@ -106,7 +106,7 @@ def test_delete_missing_id(self): def test_update(self): with open(UPDATE_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.put(self.baseurl + '/1f951daf-4061-451a-9df1-69a8062664f2', text=response_xml) single_workbook = TSA.WorkbookItem('1d0304cd-3796-429f-b815-7258370b9b74', show_tabs=True) @@ -125,9 +125,9 @@ def test_update_missing_id(self): def test_update_copy_fields(self): with open(POPULATE_CONNECTIONS_XML, 'rb') as f: - connection_xml = f.read() + connection_xml = f.read().decode('utf-8') with open(UPDATE_XML, 'rb') as f: - update_xml = f.read() + update_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/1f951daf-4061-451a-9df1-69a8062664f2/connections', text=connection_xml) m.put(self.baseurl + '/1f951daf-4061-451a-9df1-69a8062664f2', text=update_xml) @@ -144,9 +144,9 @@ def test_update_copy_fields(self): def test_update_tags(self): with open(ADD_TAGS_XML, 'rb') as f: - add_tags_xml = f.read() + add_tags_xml = f.read().decode('utf-8') with open(UPDATE_XML, 'rb') as f: - update_xml = f.read() + update_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.put(self.baseurl + '/1f951daf-4061-451a-9df1-69a8062664f2/tags', text=add_tags_xml) m.delete(self.baseurl + '/1f951daf-4061-451a-9df1-69a8062664f2/tags/b', status_code=204) @@ -174,7 +174,7 @@ def test_download_missing_id(self): def test_populate_views(self): with open(POPULATE_VIEWS_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/1f951daf-4061-451a-9df1-69a8062664f2/views', text=response_xml) single_workbook = TSA.WorkbookItem('test') @@ -200,7 +200,7 @@ def test_populate_views_missing_id(self): def test_populate_connections(self): with open(POPULATE_CONNECTIONS_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.get(self.baseurl + '/1f951daf-4061-451a-9df1-69a8062664f2/connections', text=response_xml) single_workbook = TSA.WorkbookItem('test') @@ -237,12 +237,12 @@ def test_populate_preview_image_missing_id(self): def test_publish(self): with open(PUBLISH_XML, 'rb') as f: - response_xml = f.read() + response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: m.post(self.baseurl, text=response_xml) new_workbook = TSA.WorkbookItem(name='Sample', show_tabs=False, project_id='ee8c6e70-43b6-11e6-af4f-f7b0d8e20760') - new_workbook = self.server.workbooks.publish(new_workbook, '../samples/SampleWB.twbx', + new_workbook = self.server.workbooks.publish(new_workbook, os.path.join(TEST_ASSET_DIR, 'SampleWB.twbx'), self.server.PublishMode.CreateNew) self.assertEqual('a8076ca1-e9d8-495e-bae6-c684dbb55836', new_workbook.id) @@ -267,4 +267,5 @@ def test_publish_invalid_file(self): def test_publish_invalid_file_type(self): new_workbook = TSA.WorkbookItem('test', 'ee8c6e70-43b6-11e6-af4f-f7b0d8e20760') self.assertRaises(ValueError, self.server.workbooks.publish, - new_workbook, '../samples/SampleDS.tds', self.server.PublishMode.CreateNew) + new_workbook, os.path.join(TEST_ASSET_DIR, 'SampleDS.tds'), + self.server.PublishMode.CreateNew)