changeset 1435:a62af7d509ee beta

fixes #228 - added detection of assigned groups to prevent errors on sqlite
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 19 Jul 2011 17:10:34 +0200
parents d21c14e36fa8
children 88d13c1c6a55
files rhodecode/controllers/admin/users_groups.py rhodecode/lib/exceptions.py rhodecode/model/db.py rhodecode/model/users_group.py
diffstat 4 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/users_groups.py	Mon Jul 18 17:28:25 2011 +0200
+++ b/rhodecode/controllers/admin/users_groups.py	Tue Jul 19 17:10:34 2011 +0200
@@ -32,6 +32,7 @@
 from pylons.controllers.util import abort, redirect
 from pylons.i18n.translation import _
 
+from rhodecode.lib.exceptions import UsersGroupsAssignedException
 from rhodecode.lib import helpers as h
 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 from rhodecode.lib.base import BaseController, render
@@ -153,6 +154,8 @@
         try:
             users_group_model.delete(id)
             h.flash(_('successfully deleted users group'), category='success')
+        except UsersGroupsAssignedException, e:
+            h.flash(e, category='error')
         except Exception:
             h.flash(_('An error occurred during deletion of users group'),
                     category='error')
--- a/rhodecode/lib/exceptions.py	Mon Jul 18 17:28:25 2011 +0200
+++ b/rhodecode/lib/exceptions.py	Tue Jul 19 17:10:34 2011 +0200
@@ -45,3 +45,6 @@
 
 class UserOwnsReposException(Exception):
     pass
+
+class UsersGroupsAssignedException(Exception):
+    pass
--- a/rhodecode/model/db.py	Mon Jul 18 17:28:25 2011 +0200
+++ b/rhodecode/model/db.py	Tue Jul 19 17:10:34 2011 +0200
@@ -286,6 +286,8 @@
 
     members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
 
+    def __repr__(self):
+        return '<userGroup(%s)>' % (self.users_group_name)
 
     @classmethod
     def get_by_group_name(cls, group_name, cache=False, case_insensitive=False):
@@ -677,6 +679,8 @@
     permission = relationship('Permission')
     repository = relationship('Repository')
 
+    def __repr__(self):
+        return '<userGroup:%s => %s >' % (self.users_group, self.repository)
 
 class UsersGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_to_perm'
--- a/rhodecode/model/users_group.py	Mon Jul 18 17:28:25 2011 +0200
+++ b/rhodecode/model/users_group.py	Tue Jul 19 17:10:34 2011 +0200
@@ -28,9 +28,11 @@
 
 from pylons.i18n.translation import _
 
+from rhodecode.lib.exceptions import UsersGroupsAssignedException
 from rhodecode.model import BaseModel
 from rhodecode.model.caching_query import FromCache
-from rhodecode.model.db import UsersGroup, UsersGroupMember
+from rhodecode.model.db import UsersGroup, UsersGroupMember, \
+    UsersGroupRepoToPerm
 
 log = logging.getLogger(__name__)
 
@@ -84,6 +86,16 @@
 
     def delete(self, users_group_id):
         try:
+
+            # check if this group is not assigned to repo
+            assigned_groups = UsersGroupRepoToPerm.query()\
+                .filter(UsersGroupRepoToPerm.users_group_id ==
+                        users_group_id).all()
+
+            if assigned_groups:
+                raise UsersGroupsAssignedException('Group assigned to %s' %
+                                                   assigned_groups)
+
             users_group = self.get(users_group_id, cache=False)
             self.sa.delete(users_group)
             self.sa.commit()