diff --git a/seahub/api2/endpoints/admin/libraries.py b/seahub/api2/endpoints/admin/libraries.py
index e07e0daaf5..32dcd1a5e0 100644
--- a/seahub/api2/endpoints/admin/libraries.py
+++ b/seahub/api2/endpoints/admin/libraries.py
@@ -6,12 +6,10 @@ from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from django.template.defaultfilters import filesizeformat
+from django.utils.translation import ugettext as _
from seaserv import ccnet_api, seafile_api, seafserv_threaded_rpc
-from seahub.views.ajax import get_related_users_by_org_repo, \
- get_related_users_by_repo
-from seahub.signals import repo_deleted
from seahub.views import get_system_default_repo_id
from seahub.utils import is_org_context
from seahub.base.accounts import User
@@ -35,6 +33,8 @@ def get_repo_info(repo):
class AdminLibraries(APIView):
+ """ return all libraries
+ """
authentication_classes = (TokenAuthentication, SessionAuthentication)
throttle_classes = (UserRateThrottle,)
@@ -87,18 +87,9 @@ class AdminLibrary(APIView):
return Response({'success': True})
if get_system_default_repo_id() == repo_id:
- error_msg = ('System library can not be deleted.')
+ error_msg = _('System library can not be deleted.')
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
- if is_org_context(request):
- org_id = seafserv_threaded_rpc.get_org_id_by_repo_id(repo_id)
- usernames = get_related_users_by_org_repo(org_id, repo_id)
- repo_owner = seafile_api.get_org_repo_owner(repo_id)
- else:
- org_id = -1
- usernames = get_related_users_by_repo(repo_id)
- repo_owner = seafile_api.get_repo_owner(repo_id)
-
try:
seafile_api.remove_repo(repo_id)
except Exception as e:
@@ -106,13 +97,11 @@ class AdminLibrary(APIView):
error_msg = 'Internal Server Error'
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
- repo_deleted.send(sender=None, org_id=org_id, usernames=usernames,
- repo_owner=repo_owner, repo_id=repo_id,
- repo_name=repo.repo_name)
-
return Response({'success': True})
def put(self, request, repo_id, format=None):
+ """ transfer a library
+ """
repo = seafile_api.get_repo(repo_id)
if not repo:
error_msg = 'Library %s not found.' % repo_id
diff --git a/seahub/api2/endpoints/admin/library_dirents.py b/seahub/api2/endpoints/admin/library_dirents.py
index 03acaa0269..b7b9cfc9e2 100644
--- a/seahub/api2/endpoints/admin/library_dirents.py
+++ b/seahub/api2/endpoints/admin/library_dirents.py
@@ -1,7 +1,7 @@
import os
import stat
import logging
-import time
+import posixpath
from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAdminUser
@@ -26,6 +26,22 @@ from seahub.api2.utils import api_error
logger = logging.getLogger(__name__)
+def get_dirent_info(dirent):
+
+ if stat.S_ISDIR(dirent.mode):
+ is_file = False
+ else:
+ is_file = True
+
+ result = {}
+ result['is_file'] = is_file
+ result['obj_name'] = dirent.obj_name
+ result['file_size'] = filesizeformat(dirent.size) if is_file else ''
+ result['last_update'] = timestamp_to_isoformat_timestr(dirent.mtime)
+
+ return result
+
+
class AdminLibraryDirents(APIView):
authentication_classes = (TokenAuthentication, SessionAuthentication)
@@ -33,6 +49,9 @@ class AdminLibraryDirents(APIView):
permission_classes = (IsAdminUser,)
def get(self, request, repo_id, format=None):
+ """ get all file/folder in a library
+ """
+
repo = seafile_api.get_repo(repo_id)
if not repo:
error_msg = 'Library %s not found.' % repo_id
@@ -55,7 +74,6 @@ class AdminLibraryDirents(APIView):
error_msg = 'Folder %s not found.' % parent_dir
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
- # TODO org?
if is_org_context(request):
repo_owner = seafile_api.get_org_repo_owner(repo_id)
else:
@@ -77,29 +95,15 @@ class AdminLibraryDirents(APIView):
return_results['dirent_list'] = []
for dirent in dirs:
- result = {}
- if stat.S_ISDIR(dirent.mode):
- result['is_file'] = False
- result['obj_name'] = dirent.obj_name
- result['file_size'] = ''
- result['last_update'] = timestamp_to_isoformat_timestr(dirent.mtime)
- else:
- if repo.version == 0:
- size = seafile_api.get_file_size(repo.store_id,
- repo.version, dirent.obj_id)
- else:
- size = dirent.size
-
- result['is_file'] = True
- result['obj_name'] = dirent.obj_name
- result['file_size'] = filesizeformat(size)
- result['last_update'] = timestamp_to_isoformat_timestr(dirent.mtime)
-
- return_results['dirent_list'].append(result)
+ dirent_info = get_dirent_info(dirent)
+ return_results['dirent_list'].append(dirent_info)
return Response(return_results)
def post(self, request, repo_id, format=None):
+ """ create file/folder in a library
+ """
+
repo = seafile_api.get_repo(repo_id)
if not repo:
error_msg = 'Library %s not found.' % repo_id
@@ -137,13 +141,11 @@ class AdminLibraryDirents(APIView):
error_msg = 'Internal Server Error'
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
- result = {}
- result['is_file'] = False
- result['obj_name'] = obj_name
- result['file_size'] = filesizeformat(0)
- result['last_update'] = timestamp_to_isoformat_timestr(time.time())
+ dirent_path = posixpath.join(parent_dir, obj_name)
+ dirent = seafile_api.get_dirent_by_path(repo_id, dirent_path)
+ dirent_info = get_dirent_info(dirent)
- return Response(result)
+ return Response(dirent_info)
class AdminLibraryDirent(APIView):
@@ -152,6 +154,9 @@ class AdminLibraryDirent(APIView):
permission_classes = (IsAdminUser,)
def get(self, request, repo_id):
+ """ get info of a single file/folder in a library
+ """
+
repo = seafile_api.get_repo(repo_id)
if not repo:
error_msg = 'Library %s not found.' % repo_id
@@ -169,47 +174,39 @@ class AdminLibraryDirent(APIView):
if path[0] != '/':
path = '/' + path
- file_id = None
- dir_id = None
try:
- file_id = seafile_api.get_file_id_by_path(repo_id, path)
- dir_id = seafile_api.get_dir_id_by_path(repo_id, path)
+ dirent = seafile_api.get_dirent_by_path(repo_id, path)
except SearpcError as e:
logger.error(e)
error_msg = 'Internal Server Error'
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
- if file_id:
- is_file = True
- elif dir_id:
- is_file = False
- else:
- error_msg = 'path %s not found.' % path
+ if not dirent:
+ error_msg = 'file/folder %s not found.' % path
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
- username = request.user.username
- obj_name = os.path.basename(path.rstrip('/'))
+ if stat.S_ISDIR(dirent.mode):
+ is_file = False
+ else:
+ is_file = True
+ username = request.user.username
if is_file and request.GET.get('dl', '0') == '1':
+
token = seafile_api.get_fileserver_access_token(repo_id,
- file_id, 'download', username, use_onetime=True)
- dl_url = gen_file_get_url(token, obj_name)
+ dirent.obj_id, 'download', username, use_onetime=True)
+ dl_url = gen_file_get_url(token, dirent.obj_name)
send_file_access_msg(request, repo, path, 'web')
return Response({'download_url': dl_url})
- size = seafile_api.get_file_size(repo.store_id,
- repo.version, file_id or dir_id)
+ dirent_info = get_dirent_info(dirent)
- result = {}
- result['is_file'] = is_file
- result['obj_name'] = obj_name
- result['file_size'] = filesizeformat(size)
-# TODO
-# result['last_update'] = timestamp_to_isoformat_timestr(dirent.mtime)
-
- return Response(result)
+ return Response(dirent_info)
def delete(self, request, repo_id):
+ """ delete a single file/folder in a library
+ """
+
repo = seafile_api.get_repo(repo_id)
if not repo:
error_msg = 'Library %s not found.' % repo_id
diff --git a/seahub/api2/endpoints/admin/trash_libraries.py b/seahub/api2/endpoints/admin/trash_libraries.py
index 7c984a5139..69731295d8 100644
--- a/seahub/api2/endpoints/admin/trash_libraries.py
+++ b/seahub/api2/endpoints/admin/trash_libraries.py
@@ -25,6 +25,8 @@ class AdminTrashLibraries(APIView):
permission_classes = (IsAdminUser,)
def get(self, request, format=None):
+ """ get all deleted libraries
+ """
repos_all = seafile_api.get_trash_repo_list(-1, -1)
return_results = []
@@ -40,6 +42,9 @@ class AdminTrashLibraries(APIView):
return Response(return_results)
def delete(self, request, format=None):
+ """ clean all deleted libraries
+ """
+
try:
seafile_api.empty_repo_trash()
except SearpcError as e:
@@ -56,6 +61,9 @@ class AdminTrashLibrary(APIView):
permission_classes = (IsAdminUser,)
def put(self, request, repo_id, format=None):
+ """ restore a deleted library
+ """
+
try:
seafile_api.restore_repo_from_trash(repo_id)
except SearpcError as e:
@@ -66,6 +74,9 @@ class AdminTrashLibrary(APIView):
return Response({'success': True})
def delete(self, request, repo_id, format=None):
+ """ permanently delete a deleted library
+ """
+
try:
seafile_api.del_repo_from_trash(repo_id)
except SearpcError as e:
diff --git a/seahub/templates/js/sysadmin-templates.html b/seahub/templates/js/sysadmin-templates.html
index 10cf37c94f..7ece74fde1 100644
--- a/seahub/templates/js/sysadmin-templates.html
+++ b/seahub/templates/js/sysadmin-templates.html
@@ -3,10 +3,10 @@