Skip to content

Changes for Python 3 (and 2) support #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
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
203 changes: 203 additions & 0 deletions doc.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,23 @@
<li><a href="#seaffile_delete">Delete file</a></li>
</ul>
</li>
<li>
<a href="#user">User</a>
<ul>
<li><a href="#user_get_accounts">Get accounts</a></li>
<li><a href="#user_create_account">Create account</a></li>
<li><a href="#user_delete_account">Delete account</a></li>
<li><a href="#user_add_account_to_group">Add account to group</a></li>
</ul>
</li>
<li>
<a href="#group">Group</a>
<ul>
<li><a href="#group_get_groupss">Get groups</a></li>
<li><a href="#group_create_group">Create group</a></li>
<li><a href="#group_delete_group">Delete group</a></li>
</ul>
</li>
</ul>
</div>
</p>
Expand Down Expand Up @@ -429,3 +446,189 @@ None
**Return Type**

A Response Instance


## <a id="user"></a> User ##

### <a id="user_get_accounts"></a> Get accounts ###
**Request Parameters**

None

**Sample Case**

```python

import seafileapi

client = seafileapi.connect('http://127.0.0.1:8000', '[email protected]', 'password')
accounts = client.users.get_accounts()
```

**Return Type**

A list of dictionnary containing source and email keys.

**Exception**

TBD

### <a id="user_create_account"></a> Create account ###
**Request Parameters**

* email -- email as login name
* password -- plain text password
* name -- full text display name
* groups_names -- list of groups' names to add this user to
* note -- description / comment / whatever
* is_staff -- is admin, default False
* is_active -- can connect, default True


**Sample Case**

```python

import seafileapi

client = seafileapi.connect('http://127.0.0.1:8000', '[email protected]', 'password')
accounts = client.users.create_account('[email protected]', 'password', 'Test user', ['admins'])
```

**Return Type**

A dictionnary, containing the created user.

**Exception**

TBD


### <a id="user_delete_account"></a> Delete account ###
**Request Parameters**

* email -- email as login name


**Sample Case**

```python

import seafileapi

client = seafileapi.connect('http://127.0.0.1:8000', '[email protected]', 'password')
accounts = client.users.delete_account('[email protected]')
```

**Return Type**

TBD

**Exception**

TBD


### <a id="user_add_account_to_group"></a> Add account to group ###
**Request Parameters**

* username -- email as login name
* groups_name -- group's name to add this user to

**Sample Case**

```python

import seafileapi

client = seafileapi.connect('http://127.0.0.1:8000', '[email protected]', 'password')
accounts = client.users.add_account_to_group('[email protected]', 'admins')
```

**Return Type**

TBD

**Exception**

TBD




## <a id="group"></a> Group ##

### <a id="group_get_groups"></a> Get groups ###
**Request Parameters**

None

**Sample Case**

```python

import seafileapi

client = seafileapi.connect('http://127.0.0.1:8000', '[email protected]', 'password')
groups = client.groups.get_groups()
```

**Return Type**

A list of groups.

**Exception**

TBD



### <a id="group_create_group"></a> Create group ###
**Request Parameters**

* group_name -- group's name


**Sample Case**

```python

import seafileapi

client = seafileapi.connect('http://127.0.0.1:8000', '[email protected]', 'password')
accounts = client.groups.create_group('admins')
```

**Return Type**

TBD

**Exception**

TBD


### <a id="group_delete_group"></a> Delete group ###
**Request Parameters**

* group_name -- group's name


**Sample Case**

```python

import seafileapi

client = seafileapi.connect('http://127.0.0.1:8000', '[email protected]', 'password')
accounts = client.groups.delete_group('admin')
```

**Return Type**

TBD

**Exception**

TBD

17 changes: 9 additions & 8 deletions seafileapi/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
from seafileapi.utils import urljoin
from seafileapi.exceptions import ClientHttpError
from seafileapi.repos import Repos
from seafileapi.group import Groups
from seafileapi.user import Users


class SeafileApiClient(object):
"""Wraps seafile web api"""
Expand All @@ -15,6 +18,7 @@ def __init__(self, server, username=None, password=None, token=None):

self.repos = Repos(self)
self.groups = Groups(self)
self.users = Users(self)

if token is None:
self._get_token()
Expand Down Expand Up @@ -43,6 +47,9 @@ def get(self, *args, **kwargs):
def post(self, *args, **kwargs):
return self._send_request('POST', *args, **kwargs)

def put(self, *args, **kwargs):
return self._send_request('PUT', *args, **kwargs)

def delete(self, *args, **kwargs):
return self._send_request('delete', *args, **kwargs)

Expand All @@ -57,18 +64,12 @@ def _send_request(self, method, url, *args, **kwargs):
expected = kwargs.pop('expected', 200)
if not hasattr(expected, '__iter__'):
expected = (expected, )

resp = requests.request(method, url, *args, **kwargs)
if resp.status_code not in expected:
msg = 'Expected %s, but get %s' % \
(' or '.join(map(str, expected)), resp.status_code)
msg += '\n' + resp.content.decode('utf-8')
raise ClientHttpError(resp.status_code, msg)

return resp


class Groups(object):
def __init__(self, client):
pass

def create_group(self, name):
pass
8 changes: 7 additions & 1 deletion seafileapi/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import os
import posixpath
import re
import sys
from seafileapi.utils import querystr, utf8lize

ZERO_OBJ_ID = '0000000000000000000000000000000000000000'
Expand Down Expand Up @@ -157,12 +158,17 @@ def upload(self, fileobj, filename):
Return a :class:`SeafFile` object of the newly uploaded file.
"""
if isinstance(fileobj, str):
fileobj = io.BytesIO(fileobj)
if sys.version_info.major > 2:
fileobj = io.BytesIO(bytes(fileobj, 'UTF-8'))
else:
fileobj = io.BytesIO(fileobj)

upload_url = self._get_upload_link()
files = {
'file': (filename, fileobj),
'parent_dir': self.path,
}
# print(files)
self.client.post(upload_url, files=files)
return self.repo.get_file(posixpath.join(self.path, filename))

Expand Down
95 changes: 80 additions & 15 deletions seafileapi/group.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,87 @@


class Group(object):
def __init__(self, client, group_id, group_name):
class Groups(object):
def __init__(self, client):
"""
client -- Seafile client object
"""
self.client = client
self.group_id = group_id
self.group_name = group_name

def list_memebers(self):
pass
def get_groups(self):
"""
Returns list of groups
"""
resp = self.client.get('/api2/groups/')
value = resp.json()
return value['groups']

# def get_group_members(self, group_name):
# """
# Returns list of members of a group
# """
# groups = self.get_groups()
# found = False
# for i in groups:
# if i['name'] == group_name:
# url = '/api2/groups/{}/members/'.format(i['id'])
# resp = self.client.get(url)
# found = True
# break
# value = resp.json()
# return value

def create_group(self, group_name):
"""
Creates group

group_name -- name
"""
data = {
'group_name': group_name,
}
resp = self.client.put(
'/api2/groups/',
data=data,
)
value = resp.json()
return value

def delete_group(self, group_name):
"""
Delete group

group_name -- name
"""
url = '/api2/groups/{}'.format(self.get_id_from_group_name(group_name))
resp = self.client.delete(url)
value = resp.json()
return value

def delete(self):
pass
def get_id_from_group_name(self, group_name):
groups = self.get_groups()
for i in groups:
if i['name'] == group_name:
return i['id']

def add_member(self, username):
pass
raise ValueError('Group {} not found'.format(group_name))

def remove_member(self, username):
pass

def list_group_repos(self):
pass
# class Group(object):
# def __init__(self, client, group_id, group_name):
# self.client = client
# self.group_id = group_id
# self.group_name = group_name
#
# def list_memebers(self):
# pass
#
# def delete(self):
# pass
#
# def add_member(self, username):
# pass
#
# def remove_member(self, username):
# pass
#
# def list_group_repos(self):
# pass
Loading