diff --git a/seafileapi/groups.py b/seafileapi/groups.py index c91fd3f..f9db9e2 100644 --- a/seafileapi/groups.py +++ b/seafileapi/groups.py @@ -40,6 +40,7 @@ class Group: """ GROUPS_URL = '/api/v2.1/groups/{}/' GROUP_MEMBERS_URL = '/api/v2.1/groups/{}/members/{}' + GROUP_MEMBERS_BULK_URL = '/api/v2.1/groups/{}/members/{}/bulk' GROUP_MESSAGES_URL = '/api2/groups/{}/discussions/{}' __slots__ = ('client', 'id', 'name', 'owner', 'created_at', 'admins', 'avatar_url', 'wiki_enabled') @@ -121,13 +122,24 @@ def add_member(self, email): res = self.client.post(self.GROUP_MEMBERS_URL.format(self.id, ''), data={'email': email}).json() return self.get_member(res['email']) - def add_members(self): + def add_members(self, emails): + """ + + :param emails: + :return: + """ + res = self.client.post(self.GROUP_MEMBERS_BULK_URL.format(self.id, ''), data={'emails': ','.join(emails)}).json() + # TODO Return 'failed' members as well? + return [self.get_member(member['email']) for member in res['success']] + + def delete_member(self, email): """ :param email: :return: """ - raise NotImplemented + res = self.client.delete(self.GROUP_MEMBERS_URL.format(self.id, email)).json() + return bool(res['success']) def list_messages(self): """ diff --git a/tests/test_groups.py b/tests/test_groups.py index 911a03f..5e24017 100644 --- a/tests/test_groups.py +++ b/tests/test_groups.py @@ -27,6 +27,11 @@ def test_members(group, test_account1, test_account2): member2.delete() assert member2 not in group.list_members() + member1.delete() + member2.delete() + members = group.add_members([test_account1.email, test_account2.email]) + assert member1 in group.list_members() and member2 in group.list_members() + def test_messages(group, test_account1, test_account2): member1 = group.add_member(test_account1.email)