1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-18 16:36:15 +00:00

performance, funciton name (#1795)

* performance, funciton name

* middle

* depend with_repos, modify test
This commit is contained in:
zMingGit
2017-09-09 11:10:34 +08:00
committed by xiez
parent 0b973d854d
commit f9c16e95e1
6 changed files with 48 additions and 28 deletions

View File

@@ -100,7 +100,7 @@ class DirSharedItemsEndpoint(APIView):
path, repo_owner)
ret = []
# change is_admin to True if user in admin groups.
admin_groups = ExtraGroupsSharePermission.objects.get_admin_groups(repo_id)
admin_groups = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(repo_id)
for item in share_items:
ret.append({
"share_type": "group",
@@ -109,7 +109,7 @@ class DirSharedItemsEndpoint(APIView):
"name": seaserv.get_group(item.group_id).group_name,
},
"permission": item.perm,
"is_admin": str(item.group_id) in admin_groups,
"is_admin": item.group_id in admin_groups,
})
return ret

View File

@@ -102,11 +102,13 @@ class Groups(APIView):
error_msg = 'with_repos invalid.'
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
all_group_admin_records = ExtraGroupsSharePermission.objects.get_all_admin_records()
all_group_admin_records = [(e.repo_id, e.group_id)for e in all_group_admin_records]
groups = []
if with_repos:
gids = [g.id for g in user_groups]
admin_info = ExtraGroupsSharePermission.objects.batch_get_repos_with_admin_permission(gids)
for g in user_groups:
group_info = get_group_info(request, g.id , avatar_size)
group_info = get_group_info(request, g.id, avatar_size)
if with_repos:
if org_id:
@@ -127,7 +129,7 @@ class Groups(APIView):
"permission": r.permission,
"owner": r.user,
"owner_name": email2nickname(r.user),
"is_admin": (str(r.id), str(g.id)) in all_group_admin_records
"is_admin": (r.id, g.id) in admin_info
}
repos.append(repo)

View File

@@ -4019,7 +4019,7 @@ class GroupRepos(APIView):
"modifier_email": r.last_modifier,
"modifier_contact_email": contact_email_dict.get(r.last_modifier, ''),
"modifier_name": nickname_dict.get(r.last_modifier, ''),
"is_admin": str(r.id) in admin_repos,
"is_admin": r.id in admin_repos,
}
repos_json.append(repo)
@@ -4040,7 +4040,6 @@ class GroupRepo(APIView):
group_id = group.id
# only admin or owner can delete share record.
groups = [str(e.id) for e in get_groups_by_user(request)]
repo_owner = get_repo_owner(request, repo_id)
if not group.is_staff and repo_owner != username and not is_repo_admin(username, repo_id):
return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.')

View File

@@ -192,7 +192,7 @@ class ExtraSharePermissionManager(models.Manager):
e.g.
in_datas:
[(repo_id1, username1), (repo_id2, admin1)]
return:
admin permission data returnd:
[(repo_id2, admin1)]
"""
if len(in_datas) <= 0:
@@ -220,14 +220,6 @@ class ExtraSharePermissionManager(models.Manager):
class ExtraGroupsSharePermissionManager(models.Manager):
def get_admin_groups(self, repo_id):
""" return admin groups in specific repo
e.g: ['23', '12']
"""
return super(ExtraGroupsSharePermissionManager, self).filter(
repo_id=repo_id, permission='admin'
).values_list('group_id', flat=True)
def get_repos_with_admin_permission(self, gid):
""" return admin repo in specific group
e.g: ['repo_id1', 'repo_id2']
@@ -236,10 +228,21 @@ class ExtraGroupsSharePermissionManager(models.Manager):
group_id=gid, permission='admin'
).values_list('repo_id', flat=True)
def get_all_admin_records(self):
def get_admin_groups_by_repo(self, repo_id):
""" return admin groups in specific repo
e.g: ['23', '12']
"""
return super(ExtraGroupsSharePermissionManager, self).filter(
permission='admin'
)
repo_id=repo_id, permission='admin'
).values_list('group_id', flat=True)
def batch_get_repos_with_admin_permission(self, gids):
"""
"""
if len(gids) <= 0:
return []
db_data = super(ExtraGroupsSharePermissionManager, self).filter(group_id__in=gids, permission=PERMISSION_ADMIN)
return [(e.repo_id, e.group_id) for e in db_data]
def create_share_permission(self, repo_id, gid, permission):
self.model(repo_id=repo_id, group_id=gid, permission=permission).save()
@@ -257,7 +260,7 @@ class ExtraGroupsSharePermissionManager(models.Manager):
class ExtraGroupsSharePermission(models.Model):
repo_id = models.CharField(max_length=36, db_index=True)
group_id = models.CharField(max_length=20, db_index=True)
group_id = models.IntegerField(db_index=True)
permission = models.CharField(max_length=30)
objects = ExtraGroupsSharePermissionManager()

View File

@@ -6,7 +6,7 @@ def is_repo_admin(username, repo_id):
is_administrator = ExtraSharePermission.objects.\
get_user_permission(repo_id, username) == PERMISSION_ADMIN
belong_to_admin_group = False
group_ids = ExtraGroupsSharePermission.objects.get_admin_groups(repo_id)
group_ids = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(repo_id)
for group_id in group_ids:
if is_group_member(group_id, username):
belong_to_admin_group = True

View File

@@ -3,7 +3,6 @@ from seahub.test_utils import BaseTestCase
from seaserv import seafile_api
class ExtraGroupsSharePermissionTest(BaseTestCase):
def test_can_add(self):
ExtraGroupsSharePermission.objects.create_share_permission(self.repo.id,
@@ -11,14 +10,14 @@ class ExtraGroupsSharePermissionTest(BaseTestCase):
'admin')
self.assertEqual(1, len(ExtraGroupsSharePermission.objects.all()))
def test_can_get_admin_groups(self):
res = ExtraGroupsSharePermission.objects.get_admin_groups(self.repo.id)
def test_can_get_admin_groups_by_repo(self):
res = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(self.repo.id)
assert len(res) == 0
ExtraGroupsSharePermission.objects.create_share_permission(self.repo.id,
self.group.id,
'admin')
res = ExtraGroupsSharePermission.objects.get_admin_groups(self.repo.id)
assert res[0] == str(self.group.id)
res = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(self.repo.id)
assert res[0] == self.group.id
def test_can_get_repos_with_admin_permission(self):
res = ExtraGroupsSharePermission.objects.get_repos_with_admin_permission(self.group.id)
@@ -27,7 +26,7 @@ class ExtraGroupsSharePermissionTest(BaseTestCase):
self.group.id,
'admin')
res = ExtraGroupsSharePermission.objects.get_repos_with_admin_permission(self.group.id)
assert res[0] == str(self.repo.id)
assert res[0] == self.repo.id
def test_can_delete(self):
self.assertEqual(0, len(ExtraGroupsSharePermission.objects.all()))
@@ -45,3 +44,20 @@ class ExtraGroupsSharePermissionTest(BaseTestCase):
self.group.id,
'admin')
self.assertEqual(1, len(ExtraGroupsSharePermission.objects.all()))
def test_batch_get_repos_with_admin_permission(self):
r = seafile_api.get_repo(self.create_repo(name='repo2',
desc='', username=self.user.email, passwd=None))
new_group = self.create_group(group_name='test_group',
username=self.user.username)
data = [self.group.id, new_group.id]
self.assertEqual([], ExtraGroupsSharePermission.objects.batch_get_repos_with_admin_permission(data))
ExtraGroupsSharePermission.objects.create_share_permission(self.repo.id,
self.group.id,
'admin')
ExtraGroupsSharePermission.objects.create_share_permission(self.repo.id,
new_group.id,
'admin')
res = ExtraGroupsSharePermission.objects.batch_get_repos_with_admin_permission(data)
assert (self.repo.id, self.group.id) in res
assert (self.repo.id, new_group.id) in res