Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,6 @@ htmlcov/
.coverage
.cache
.idea/
build
dist
*.egg-info
7 changes: 6 additions & 1 deletion seafileapi/client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import requests
from json.decoder import JSONDecodeError
from seafileapi.utils import urljoin
from seafileapi.exceptions import ClientHttpError
from seafileapi.repos import Repos
Expand Down Expand Up @@ -96,7 +97,11 @@ def _send_request(self, method, url, *args, **kwargs):
expected = (expected,)
resp = requests.request(method, url, **kwargs)
if resp.status_code not in expected:
msg = 'Expected {}, but get {}'.format(' or '.join(map(str, expected)), resp.status_code)
try:
err = resp.json().get('error_msg', 'Unknown')
except JSONDecodeError:
err = 'Unknown'
msg = 'Expected {}, but got {}. Error Message: {}'.format(' or '.join(map(str, expected)), resp.status_code, err )
raise ClientHttpError(resp.status_code, msg)

return resp
31 changes: 28 additions & 3 deletions seafileapi/groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')

Expand Down Expand Up @@ -106,10 +107,23 @@ def get_member(self, email):

def list_members(self):
"""
Get all members from a group

Note: Endpoint uses paging
Ref: https://github.com/haiwen/seahub/blob/master/seahub/api2/endpoints/group_members.py#L56

:return:
"""
members = self.client.get(self.GROUP_MEMBERS_URL.format(self.id, '')).json()
page=1
per_page=100
members = []
while True:
res = self.client.get(self.GROUP_MEMBERS_URL.format(
self.id, ''), params={"page": page, "per_page": per_page}).json()
members += res
page += 1
if len(res) < per_page:
break
return [Member(self.client, **member) for member in members] if members else []

def add_member(self, email):
Expand All @@ -121,13 +135,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):
"""
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from setuptools import setup, find_packages

__version__ = '0.1.2'
__version__ = '0.1.3'


setup(name='seafileapi',
Expand Down
5 changes: 5 additions & 0 deletions tests/test_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down