8000 Making the user list operations a no-op if we haven't populated the l… · rshide/server-client-python@02559ab · GitHub
[go: up one dir, main page]

Skip to content

Commit 02559ab

Browse files
author
Russell Hay
authored
Making the user list operations a no-op if we haven't populated the list of users yet (tableau#68)
1 parent 4f4112b commit 02559ab

File tree

3 files changed

+50
-20
lines changed

3 files changed

+50
-20
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setup(
77
name='tableauserverclient',
8-
version='0.1',
8+
version='0.2.dev0',
99
author='Tableau',
1010
author_email='github@tableau.com',
1111
url='https://github.com/tableau/server-client-python',

tableauserverclient/server/endpoint/groups_endpoint.py

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .endpoint import Endpoint
22
from .exceptions import MissingRequiredFieldError
3+
from ...models.exceptions import UnpopulatedPropertyError
34
from .. import RequestFactory, GroupItem, UserItem, PaginationItem
45
import logging
56

@@ -47,7 +48,31 @@ def delete(self, group_id):
4748

4849
# Removes 1 user from 1 group
4950
def remove_user(self, group_item, user_id):
50-
user_set = group_item.users
51+
self._remove_user(group_item, user_id)
52+
try:
53+
user_set = group_item.users
54+
for user in user_set:
55+
if user.id == user_id:
56+
user_set.remove(user)
57+
break
58+
except UnpopulatedPropertyError:
59+
# If we aren't populated, do nothing to the user list
60+
pass
61+
logger.info('Removed user (id: {0}) from group (ID: {1})'.format(user_id, group_item.id))
62+
63+
# Adds 1 user to 1 group
64+
def add_user(self, group_item, user_id):
65+
new_user = self._add_user(group_item, user_id)
66+
try:
67+
user_set = group_item.users
68+
user_set.add(new_user)
69+
group_item._set_users(user_set)
70+
except UnpopulatedPropertyError:
71+
# If we aren't populated, do nothing to the user list
72+
pass
73+
logger.info('Added user (id: {0}) to group (ID: {1})'.format(user_id, group_item.id))
74+
75+
def _remove_user(self, group_item, user_id):
5176
if not group_item.id:
5277
error = "Group item missing ID."
5378
raise MissingRequiredFieldError(error)
@@ -56,15 +81,8 @@ def remove_user(self, group_item, user_id):
5681
raise ValueError(error)
5782
url = "{0}/{1}/users/{2}".format(self.baseurl, group_item.id, user_id)
5883
self.delete_request(url)
59-
for user in user_set:
60-
if user.id == user_id:
61-
user_set.remove(user)
62-
break
63-
logger.info('Removed user (id: {0}) from group (ID: {1})'.format(user_id, group_item.id))
6484

65-
# Adds 1 user to 1 group
66-
def add_user(self, group_item, user_id):
67-
user_set = group_item.users
85+
def _add_user(self, group_item, user_id):
6886
if not group_item.id:
6987
error = "Group item missing ID."
7088
raise MissingRequiredFieldError(error)
@@ -74,7 +92,4 @@ def add_user(self, group_item, user_id):
7492
url = "{0}/{1}/users".format(self.baseurl, group_item.id)
7593
add_req = RequestFactory.Group.add_user_req(user_id)
7694
server_response = self.post_request(url, add_req)
77-
new_user = UserItem.from_response(server_response.content).pop()
78-
user_set.add(new_user)
79-
group_item._set_users(user_set)
80-
logger.info('Added user (id: {0}) to group (ID: {1})'.format(user_id, group_item.id))
95+
return UserItem.from_response(server_response.content).pop()

test/test_group.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,17 @@ def test_add_user(self):
9898
self.assertEqual('ServerAdministrator', user.site_role)
9999

100100
def test_add_user_before_populating(self):
101-
single_group = TSC.GroupItem('test')
102-
self.assertRaises(TSC.UnpopulatedPropertyError, self.server.groups.add_user, single_group,
103-
'5de011f8-5aa9-4d5b-b991-f462c8dd6bb7')
101+
with open(GET_XML, 'rb') as f:
102+
get_xml_response = f.read().decode('utf-8')
103+
with open(ADD_USER, 'rb') as f:
104+
add_user_response = f.read().decode('utf-8')
105+
with requests_mock.mock() as m:
106+
m.get(self.baseurl, text=get_xml_response)
107+
m.post('http://test/api/2.3/sites/dad65087-b08b-4603-af4e-2887b8aafc67/groups/ef8b19c0-43b6-11e6-af50'
108+
'-63f5805dbe3c/users', text=add_user_response)
109+
all_groups, pagination_item = self.server.groups.get()
110+
single_group = all_groups[0]
111+
self.server.groups.add_user(single_group, '5de011f8-5aa9-4d5b-b991-f462c8dd6bb7')
104112

105113
def test_add_user_missing_user_id(self):
106114
with open(POPULATE_USERS, 'rb') as f:
@@ -120,9 +128,16 @@ def test_add_user_missing_group_id(self):
120128
'5de011f8-5aa9-4d5b-b991-f462c8dd6bb7')
121129

122130
def test_remove_user_before_populating(self):
123-
single_group = TSC.GroupItem('test')
124-
self.assertRaises(TSC.UnpopulatedPropertyError, self.server.groups.remove_user, single_group,
125-
'5de011f8-5aa9-4d5b-b991-f462c8dd6bb7')
131+
with open(GET_XML, 'rb') as f:
132+
response_xml = f.read().decode('utf-8')
133+
with requests_mock.mock() as m:
134+
m.get(self.baseurl, text=response_xml)
135+
m.delete('http://test/api/2.3/sites/dad65087-b08b-4603-af4e-2887b8aafc67/groups/ef8b19c0-43b6-11e6-af50'
136+
'-63f5805dbe3c/users/5de011f8-5aa9-4d5b-b991-f462c8dd6bb7',
137+
text='ok')
138+
all_groups, pagination_item = self.server.groups.get()
139+
single_group = all_groups[0]
140+
self.server.groups.remove_user(single_group, '5de011f8-5aa9-4d5b-b991-f462c8dd6bb7')
126141

127142
def test_remove_user_missing_user_id(self):
128143
with open(POPULATE_USERS, 'rb') as f:

0 commit comments

Comments
 (0)
0