mirror of
https://github.com/haiwen/seahub.git
synced 2025-04-28 03:10:45 +00:00
Reduce redundant operations
This commit is contained in:
parent
5b02073588
commit
16af598e16
@ -87,7 +87,7 @@ from seahub.views import is_registered_user, check_folder_permission, \
|
||||
create_default_library, list_inner_pub_repos
|
||||
from seahub.views.file import get_file_view_path_and_perm, send_file_access_msg
|
||||
if HAS_FILE_SEARCH:
|
||||
from seahub_extra.search.utils import search_file_by_name, search_repo_file_by_name, SEARCH_FILEEXT
|
||||
from seahub_extra.search.utils import search_files, get_search_repos_map, SEARCH_FILEEXT
|
||||
from seahub.utils import HAS_OFFICE_CONVERTER
|
||||
if HAS_OFFICE_CONVERTER:
|
||||
from seahub.utils import query_office_convert_status, prepare_converted_html
|
||||
@ -351,18 +351,7 @@ class Search(APIView):
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle, )
|
||||
|
||||
def _search_in_a_single_repo(self, request, repo, keyword, suffixes, start, size):
|
||||
results, total = search_repo_file_by_name(request,
|
||||
repo, keyword, suffixes, start, size)
|
||||
return results, total
|
||||
|
||||
def _search_in_repos(self, request, keyword, suffixes, start, size):
|
||||
results, total = search_file_by_name(request,
|
||||
keyword, suffixes, start, size)
|
||||
return results, total
|
||||
|
||||
def get(self, request, format=None):
|
||||
|
||||
if not HAS_FILE_SEARCH:
|
||||
error_msg = 'Search not supported.'
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
@ -423,6 +412,9 @@ class Search(APIView):
|
||||
if i_ext:
|
||||
suffixes.append(i_ext)
|
||||
|
||||
username = request.user.username
|
||||
org_id = request.user.org.org_id if is_org_context(request) else None
|
||||
repo_id_map = {}
|
||||
# check recourse and permissin when search in a single repo
|
||||
if is_valid_repo_id_format(search_repo):
|
||||
repo_id = search_repo
|
||||
@ -436,17 +428,15 @@ class Search(APIView):
|
||||
if not check_folder_permission(request, repo_id, '/'):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
repo_id_map[repo_id] = repo
|
||||
else:
|
||||
shared_from = request.GET.get('shared_from', None)
|
||||
not_shared_from = request.GET.get('not_shared_from', None)
|
||||
repo_id_map = get_search_repos_map(search_repo, username, org_id, shared_from, not_shared_from)
|
||||
|
||||
# search file
|
||||
try:
|
||||
# search file::search in a single repo
|
||||
if is_valid_repo_id_format(search_repo):
|
||||
results, total = self._search_in_a_single_repo(request,
|
||||
repo, keyword, suffixes, start, size)
|
||||
else:
|
||||
# search file::search in all repos user can access
|
||||
results, total = self._search_in_repos(request,
|
||||
keyword, suffixes, start, size)
|
||||
results, total = search_files(repo_id_map, keyword, suffixes, start, size, org_id)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error'
|
||||
@ -460,20 +450,6 @@ class Search(APIView):
|
||||
e.pop('score', None)
|
||||
|
||||
repo_id = e['repo_id']
|
||||
path = e['fullpath']
|
||||
try:
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
repo_owner = get_repo_owner(request, repo_id)
|
||||
dirent = seafile_api.get_dirent_by_path(repo.store_id, path)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
continue
|
||||
|
||||
e['repo_name'] = repo.name
|
||||
e['repo_owner_email'] = repo_owner
|
||||
e['repo_owner_name'] = email2nickname(repo_owner)
|
||||
e['repo_owner_contact_email'] = email2contact_email(repo_owner)
|
||||
e['size'] = dirent.size
|
||||
|
||||
if with_permission.lower() == 'true':
|
||||
permission = check_folder_permission(request, repo_id, '/')
|
||||
|
@ -1,14 +1,15 @@
|
||||
import json
|
||||
import pytest
|
||||
from mock import patch
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from seahub.test_utils import BaseTestCase
|
||||
from seahub.api2.views import Search
|
||||
from seahub.test_utils import BaseTestCase, TRAVIS
|
||||
|
||||
from seaserv import seafile_api
|
||||
|
||||
|
||||
class SearchTest(BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.file_path = self.file
|
||||
self.repo_id = self.repo.id
|
||||
@ -27,15 +28,16 @@ class SearchTest(BaseTestCase):
|
||||
"fullpath": self.file_path,
|
||||
"repo_name": "seafile-design",
|
||||
"is_dir": False,
|
||||
"size": 142758
|
||||
"size": 142758,
|
||||
"repo": seafile_api.get_repo(self.repo_id)
|
||||
},
|
||||
]
|
||||
|
||||
@patch('seahub.api2.views.HAS_FILE_SEARCH', True)
|
||||
@patch.object(Search, '_search_in_repos')
|
||||
def test_can_search_file(self, mock_search_in_repos):
|
||||
|
||||
mock_search_in_repos.return_value = self.mock_results, \
|
||||
@patch('seahub.api2.views.search_files')
|
||||
@pytest.mark.skipif(TRAVIS, reason="")
|
||||
def test_can_search_file(self, mock_search_files):
|
||||
mock_search_files.return_value = self.mock_results, \
|
||||
self.mock_total
|
||||
|
||||
self.login_as(self.user)
|
||||
@ -48,12 +50,7 @@ class SearchTest(BaseTestCase):
|
||||
assert json_resp['results'][0]['repo_id'] == self.mock_results[0]['repo_id']
|
||||
|
||||
@patch('seahub.api2.views.HAS_FILE_SEARCH', True)
|
||||
@patch.object(Search, '_search_in_a_single_repo')
|
||||
def test_can_not_search_with_invalid_repo_permission(self, mock_search_in_a_single_repo):
|
||||
|
||||
mock_search_in_a_single_repo.return_value = self.mock_results, \
|
||||
self.mock_total
|
||||
|
||||
def test_can_not_search_with_invalid_repo_permission(self):
|
||||
self.login_as(self.admin)
|
||||
resp = self.client.get(self.url + '?q=lian&search_repo=%s' %
|
||||
self.repo_id)
|
||||
|
Loading…
Reference in New Issue
Block a user