diff --git a/tableauserverclient/server/endpoint/users_endpoint.py b/tableauserverclient/server/endpoint/users_endpoint.py index cd4ac64d4..5d3c69b26 100644 --- a/tableauserverclient/server/endpoint/users_endpoint.py +++ b/tableauserverclient/server/endpoint/users_endpoint.py @@ -1,6 +1,6 @@ from .endpoint import QuerysetEndpoint, api from .exceptions import MissingRequiredFieldError -from .. import RequestFactory, UserItem, WorkbookItem, PaginationItem +from .. import RequestFactory, RequestOptions, UserItem, WorkbookItem, PaginationItem from ..pager import Pager import copy @@ -18,6 +18,11 @@ def baseurl(self): @api(version="2.0") def get(self, req_options=None): logger.info('Querying all users on site') + + if req_options is None: + req_options = RequestOptions() + req_options._all_fields = True + url = self.baseurl server_response = self.get_request(url, req_options) pagination_item = PaginationItem.from_response(server_response.content, self.parent_srv.namespace) diff --git a/tableauserverclient/server/request_options.py b/tableauserverclient/server/request_options.py index f94fff90f..47dfe29f8 100644 --- a/tableauserverclient/server/request_options.py +++ b/tableauserverclient/server/request_options.py @@ -69,6 +69,9 @@ def __init__(self, pagenumber=1, pagesize=100): self.sort = set() self.filter = set() + # This is private until we expand all of our parsers to handle the extra fields + self._all_fields = False + def page_size(self, page_size): self.pagesize = page_size return self @@ -91,6 +94,8 @@ def get_query_params(self): filter_options = (str(filter_item) for filter_item in self.filter) ordered_filter_options = sorted(filter_options) params['filter'] = ','.join(ordered_filter_options) + if self._all_fields: + params['fields'] = '_all_' return params diff --git a/test/assets/user_get.xml b/test/assets/user_get.xml index 3165c3a4f..83557b2eb 100644 --- a/test/assets/user_get.xml +++ b/test/assets/user_get.xml @@ -2,7 +2,7 @@ - - + + \ No newline at end of file diff --git a/test/test_request_option.py b/test/test_request_option.py index 58f21aa9a..c6270dd32 100644 --- a/test/test_request_option.py +++ b/test/test_request_option.py @@ -176,6 +176,21 @@ def test_vf(self): self.assertTrue(re.search('vf_name2%24=value2', resp.request.query)) self.assertTrue(re.search('type=tabloid', resp.request.query)) + def test_all_fields(self): + with requests_mock.mock() as m: + m.get(requests_mock.ANY) + url = "http://test/api/2.3/sites/123/views/456/data" + opts = TSC.RequestOptions() + opts._all_fields = True + + resp = self.server.users._make_request(requests.get, + url, + content=None, + request_object=opts, + auth_token='j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM', + content_type='text/xml') + self.assertTrue(re.search('fields=_all_', resp.request.query)) + def test_multiple_filter_options_shorthand(self): with open(FILTER_MULTIPLE, 'rb') as f: response_xml = f.read().decode('utf-8') diff --git a/test/test_user.py b/test/test_user.py index 6eb6ad223..db0f829f7 100644 --- a/test/test_user.py +++ b/test/test_user.py @@ -29,7 +29,7 @@ def test_get(self): with open(GET_XML, 'rb') as f: response_xml = f.read().decode('utf-8') with requests_mock.mock() as m: - m.get(self.baseurl, text=response_xml) + m.get(self.baseurl + "?fields=_all_", text=response_xml) all_users, pagination_item = self.server.users.get() self.assertEqual(2, pagination_item.total_available) @@ -40,11 +40,15 @@ def test_get(self): self.assertEqual('alice', single_user.name) self.assertEqual('Publisher', single_user.site_role) self.assertEqual('2016-08-16T23:17:06Z', format_datetime(single_user.last_login)) + self.assertEqual('alice cook', single_user.fullname) + self.assertEqual('alicecook@test.com', single_user.email) 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) + self.assertEqual('Bob Smith', single_user.fullname) + self.assertEqual('bob@test.com', single_user.email) def test_get_empty(self): with open(GET_EMPTY_XML, 'rb') as f: