diff --git a/seahub/api2/endpoints/admin/libraries.py b/seahub/api2/endpoints/admin/libraries.py index d9969c01ec..ed61d6b5ab 100644 --- a/seahub/api2/endpoints/admin/libraries.py +++ b/seahub/api2/endpoints/admin/libraries.py @@ -58,8 +58,9 @@ class AdminLibraries(APIView): # search by name and owner owned_repos = seafile_api.get_owned_repo_list(owner) for repo in owned_repos: - if not repo.name: + if not repo.name or repo.is_virtual: continue + if repo_name in repo.name: repo_info = get_repo_info(repo) repos.append(repo_info) @@ -70,8 +71,9 @@ class AdminLibraries(APIView): # search by name(keyword in name) repos_all = seafile_api.get_repo_list(-1, -1) for repo in repos_all: - if not repo.name: + if not repo.name or repo.is_virtual: continue + if repo_name in repo.name: repo_info = get_repo_info(repo) repos.append(repo_info) @@ -82,6 +84,9 @@ class AdminLibraries(APIView): # search by owner owned_repos = seafile_api.get_owned_repo_list(owner) for repo in owned_repos: + if repo.is_virtual: + continue + repo_info = get_repo_info(repo) repos.append(repo_info) diff --git a/seahub/api2/urls.py b/seahub/api2/urls.py index 6d37cc0cc6..c627b3ee49 100644 --- a/seahub/api2/urls.py +++ b/seahub/api2/urls.py @@ -78,7 +78,6 @@ urlpatterns = patterns('', url(r'^send-upload-link/$', SendUploadLinkView.as_view(), name='api2-send-upload-link'), url(r'^shared-links/$', SharedLinksView.as_view()), url(r'^shared-upload-links/$', SharedUploadLinksView.as_view()), - url(r'^virtual-repos/$', VirtualRepos.as_view()), url(r'^repo-tokens/$', RepoTokensView.as_view(), name='api2-repo-tokens'), url(r'^organization/$', OrganizationView.as_view()), diff --git a/seahub/api2/views.py b/seahub/api2/views.py index f4fb891783..929502acca 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -75,8 +75,7 @@ from seahub.utils.file_size import get_file_size_unit from seahub.utils.timeutils import utc_to_local, datetime_to_isoformat_timestr from seahub.views import is_registered_user, check_file_lock, \ group_events_data, get_diff, create_default_library, \ - list_inner_pub_repos, get_virtual_repos_by_owner, \ - check_folder_permission + list_inner_pub_repos, check_folder_permission from seahub.views.ajax import get_share_in_repo_list, get_groups_by_user, \ get_group_repos from seahub.views.file import get_file_view_path_and_perm, send_file_access_msg @@ -399,7 +398,6 @@ class Repos(APIView): # parse request params filter_by = { 'mine': False, - 'sub': False, 'shared': False, 'group': False, 'org': False, @@ -415,8 +413,6 @@ class Repos(APIView): filter_by[f] = True email = request.user.username - if not UserOptions.objects.is_sub_lib_enabled(email): - filter_by['sub'] = False repos_json = [] if filter_by['mine']: @@ -457,42 +453,6 @@ class Repos(APIView): repo["random_key"] = r.random_key repos_json.append(repo) - if filter_by['sub']: - # compose abbrev origin path for display - sub_repos = [] - sub_repos = get_virtual_repos_by_owner(request) - for repo in sub_repos: - repo.abbrev_origin_path = get_sub_repo_abbrev_origin_path( - repo.origin_repo_name, repo.origin_path) - - sub_repos.sort(lambda x, y: cmp(y.last_modify, x.last_modify)) - for r in sub_repos: - # print r._dict - repo = { - "type": "repo", - "id": r.id, - "name": r.name, - "origin_repo_id": r.origin_repo_id, - "origin_path": r.origin_path, - "abbrev_origin_path": r.abbrev_origin_path, - "mtime": r.last_modify, - "mtime_relative": translate_seahub_time(r.last_modify), - "owner": email, - "desc": r.desc, - "size": r.size, - "encrypted": r.encrypted, - "permission": 'rw', - "virtual": r.is_virtual, - "root": r.root, - "head_commit_id": r.head_cmmt_id, - "version": r.version, - } - if r.encrypted: - repo["enc_version"] = r.enc_version - repo["magic"] = r.magic - repo["random_key"] = r.random_key - repos_json.append(repo) - if filter_by['shared']: shared_repos = get_share_in_repo_list(request, -1, -1) shared_repos.sort(lambda x, y: cmp(y.last_modify, x.last_modify)) @@ -2899,24 +2859,6 @@ class BeSharedRepos(APIView): status=200, content_type=json_content_type) -class VirtualRepos(APIView): - authentication_classes = (TokenAuthentication, ) - permission_classes = (IsAuthenticated,) - throttle_classes = (UserRateThrottle, ) - - def get(self, request, format=None): - result = {} - - try: - virtual_repos = get_virtual_repos_by_owner(request) - except SearpcError, e: - return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, - "error:" + e.msg) - - result['virtual-repos'] = virtual_repos - return HttpResponse(json.dumps(result, cls=SearpcObjEncoder), - content_type=json_content_type) - class SharedFileView(APIView): # Anyone should be able to access a Shared File assuming they have the token throttle_classes = (UserRateThrottle, ) diff --git a/seahub/institutions/views.py b/seahub/institutions/views.py index b0662fb741..aac0778d13 100644 --- a/seahub/institutions/views.py +++ b/seahub/institutions/views.py @@ -129,8 +129,11 @@ def useradmin_search(request): def user_info(request, email): """Show user info, libraries and groups. """ + owned_repos = mute_seafile_api.get_owned_repo_list(email, ret_corrupted=True) + owned_repos = filter(lambda r: not r.is_virtual, owned_repos) + in_repos = mute_seafile_api.get_share_in_repo_list(email, -1, -1) space_usage = mute_seafile_api.get_user_self_usage(email) space_quota = mute_seafile_api.get_user_quota(email) diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py index 94965a61e3..b983a8b885 100644 --- a/seahub/views/__init__.py +++ b/seahub/views/__init__.py @@ -761,20 +761,6 @@ def get_owned_repo_list(request): else: return seafile_api.get_owned_repo_list(username) -def get_virtual_repos_by_owner(request): - """List virtual repos. - - Arguments: - - `request`: - """ - username = request.user.username - if is_org_context(request): - org_id = request.user.org.org_id - return seaserv.seafserv_threaded_rpc.get_org_virtual_repos_by_owner( - org_id, username) - else: - return seafile_api.get_virtual_repos_by_owner(username) - @login_required @user_mods_check def libraries(request): diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py index cea5ab1ffa..6ab7759db6 100644 --- a/seahub/views/sysadmin.py +++ b/seahub/views/sysadmin.py @@ -494,6 +494,8 @@ def user_info(request, email): ret_corrupted=True) in_repos = seafile_api.get_org_share_in_repo_list(org_id, email, -1, -1) + owned_repos = filter(lambda r: not r.is_virtual, owned_repos) + # get user profile profile = Profile.objects.get_profile_by_user(email) d_profile = DetailedProfile.objects.get_detailed_profile_by_user(email) diff --git a/tests/api/test_repos.py b/tests/api/test_repos.py index 31f6a2657e..1c5adafbe2 100644 --- a/tests/api/test_repos.py +++ b/tests/api/test_repos.py @@ -9,7 +9,7 @@ import unittest from seaserv import seafile_api from tests.api.apitestbase import ApiTestBase from tests.api.urls import ( - REPOS_URL, DEFAULT_REPO_URL, VIRTUAL_REPOS_URL, GET_REPO_TOKENS_URL + REPOS_URL, DEFAULT_REPO_URL, GET_REPO_TOKENS_URL ) from tests.common.utils import apiurl, urljoin, randstring from tests.common.common import USERNAME, PASSWORD, SEAFILE_BASE_URL @@ -122,41 +122,6 @@ class ReposApiTest(ApiTestBase): self.assertIsNotNone(info['relay_id']) self.assertIsNotNone(info['email']) - def test_list_virtual_repos(self): - # TODO: we need to create at least on virtual repo first - vrepos = self.get(VIRTUAL_REPOS_URL).json()['virtual-repos'] - for repo in vrepos: - self.assertIsNotNone(repo['virtual_perm']) - #self.assertIsNotNone(repo['store_id']) - self.assertIsNotNone(repo['worktree_invalid']) - self.assertIsNotNone(repo['encrypted']) - self.assertIsNotNone(repo['origin_repo_name']) - self.assertIsNotNone(repo['last_modify']) - self.assertIsNotNone(repo['no_local_history']) - #self.assertIsNotNone(repo['head_branch']) - self.assertIsNotNone(repo['last_sync_time']) - self.assertIsNotNone(repo['id']) - self.assertIsNotNone(repo['size']) - #self.assertIsNotNone(repo['share_permission']) - self.assertIsNotNone(repo['worktree_changed']) - self.assertIsNotNone(repo['worktree_checktime']) - self.assertIsNotNone(repo['origin_path']) - self.assertEqual(repo['is_virtual'], True) - self.assertIsNotNone(repo['origin_repo_id']) - self.assertIsNotNone(repo['version']) - #self.assertIsNotNone(repo['random_key']) - self.assertIsNotNone(repo['is_original_owner']) - #self.assertIsNotNone(repo['shared_email']) - self.assertIsNotNone(repo['enc_version']) - self.assertIsNotNone(repo['head_cmmt_id']) - #self.assertIsNotNone(repo['desc']) - self.assertIsNotNone(repo['index_corrupted']) - #self.assertIsNotNone(repo['magic']) - self.assertIsNotNone(repo['name']) - #self.assertIsNotNone(repo['worktree']) - self.assertIsNotNone(repo['auto_sync']) - #self.assertIsNotNone(repo['relay_id']) - @pytest.mark.xfail def test_generate_repo_tokens(self): with self.get_tmp_repo() as ra: diff --git a/tests/api/urls.py b/tests/api/urls.py index 780f69bd3b..5291aec8c7 100644 --- a/tests/api/urls.py +++ b/tests/api/urls.py @@ -10,7 +10,6 @@ AVATAR_BASE_URL = apiurl(u'/api2/avatars/') REPOS_URL = apiurl('/api2/repos/') DEFAULT_REPO_URL = apiurl('/api2/default-repo/') -VIRTUAL_REPOS_URL = apiurl('/api2/virtual-repos/') GET_REPO_TOKENS_URL = apiurl('/api2/repo-tokens/') GROUPS_URL = apiurl(u'/api2/groups/')