changeset 5292:6245435fd8d7

repogroups: use AvailableRepoGroupChoices
author Mads Kiilerich <madski@unity3d.com>
date Thu, 23 Jul 2015 00:52:29 +0200
parents 9d4c4d4d9e16
children 8e87c16ac58e
files kallithea/controllers/admin/repo_groups.py
diffstat 1 files changed, 18 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/admin/repo_groups.py	Thu Jul 23 00:52:29 2015 +0200
+++ b/kallithea/controllers/admin/repo_groups.py	Thu Jul 23 00:52:29 2015 +0200
@@ -44,7 +44,7 @@
     HasPermissionAll
 from kallithea.lib.base import BaseController, render
 from kallithea.model.db import RepoGroup, Repository
-from kallithea.model.scm import RepoGroupList
+from kallithea.model.scm import RepoGroupList, AvailableRepoGroupChoices
 from kallithea.model.repo_group import RepoGroupModel
 from kallithea.model.forms import RepoGroupForm, RepoGroupPermsForm
 from kallithea.model.meta import Session
@@ -63,21 +63,17 @@
     def __before__(self):
         super(RepoGroupsController, self).__before__()
 
-    def __load_defaults(self, allow_empty_group=False, exclude_group_ids=[]):
-        if HasPermissionAll('hg.admin')('group edit'):
-            #we're global admin, we're ok and we can create TOP level groups
-            allow_empty_group = True
+    def __load_defaults(self, extras=(), exclude=()):
+        """extras is used for keeping current parent ignoring permissions
+        exclude is used for not moving group to itself TODO: also exclude descendants
+        Note: only admin can create top level groups
+        """
+        repo_groups = AvailableRepoGroupChoices([], ['group.admin'], extras)
+        exclude_group_ids = set(rg.group_id for rg in exclude)
+        c.repo_groups = [rg for rg in repo_groups
+                         if rg[0] not in exclude_group_ids]
+        c.repo_groups_choices = [rg[0] for rg in c.repo_groups]
 
-        #override the choices for this form, we need to filter choices
-        #and display only those we have ADMIN right
-        groups_with_admin_rights = RepoGroupList(RepoGroup.query().all(),
-                                                 perm_set=['group.admin'])
-        c.repo_groups = RepoGroup.groups_choices(groups=groups_with_admin_rights,
-                                                 show_empty_group=allow_empty_group)
-        # exclude filtered ids
-        c.repo_groups = filter(lambda x: x[0] not in exclude_group_ids,
-                               c.repo_groups)
-        c.repo_groups_choices = map(lambda k: k[0], c.repo_groups)
         repo_model = RepoModel()
         c.users_array = repo_model.get_users_js()
         c.user_groups_array = repo_model.get_user_groups_js()
@@ -168,8 +164,7 @@
 
         # permissions for can create group based on parent_id are checked
         # here in the Form
-        repo_group_form = RepoGroupForm(available_groups=
-                                        map(lambda k: k[0], c.repo_groups))()
+        repo_group_form = RepoGroupForm(available_groups=c.repo_groups_choices)
         try:
             form_result = repo_group_form.to_python(dict(request.POST))
             gr = RepoGroupModel().create(
@@ -231,6 +226,10 @@
         # url('repos_group', group_name=GROUP_NAME)
 
         c.repo_group = RepoGroupModel()._get_repo_group(group_name)
+        self.__load_defaults(extras=[c.repo_group.parent_group],
+                             exclude=[c.repo_group])
+
+        # TODO: kill allow_empty_group - it is only used for redundant form validation!
         if HasPermissionAll('hg.admin')('group edit'):
             #we're global admin, we're ok and we can create TOP level groups
             allow_empty_group = True
@@ -238,9 +237,6 @@
             allow_empty_group = True
         else:
             allow_empty_group = False
-        self.__load_defaults(allow_empty_group=allow_empty_group,
-                             exclude_group_ids=[c.repo_group.group_id])
-
         repo_group_form = RepoGroupForm(
             edit=True,
             old_data=c.repo_group.get_dict(),
@@ -358,18 +354,8 @@
         c.active = 'settings'
 
         c.repo_group = RepoGroupModel()._get_repo_group(group_name)
-        #we can only allow moving empty group if it's already a top-level
-        #group, ie has no parents, or we're admin
-        if HasPermissionAll('hg.admin')('group edit'):
-            #we're global admin, we're ok and we can create TOP level groups
-            allow_empty_group = True
-        elif not c.repo_group.parent_group:
-            allow_empty_group = True
-        else:
-            allow_empty_group = False
-
-        self.__load_defaults(allow_empty_group=allow_empty_group,
-                             exclude_group_ids=[c.repo_group.group_id])
+        self.__load_defaults(extras=[c.repo_group.parent_group],
+                             exclude=[c.repo_group])
         defaults = self.__load_data(c.repo_group.group_id)
 
         return htmlfill.render(