Skip to content

Commit 25b53e7

Browse files
authored
Bulk creation/deletion of groups (#15)
Bulk creation/deletion of groups
2 parents 2bc9991 + 49f090d commit 25b53e7

File tree

4 files changed

+35
-13
lines changed

4 files changed

+35
-13
lines changed

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ History
6969
- Added get_creator for user, group and organisms
7070
- Added omitEmptyOrganisms to get_users
7171
- Added support for group admins
72+
- Added support for bulk group creation/deletion
7273
- Repaired GFF3/Fasta downloading
7374
- 3.0.4
7475
- `Fixed bug <https://github.com/galaxy-genome-annotation/python-apollo/issues/4>`__ in deleteFeatures (Thanks `@NeillGibson <https://github.com/NeillGibson>`__)

apollo/groups/__init__.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ def create_group(self, name):
1515
Create a new group
1616
1717
:type name: str
18-
:param name: Group name
18+
:param name: Group name (or a list of groups to create)
1919
2020
:rtype: dict
2121
:return: Group information dictionary
2222
"""
23+
if isinstance(name, list):
24+
name = ','.join(name)
25+
2326
data = {'name': name}
2427
return self.post('createGroup', data)
2528

@@ -28,11 +31,14 @@ def delete_group(self, group):
2831
Delete a group
2932
3033
:type group: str
31-
:param group: Group name
34+
:param group: Group name (or a list of groups to delete)
3235
3336
:rtype: dict
3437
:return: an empty dictionary
3538
"""
39+
if isinstance(group, list):
40+
group = ','.join(group)
41+
3642
data = {
3743
'name': group,
3844
}
@@ -146,7 +152,7 @@ def update_organism_permissions(self, group, organism_name,
146152
response['permissions'] = json.loads(response['permissions'])
147153
return response
148154

149-
def update_membership(self, group_id, users=[]):
155+
def update_membership(self, group_id=None, users=[], memberships=[]):
150156
"""
151157
Update the group's membership
152158
@@ -156,13 +162,25 @@ def update_membership(self, group_id, users=[]):
156162
:type users: list of str
157163
:param users: List of emails
158164
165+
:type memberships: list
166+
:param memberships: Bulk memberships to update of the form: [ {groupId: <groupId>,users: ["user1", "user2", "user3"]}, {groupId:<another-groupId>, users: ["user2", "user8"]} (users and groupId will be ignored)
167+
159168
:rtype: dict
160169
:return: dictionary of group information
161170
"""
162-
data = {
163-
'groupId': group_id,
164-
'users': users,
165-
}
171+
172+
if not group_id and not memberships:
173+
raise Exception("group_id+users or memberships is required")
174+
elif len(memberships) > 0:
175+
data = {
176+
'memberships': memberships
177+
}
178+
else:
179+
data = {
180+
'groupId': group_id,
181+
'users': users,
182+
}
183+
166184
return _fix_group(self.post('updateMembership', data))
167185

168186
def update_group_admin(self, group_id, users=[]):

apollo/users/__init__.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
Contains possible interactions with the Apollo Users Module
33
"""
44
import json
5+
import time
56

67
from apollo.client import Client
78
from apollo.decorators import raise_error_decorator
@@ -41,12 +42,14 @@ class UsersClient(Client):
4142
def _handle_empty(self, user, response):
4243
"""Apollo likes to return empty user arrays, even when you REALLY
4344
want a user response back... like creating a user."""
44-
if len(response.keys()) == 0:
45+
found_response = len(response.keys()) > 0
46+
retries = 0
47+
while not found_response and retries < 10:
4548
response = self.show_user(user)
46-
47-
# And sometimes show_user can return nothing. Ask again...
48-
if len(response) == 0:
49-
response = self.show_user(user)
49+
found_response = len(response) >= 0 and response != []
50+
if not found_response and retries > 1:
51+
time.sleep(1)
52+
retries += 1
5053
return response
5154

5255
def get_users(self, omit_empty_organisms=False):

arrow/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ def read_global_config():
2323
return DEFAULT_CONFIG
2424

2525
with open(config_path) as f:
26-
return yaml.load(f, Loader=yaml.safe_load)
26+
return yaml.safe_load(f)

0 commit comments

Comments
 (0)