changeset 1633:2c0d35e336b5 beta

refactoring of models names for repoGroup permissions
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 02 Nov 2011 03:08:33 +0200
parents 5b2cf21b1947
children 1d904d972c47
files rhodecode/controllers/admin/ldap_settings.py rhodecode/controllers/admin/repos.py rhodecode/controllers/admin/repos_groups.py rhodecode/controllers/admin/settings.py rhodecode/controllers/admin/users.py rhodecode/controllers/api/api.py rhodecode/controllers/home.py rhodecode/controllers/settings.py rhodecode/lib/auth.py rhodecode/lib/db_manage.py rhodecode/lib/utils.py rhodecode/model/db.py rhodecode/model/forms.py rhodecode/model/permission.py rhodecode/model/repo.py rhodecode/model/repo_permission.py rhodecode/model/repos_group.py rhodecode/model/user.py rhodecode/templates/admin/repos_groups/repos_groups_show.html rhodecode/tests/functional/test_admin_ldap_settings.py rhodecode/tests/functional/test_admin_settings.py rhodecode/tests/test_models.py
diffstat 22 files changed, 134 insertions(+), 122 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/ldap_settings.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/controllers/admin/ldap_settings.py	Wed Nov 02 03:08:33 2011 +0200
@@ -39,7 +39,7 @@
 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 from rhodecode.lib.exceptions import LdapImportError
 from rhodecode.model.forms import LdapSettingsForm
-from rhodecode.model.db import RhodeCodeSettings
+from rhodecode.model.db import RhodeCodeSetting
 
 log = logging.getLogger(__name__)
 
@@ -83,7 +83,7 @@
         super(LdapSettingsController, self).__before__()
 
     def index(self):
-        defaults = RhodeCodeSettings.get_ldap_settings()
+        defaults = RhodeCodeSetting.get_ldap_settings()
         c.search_scope_cur = defaults.get('ldap_search_scope')
         c.tls_reqcert_cur = defaults.get('ldap_tls_reqcert')
         c.tls_kind_cur = defaults.get('ldap_tls_kind')
@@ -107,7 +107,7 @@
 
                 for k, v in form_result.items():
                     if k.startswith('ldap_'):
-                        setting = RhodeCodeSettings.get_by_name(k)
+                        setting = RhodeCodeSetting.get_by_name(k)
                         setting.app_settings_value = v
                         self.sa.add(setting)
 
--- a/rhodecode/controllers/admin/repos.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/controllers/admin/repos.py	Wed Nov 02 03:08:33 2011 +0200
@@ -39,7 +39,7 @@
 from rhodecode.lib.base import BaseController, render
 from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug
 from rhodecode.lib.helpers import get_token
-from rhodecode.model.db import User, Repository, UserFollowing, Group
+from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup
 from rhodecode.model.forms import RepoForm
 from rhodecode.model.scm import ScmModel
 from rhodecode.model.repo import RepoModel
@@ -63,7 +63,7 @@
         super(ReposController, self).__before__()
 
     def __load_defaults(self):
-        c.repo_groups = Group.groups_choices()
+        c.repo_groups = RepoGroup.groups_choices()
         c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
         
         repo_model = RepoModel()
--- a/rhodecode/controllers/admin/repos_groups.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/controllers/admin/repos_groups.py	Wed Nov 02 03:08:33 2011 +0200
@@ -14,7 +14,7 @@
 from rhodecode.lib import helpers as h
 from rhodecode.lib.auth import LoginRequired, HasPermissionAnyDecorator
 from rhodecode.lib.base import BaseController, render
-from rhodecode.model.db import Group
+from rhodecode.model.db import RepoGroup
 from rhodecode.model.repos_group import ReposGroupModel
 from rhodecode.model.forms import ReposGroupForm
 
@@ -32,7 +32,7 @@
         super(ReposGroupsController, self).__before__()
 
     def __load_defaults(self):
-        c.repo_groups = Group.groups_choices()
+        c.repo_groups = RepoGroup.groups_choices()
         c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
 
     def __load_data(self, group_id):
@@ -43,7 +43,7 @@
         """
         self.__load_defaults()
 
-        repo_group = Group.get(group_id)
+        repo_group = RepoGroup.get(group_id)
 
         data = repo_group.get_dict()
 
@@ -57,7 +57,7 @@
         # url('repos_groups')
 
         sk = lambda g:g.parents[0].group_name if g.parents else g.group_name
-        c.groups = sorted(Group.query().all(), key=sk)
+        c.groups = sorted(RepoGroup.query().all(), key=sk)
         return render('admin/repos_groups/repos_groups_show.html')
 
     @HasPermissionAnyDecorator('hg.admin')
@@ -108,7 +108,7 @@
         # url('repos_group', id=ID)
 
         self.__load_defaults()
-        c.repos_group = Group.get(id)
+        c.repos_group = RepoGroup.get(id)
 
         repos_group_model = ReposGroupModel()
         repos_group_form = ReposGroupForm(edit=True,
@@ -148,7 +148,7 @@
         # url('repos_group', id=ID)
 
         repos_group_model = ReposGroupModel()
-        gr = Group.get(id)
+        gr = RepoGroup.get(id)
         repos = gr.repositories.all()
         if repos:
             h.flash(_('This group contains %s repositores and cannot be '
@@ -179,14 +179,14 @@
         return redirect(url('repos_groups'))
 
     def show_by_name(self, group_name):
-        id_ = Group.get_by_group_name(group_name).group_id
+        id_ = RepoGroup.get_by_group_name(group_name).group_id
         return self.show(id_)
 
     def show(self, id, format='html'):
         """GET /repos_groups/id: Show a specific item"""
         # url('repos_group', id=ID)
 
-        c.group = Group.get(id)
+        c.group = RepoGroup.get(id)
 
         if c.group:
             c.group_repos = c.group.repositories.all()
@@ -201,8 +201,8 @@
 
         c.repo_cnt = 0
 
-        c.groups = self.sa.query(Group).order_by(Group.group_name)\
-            .filter(Group.group_parent_id == id).all()
+        c.groups = self.sa.query(RepoGroup).order_by(RepoGroup.group_name)\
+            .filter(RepoGroup.group_parent_id == id).all()
 
         return render('admin/repos_groups/repos_groups.html')
 
@@ -213,7 +213,7 @@
 
         id_ = int(id)
 
-        c.repos_group = Group.get(id_)
+        c.repos_group = RepoGroup.get(id_)
         defaults = self.__load_data(id_)
 
         # we need to exclude this group from the group list for editing
--- a/rhodecode/controllers/admin/settings.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/controllers/admin/settings.py	Wed Nov 02 03:08:33 2011 +0200
@@ -40,8 +40,8 @@
 from rhodecode.lib.celerylib import tasks, run_task
 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \
     set_rhodecode_config, repo_name_slug
-from rhodecode.model.db import RhodeCodeUi, Repository, Group, \
-    RhodeCodeSettings
+from rhodecode.model.db import RhodeCodeUi, Repository, RepoGroup, \
+    RhodeCodeSetting
 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
     ApplicationUiSettingsForm
 from rhodecode.model.scm import ScmModel
@@ -69,7 +69,7 @@
         """GET /admin/settings: All items in the collection"""
         # url('admin_settings')
 
-        defaults = RhodeCodeSettings.get_app_settings()
+        defaults = RhodeCodeSetting.get_app_settings()
         defaults.update(self.get_hg_ui_settings())
         return htmlfill.render(
             render('admin/settings/settings.html'),
@@ -124,15 +124,15 @@
                 form_result = application_form.to_python(dict(request.POST))
 
                 try:
-                    hgsettings1 = RhodeCodeSettings.get_by_name('title')
+                    hgsettings1 = RhodeCodeSetting.get_by_name('title')
                     hgsettings1.app_settings_value = \
                         form_result['rhodecode_title']
 
-                    hgsettings2 = RhodeCodeSettings.get_by_name('realm')
+                    hgsettings2 = RhodeCodeSetting.get_by_name('realm')
                     hgsettings2.app_settings_value = \
                         form_result['rhodecode_realm']
 
-                    hgsettings3 = RhodeCodeSettings.get_by_name('ga_code')
+                    hgsettings3 = RhodeCodeSetting.get_by_name('ga_code')
                     hgsettings3.app_settings_value = \
                         form_result['rhodecode_ga_code']
 
@@ -366,7 +366,7 @@
     def create_repository(self):
         """GET /_admin/create_repository: Form to create a new item"""
 
-        c.repo_groups = Group.groups_choices()
+        c.repo_groups = RepoGroup.groups_choices()
         c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
 
         new_repo = request.GET.get('repo', '')
--- a/rhodecode/controllers/admin/users.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/controllers/admin/users.py	Wed Nov 02 03:08:33 2011 +0200
@@ -38,7 +38,7 @@
 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 from rhodecode.lib.base import BaseController, render
 
-from rhodecode.model.db import User, RepoToPerm, UserToPerm, Permission
+from rhodecode.model.db import User, UserRepoToPerm, UserToPerm, Permission
 from rhodecode.model.forms import UserForm
 from rhodecode.model.user import UserModel
 
--- a/rhodecode/controllers/api/api.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/controllers/api/api.py	Wed Nov 02 03:08:33 2011 +0200
@@ -6,7 +6,7 @@
     HasPermissionAnyDecorator
 from rhodecode.model.scm import ScmModel
 
-from rhodecode.model.db import User, UsersGroup, Group, Repository
+from rhodecode.model.db import User, UsersGroup, RepoGroup, Repository
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.user import UserModel
 from rhodecode.model.repo_permission import RepositoryPermissionModel
@@ -325,7 +325,7 @@
             groups = groups[:-1]
             parent_id = None
             for g in groups:
-                group = Group.get_by_group_name(g)
+                group = RepoGroup.get_by_group_name(g)
                 if not group:
                     group = ReposGroupModel().create(dict(group_name=g,
                                                   group_description='',
--- a/rhodecode/controllers/home.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/controllers/home.py	Wed Nov 02 03:08:33 2011 +0200
@@ -30,7 +30,7 @@
 
 from rhodecode.lib.auth import LoginRequired
 from rhodecode.lib.base import BaseController, render
-from rhodecode.model.db import Group, Repository
+from rhodecode.model.db import RepoGroup, Repository
 
 log = logging.getLogger(__name__)
 
@@ -45,7 +45,7 @@
 
         c.repos_list = self.scm_model.get_repos()
 
-        c.groups = Group.query().filter(Group.group_parent_id == None).all()
+        c.groups = RepoGroup.query().filter(RepoGroup.group_parent_id == None).all()
 
         return render('/index.html')
 
--- a/rhodecode/controllers/settings.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/controllers/settings.py	Wed Nov 02 03:08:33 2011 +0200
@@ -42,7 +42,7 @@
 
 from rhodecode.model.forms import RepoSettingsForm, RepoForkForm
 from rhodecode.model.repo import RepoModel
-from rhodecode.model.db import Group
+from rhodecode.model.db import RepoGroup
 
 log = logging.getLogger(__name__)
 
@@ -54,7 +54,7 @@
         super(SettingsController, self).__before__()
     
     def __load_defaults(self):
-        c.repo_groups = Group.groups_choices()
+        c.repo_groups = RepoGroup.groups_choices()
         c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
         
         repo_model = RepoModel()
--- a/rhodecode/lib/auth.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/lib/auth.py	Wed Nov 02 03:08:33 2011 +0200
@@ -48,7 +48,7 @@
 
 from rhodecode.model import meta
 from rhodecode.model.user import UserModel
-from rhodecode.model.db import Permission, RhodeCodeSettings, User
+from rhodecode.model.db import Permission, RhodeCodeSetting, User
 
 log = logging.getLogger(__name__)
 
@@ -184,7 +184,7 @@
             log.debug('this user already exists as non ldap')
             return False
 
-        ldap_settings = RhodeCodeSettings.get_ldap_settings()
+        ldap_settings = RhodeCodeSetting.get_ldap_settings()
         #======================================================================
         # FALLBACK TO LDAP AUTH IF ENABLE
         #======================================================================
--- a/rhodecode/lib/db_manage.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/lib/db_manage.py	Wed Nov 02 03:08:33 2011 +0200
@@ -37,7 +37,7 @@
 from rhodecode.lib.utils import ask_ok
 from rhodecode.model import init_model
 from rhodecode.model.db import User, Permission, RhodeCodeUi, \
-    RhodeCodeSettings, UserToPerm, DbMigrateVersion
+    RhodeCodeSetting, UserToPerm, DbMigrateVersion
 
 from sqlalchemy.engine import create_engine
 
@@ -210,7 +210,7 @@
         """Fixes rhodecode settings adds ga_code key for google analytics
         """
 
-        hgsettings3 = RhodeCodeSettings('ga_code', '')
+        hgsettings3 = RhodeCodeSetting('ga_code', '')
 
         try:
             self.sa.add(hgsettings3)
@@ -321,10 +321,10 @@
                         ('ldap_attr_login', ''), ('ldap_attr_firstname', ''),
                         ('ldap_attr_lastname', ''), ('ldap_attr_email', '')]:
 
-                if skip_existing and RhodeCodeSettings.get_by_name(k) != None:
+                if skip_existing and RhodeCodeSetting.get_by_name(k) != None:
                     log.debug('Skipping option %s' % k)
                     continue
-                setting = RhodeCodeSettings(k, v)
+                setting = RhodeCodeSetting(k, v)
                 self.sa.add(setting)
             self.sa.commit()
         except:
@@ -391,9 +391,9 @@
         paths.ui_key = '/'
         paths.ui_value = path
 
-        hgsettings1 = RhodeCodeSettings('realm', 'RhodeCode authentication')
-        hgsettings2 = RhodeCodeSettings('title', 'RhodeCode')
-        hgsettings3 = RhodeCodeSettings('ga_code', '')
+        hgsettings1 = RhodeCodeSetting('realm', 'RhodeCode authentication')
+        hgsettings2 = RhodeCodeSetting('title', 'RhodeCode')
+        hgsettings3 = RhodeCodeSetting('ga_code', '')
 
         try:
             self.sa.add(web1)
--- a/rhodecode/lib/utils.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/lib/utils.py	Wed Nov 02 03:08:33 2011 +0200
@@ -45,8 +45,8 @@
 
 from rhodecode.model import meta
 from rhodecode.model.caching_query import FromCache
-from rhodecode.model.db import Repository, User, RhodeCodeUi, UserLog, Group, \
-    RhodeCodeSettings
+from rhodecode.model.db import Repository, User, RhodeCodeUi, UserLog, RepoGroup, \
+    RhodeCodeSetting
 from rhodecode.model.repo import RepoModel
 
 log = logging.getLogger(__name__)
@@ -290,7 +290,7 @@
 
     :param config:
     """
-    hgsettings = RhodeCodeSettings.get_app_settings()
+    hgsettings = RhodeCodeSetting.get_app_settings()
 
     for k, v in hgsettings.items():
         config[k] = v
@@ -366,10 +366,10 @@
 
     for lvl, group_name in enumerate(groups):
         group_name = '/'.join(groups[:lvl] + [group_name])
-        group = sa.query(Group).filter(Group.group_name == group_name).scalar()
+        group = sa.query(RepoGroup).filter(RepoGroup.group_name == group_name).scalar()
 
         if group is None:
-            group = Group(group_name, parent)
+            group = RepoGroup(group_name, parent)
             sa.add(group)
             sa.commit()
         parent = group
@@ -391,7 +391,7 @@
     added = []
     # fixup groups paths to new format on the fly
     # TODO: remove this in future
-    for g in Group.query().all():
+    for g in RepoGroup.query().all():
         g.group_name = g.get_new_name(g.name)
         sa.add(g)    
     for name, repo in initial_repo_list.items():
--- a/rhodecode/model/db.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/model/db.py	Wed Nov 02 03:08:33 2011 +0200
@@ -139,7 +139,7 @@
         Session.commit()
 
 
-class RhodeCodeSettings(Base, BaseModel):
+class RhodeCodeSetting(Base, BaseModel):
     __tablename__ = 'rhodecode_settings'
     __table_args__ = (UniqueConstraint('app_settings_name'), {'extend_existing':True})
     app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
@@ -280,7 +280,7 @@
 
     repositories = relationship('Repository')
     user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
-    repo_to_perm = relationship('RepoToPerm', primaryjoin='RepoToPerm.user_id==User.user_id', cascade='all')
+    repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all')
 
     group_member = relationship('UsersGroupMember', cascade='all')
 
@@ -447,7 +447,7 @@
                         users_group_id).all()
 
             if assigned_groups:
-                raise UsersGroupsAssignedException('Group assigned to %s' %
+                raise UsersGroupsAssignedException('RepoGroup assigned to %s' %
                                                    assigned_groups)
 
             users_group = cls.get(users_group_id, cache=False)
@@ -503,8 +503,8 @@
 
     user = relationship('User')
     fork = relationship('Repository', remote_side=repo_id)
-    group = relationship('Group')
-    repo_to_perm = relationship('RepoToPerm', cascade='all', order_by='RepoToPerm.repo_to_perm_id')
+    group = relationship('RepoGroup')
+    repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
     users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
     stats = relationship('Statistics', cascade='all', uselist=False)
 
@@ -717,7 +717,7 @@
         return repo
 
 
-class Group(Base, BaseModel):
+class RepoGroup(Base, BaseModel):
     __tablename__ = 'groups'
     __table_args__ = (UniqueConstraint('group_name', 'group_parent_id'),
                       CheckConstraint('group_id != group_parent_id'), {'extend_existing':True},)
@@ -728,7 +728,7 @@
     group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None)
     group_description = Column("group_description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
-    parent_group = relationship('Group', remote_side=group_id)
+    parent_group = relationship('RepoGroup', remote_side=group_id)
 
 
     def __init__(self, group_name='', parent_group=None):
@@ -795,11 +795,11 @@
 
     @property
     def children(self):
-        return Group.query().filter(Group.parent_group == self)
+        return RepoGroup.query().filter(RepoGroup.parent_group == self)
 
     @property
     def name(self):
-        return self.group_name.split(Group.url_sep())[-1]
+        return self.group_name.split(RepoGroup.url_sep())[-1]
 
     @property
     def full_path(self):
@@ -807,7 +807,7 @@
 
     @property
     def full_path_splitted(self):
-        return self.group_name.split(Group.url_sep())
+        return self.group_name.split(RepoGroup.url_sep())
 
     @property
     def repositories(self):
@@ -835,7 +835,7 @@
         """
         path_prefix = (self.parent_group.full_path_splitted if
                        self.parent_group else [])
-        return Group.url_sep().join(path_prefix + [group_name])
+        return RepoGroup.url_sep().join(path_prefix + [group_name])
 
 
 class Permission(Base, BaseModel):
@@ -853,7 +853,7 @@
     def get_by_key(cls, key):
         return cls.query().filter(cls.permission_name == key).scalar()
 
-class RepoToPerm(Base, BaseModel):
+class UserRepoToPerm(Base, BaseModel):
     __tablename__ = 'repo_to_perm'
     __table_args__ = (UniqueConstraint('user_id', 'repository_id'), {'extend_existing':True})
     repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
@@ -973,7 +973,7 @@
             Session.rollback()
 
 
-class GroupToPerm(Base, BaseModel):
+class UserRepoGroupToPerm(Base, BaseModel):
     __tablename__ = 'group_to_perm'
     __table_args__ = (UniqueConstraint('group_id', 'permission_id'), {'extend_existing':True})
 
@@ -984,7 +984,20 @@
 
     user = relationship('User')
     permission = relationship('Permission')
-    group = relationship('Group')
+    group = relationship('RepoGroup')
+
+class UsersGroupRepoGroupToPerm(Base, BaseModel):
+    __tablename__ = 'users_group_repo_group_to_perm'
+    __table_args__ = (UniqueConstraint('group_id', 'permission_id'), {'extend_existing':True})
+
+    users_group_repo_group_to_perm_id = Column("users_group_repo_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
+    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
+    group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
+
+    users_group = relationship('UsersGroup')
+    permission = relationship('Permission')
+    group = relationship('RepoGroup')
 
 class Statistics(Base, BaseModel):
     __tablename__ = 'statistics'
--- a/rhodecode/model/forms.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/model/forms.py	Wed Nov 02 03:08:33 2011 +0200
@@ -38,7 +38,7 @@
 from rhodecode.lib.exceptions import LdapImportError
 from rhodecode.model.user import UserModel
 from rhodecode.model.repo import RepoModel
-from rhodecode.model.db import User, UsersGroup, Group
+from rhodecode.model.db import User, UsersGroup, RepoGroup
 from rhodecode import BACKENDS
 
 log = logging.getLogger(__name__)
@@ -107,7 +107,7 @@
 
 
             if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+$', value) is None:
-                raise formencode.Invalid(_('Group name may only contain '
+                raise formencode.Invalid(_('RepoGroup name may only contain '
                                            'alphanumeric characters '
                                            'underscores, periods or dashes '
                                            'and must begin with alphanumeric '
@@ -136,13 +136,13 @@
 
             old_gname = None
             if edit:
-                old_gname = Group.get(
+                old_gname = RepoGroup.get(
                             old_data.get('group_id')).group_name
 
             if old_gname != group_name or not edit:
                 # check filesystem
-                gr = Group.query().filter(Group.group_name == slug)\
-                    .filter(Group.group_parent_id == group_parent_id).scalar()
+                gr = RepoGroup.query().filter(RepoGroup.group_name == slug)\
+                    .filter(RepoGroup.group_parent_id == group_parent_id).scalar()
 
                 if gr:
                     e_dict = {'group_name':_('This group already exists')}
@@ -248,12 +248,12 @@
 
 
             if value.get('repo_group'):
-                gr = Group.get(value.get('repo_group'))
+                gr = RepoGroup.get(value.get('repo_group'))
                 group_path = gr.full_path
                 # value needs to be aware of group name in order to check
                 # db key This is an actual just the name to store in the
                 # database
-                repo_name_full = group_path + Group.url_sep() + repo_name
+                repo_name_full = group_path + RepoGroup.url_sep() + repo_name
                 
             else:
                 group_path = ''
@@ -272,7 +272,7 @@
                                   gr.group_name}
                         raise formencode.Invalid('', value, state,
                                                  error_dict=e_dict)
-                elif Group.get_by_group_name(repo_name_full):
+                elif RepoGroup.get_by_group_name(repo_name_full):
                         e_dict = {'repo_name':_('There is a group with this'
                                                 ' name already "%s"') %
                                   repo_name_full}
--- a/rhodecode/model/permission.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/model/permission.py	Wed Nov 02 03:08:33 2011 +0200
@@ -29,7 +29,7 @@
 from sqlalchemy.exc import DatabaseError
 
 from rhodecode.model import BaseModel
-from rhodecode.model.db import User, Permission, UserToPerm, RepoToPerm
+from rhodecode.model.db import User, Permission, UserToPerm, UserRepoToPerm
 from rhodecode.model.caching_query import FromCache
 
 log = logging.getLogger(__name__)
@@ -95,8 +95,8 @@
 
             #stage 2 update all default permissions for repos if checked
             if form_result['overwrite_default'] == True:
-                for r2p in self.sa.query(RepoToPerm)\
-                               .filter(RepoToPerm.user == perm_user).all():
+                for r2p in self.sa.query(UserRepoToPerm)\
+                               .filter(UserRepoToPerm.user == perm_user).all():
                     r2p.permission = self.get_permission_by_name(
                                          form_result['default_perm'])
                     self.sa.add(r2p)
--- a/rhodecode/model/repo.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/model/repo.py	Wed Nov 02 03:08:33 2011 +0200
@@ -37,8 +37,8 @@
 
 from rhodecode.model import BaseModel
 from rhodecode.model.caching_query import FromCache
-from rhodecode.model.db import Repository, RepoToPerm, User, Permission, \
-    Statistics, UsersGroup, UsersGroupRepoToPerm, RhodeCodeUi, Group
+from rhodecode.model.db import Repository, UserRepoToPerm, User, Permission, \
+    Statistics, UsersGroup, UsersGroupRepoToPerm, RhodeCodeUi, RepoGroup
 from rhodecode.model.user import UserModel
 
 log = logging.getLogger(__name__)
@@ -141,9 +141,9 @@
             # update permissions
             for member, perm, member_type in form_data['perms_updates']:
                 if member_type == 'user':
-                    r2p = self.sa.query(RepoToPerm)\
-                            .filter(RepoToPerm.user == User.get_by_username(member))\
-                            .filter(RepoToPerm.repository == cur_repo)\
+                    r2p = self.sa.query(UserRepoToPerm)\
+                            .filter(UserRepoToPerm.user == User.get_by_username(member))\
+                            .filter(UserRepoToPerm.repository == cur_repo)\
                             .one()
 
                     r2p.permission = self.sa.query(Permission)\
@@ -165,7 +165,7 @@
             # set new permissions
             for member, perm, member_type in form_data['perms_new']:
                 if member_type == 'user':
-                    r2p = RepoToPerm()
+                    r2p = UserRepoToPerm()
                     r2p.repository = cur_repo
                     r2p.user = User.get_by_username(member)
 
@@ -191,7 +191,7 @@
                 elif k == 'repo_name':
                     pass
                 elif k == 'repo_group':
-                    cur_repo.group = Group.get(v)
+                    cur_repo.group = RepoGroup.get(v)
 
                 else:
                     setattr(cur_repo, k, v)
@@ -249,7 +249,7 @@
             self.sa.add(new_repo)
 
             #create default permission
-            repo_to_perm = RepoToPerm()
+            repo_to_perm = UserRepoToPerm()
             default = 'repository.read'
             for p in User.get_by_username('default').user_perms:
                 if p.permission.permission_name.startswith('repository.'):
@@ -300,10 +300,10 @@
 
     def delete_perm_user(self, form_data, repo_name):
         try:
-            self.sa.query(RepoToPerm)\
-                .filter(RepoToPerm.repository \
+            self.sa.query(UserRepoToPerm)\
+                .filter(UserRepoToPerm.repository \
                         == self.get_by_repo_name(repo_name))\
-                .filter(RepoToPerm.user_id == form_data['user_id']).delete()
+                .filter(UserRepoToPerm.user_id == form_data['user_id']).delete()
             self.sa.commit()
         except:
             log.error(traceback.format_exc())
@@ -348,7 +348,7 @@
         from rhodecode.lib.utils import is_valid_repo, is_valid_repos_group
 
         if new_parent_id:
-            paths = Group.get(new_parent_id).full_path.split(Group.url_sep())
+            paths = RepoGroup.get(new_parent_id).full_path.split(RepoGroup.url_sep())
             new_parent_path = os.sep.join(paths)
         else:
             new_parent_path = ''
--- a/rhodecode/model/repo_permission.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/model/repo_permission.py	Wed Nov 02 03:08:33 2011 +0200
@@ -24,16 +24,16 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import logging
-from rhodecode.model.db import BaseModel, RepoToPerm, Permission
+from rhodecode.model.db import BaseModel, UserRepoToPerm, Permission
 from rhodecode.model.meta import Session
 
 log = logging.getLogger(__name__)
 
 class RepositoryPermissionModel(BaseModel):
     def get_user_permission(self, repository, user):
-        return RepoToPerm.query() \
-                .filter(RepoToPerm.user == user) \
-                .filter(RepoToPerm.repository == repository) \
+        return UserRepoToPerm.query() \
+                .filter(UserRepoToPerm.user == user) \
+                .filter(UserRepoToPerm.repository == repository) \
                 .scalar()
 
     def update_user_permission(self, repository, user, permission):
@@ -43,7 +43,7 @@
             if not current.permission is permission:
                 current.permission = permission
         else:
-            p = RepoToPerm()
+            p = UserRepoToPerm()
             p.user = user
             p.repository = repository
             p.permission = permission
--- a/rhodecode/model/repos_group.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/model/repos_group.py	Wed Nov 02 03:08:33 2011 +0200
@@ -33,8 +33,7 @@
 from vcs.utils.lazy import LazyProperty
 
 from rhodecode.model import BaseModel
-from rhodecode.model.caching_query import FromCache
-from rhodecode.model.db import Group, RhodeCodeUi
+from rhodecode.model.db import RepoGroup, RhodeCodeUi
 
 log = logging.getLogger(__name__)
 
@@ -96,7 +95,7 @@
         
         :param group: instance of group from database
         """
-        paths = group.full_path.split(Group.url_sep())
+        paths = group.full_path.split(RepoGroup.url_sep())
         paths = os.sep.join(paths)
 
         rm_path = os.path.join(self.repos_path, paths)
@@ -106,9 +105,9 @@
 
     def create(self, form_data):
         try:
-            new_repos_group = Group()
+            new_repos_group = RepoGroup()
             new_repos_group.group_description = form_data['group_description']
-            new_repos_group.parent_group = Group.get(form_data['group_parent_id'])
+            new_repos_group.parent_group = RepoGroup.get(form_data['group_parent_id'])
             new_repos_group.group_name = new_repos_group.get_new_name(form_data['group_name'])
 
             self.sa.add(new_repos_group)
@@ -125,12 +124,12 @@
     def update(self, repos_group_id, form_data):
 
         try:
-            repos_group = Group.get(repos_group_id)
+            repos_group = RepoGroup.get(repos_group_id)
             old_path = repos_group.full_path
                 
             # change properties
             repos_group.group_description = form_data['group_description']
-            repos_group.parent_group = Group.get(form_data['group_parent_id'])
+            repos_group.parent_group = RepoGroup.get(form_data['group_parent_id'])
             repos_group.group_name = repos_group.get_new_name(form_data['group_name'])
 
             new_path = repos_group.full_path
@@ -154,7 +153,7 @@
 
     def delete(self, users_group_id):
         try:
-            users_group = Group.get(users_group_id)
+            users_group = RepoGroup.get(users_group_id)
             self.sa.delete(users_group)
             self.__delete_group(users_group)
             self.sa.commit()
--- a/rhodecode/model/user.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/model/user.py	Wed Nov 02 03:08:33 2011 +0200
@@ -31,7 +31,7 @@
 from rhodecode.lib import safe_unicode
 from rhodecode.model import BaseModel
 from rhodecode.model.caching_query import FromCache
-from rhodecode.model.db import User, RepoToPerm, Repository, Permission, \
+from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \
     UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember
 from rhodecode.lib.exceptions import DefaultUserException, \
     UserOwnsReposException
@@ -303,12 +303,12 @@
         #======================================================================
         default_user = self.get_by_username('default', cache=True)
 
-        default_perms = self.sa.query(RepoToPerm, Repository, Permission)\
-            .join((Repository, RepoToPerm.repository_id ==
+        default_perms = self.sa.query(UserRepoToPerm, Repository, Permission)\
+            .join((Repository, UserRepoToPerm.repository_id ==
                    Repository.repo_id))\
-            .join((Permission, RepoToPerm.permission_id ==
+            .join((Permission, UserRepoToPerm.permission_id ==
                    Permission.permission_id))\
-            .filter(RepoToPerm.user == default_user).all()
+            .filter(UserRepoToPerm.user == default_user).all()
 
         if user.is_admin:
             #==================================================================
@@ -318,7 +318,7 @@
 
             for perm in default_perms:
                 p = 'repository.admin'
-                user.permissions['repositories'][perm.RepoToPerm.
+                user.permissions['repositories'][perm.UserRepoToPerm.
                                                  repository.repo_name] = p
 
         else:
@@ -346,7 +346,7 @@
                 else:
                     p = perm.Permission.permission_name
 
-                user.permissions['repositories'][perm.RepoToPerm.
+                user.permissions['repositories'][perm.UserRepoToPerm.
                                                  repository.repo_name] = p
 
             #==================================================================
@@ -363,13 +363,13 @@
                                                permission_name)
 
             #user repositories
-            user_repo_perms = self.sa.query(RepoToPerm, Permission,
+            user_repo_perms = self.sa.query(UserRepoToPerm, Permission,
                                             Repository)\
-                .join((Repository, RepoToPerm.repository_id ==
+                .join((Repository, UserRepoToPerm.repository_id ==
                        Repository.repo_id))\
-                .join((Permission, RepoToPerm.permission_id ==
+                .join((Permission, UserRepoToPerm.permission_id ==
                        Permission.permission_id))\
-                .filter(RepoToPerm.user_id == uid).all()
+                .filter(UserRepoToPerm.user_id == uid).all()
 
             for perm in user_repo_perms:
                 # set admin if owner
@@ -377,7 +377,7 @@
                     p = 'repository.admin'
                 else:
                     p = perm.Permission.permission_name
-                user.permissions['repositories'][perm.RepoToPerm.
+                user.permissions['repositories'][perm.UserRepoToPerm.
                                                  repository.repo_name] = p
 
             #==================================================================
--- a/rhodecode/templates/admin/repos_groups/repos_groups_show.html	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/templates/admin/repos_groups/repos_groups_show.html	Wed Nov 02 03:08:33 2011 +0200
@@ -32,7 +32,7 @@
                     <tr>
                         <th class="left"><a href="#">${_('Group name')}</a></th>
                         <th class="left"><a href="#">${_('Description')}</a></th>
-                        <th class="left"><a href="#">${_('Number of repositories')}</a></th>
+                        <th class="left"><a href="#">${_('Number of toplevel repositories')}</a></th>
                         <th class="left">${_('action')}</th>
                     </tr>
                 </thead>
--- a/rhodecode/tests/functional/test_admin_ldap_settings.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/tests/functional/test_admin_ldap_settings.py	Wed Nov 02 03:08:33 2011 +0200
@@ -1,5 +1,5 @@
 from rhodecode.tests import *
-from rhodecode.model.db import RhodeCodeSettings
+from rhodecode.model.db import RhodeCodeSetting
 from nose.plugins.skip import SkipTest
 
 skip_ldap_test = False
@@ -41,7 +41,7 @@
                     'ldap_attr_lastname':'tester',
                     'ldap_attr_email':'test@example.com' })
 
-        new_settings = RhodeCodeSettings.get_ldap_settings()
+        new_settings = RhodeCodeSetting.get_ldap_settings()
         self.assertEqual(new_settings['ldap_host'], u'dc.example.com',
                          'fail db write compare')
 
--- a/rhodecode/tests/functional/test_admin_settings.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/tests/functional/test_admin_settings.py	Wed Nov 02 03:08:33 2011 +0200
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 from rhodecode.lib.auth import get_crypt_password, check_password
-from rhodecode.model.db import User, RhodeCodeSettings
+from rhodecode.model.db import User, RhodeCodeSetting
 from rhodecode.tests import *
 
 class TestAdminSettingsController(TestController):
@@ -63,7 +63,7 @@
 
         self.checkSessionFlash(response, 'Updated application settings')
 
-        self.assertEqual(RhodeCodeSettings
+        self.assertEqual(RhodeCodeSetting
                          .get_app_settings()['rhodecode_ga_code'], new_ga_code)
 
         response = response.follow()
@@ -85,7 +85,7 @@
 
         self.assertTrue('Updated application settings' in
                         response.session['flash'][0][1])
-        self.assertEqual(RhodeCodeSettings
+        self.assertEqual(RhodeCodeSetting
                         .get_app_settings()['rhodecode_ga_code'], new_ga_code)
 
         response = response.follow()
@@ -109,7 +109,7 @@
                                                      ))
 
             self.checkSessionFlash(response, 'Updated application settings')
-            self.assertEqual(RhodeCodeSettings
+            self.assertEqual(RhodeCodeSetting
                              .get_app_settings()['rhodecode_title'],
                              new_title.decode('utf-8'))
 
--- a/rhodecode/tests/test_models.py	Wed Nov 02 03:04:54 2011 +0200
+++ b/rhodecode/tests/test_models.py	Wed Nov 02 03:08:33 2011 +0200
@@ -4,7 +4,7 @@
 
 from rhodecode.model.repos_group import ReposGroupModel
 from rhodecode.model.repo import RepoModel
-from rhodecode.model.db import Group, User
+from rhodecode.model.db import RepoGroup, User
 from sqlalchemy.exc import IntegrityError
 
 class TestReposGroups(unittest.TestCase):
@@ -28,7 +28,7 @@
     def __make_group(self, path, desc='desc', parent_id=None,
                      skip_if_exists=False):
 
-        gr = Group.get_by_group_name(path)
+        gr = RepoGroup.get_by_group_name(path)
         if gr and skip_if_exists:
             return gr
 
@@ -77,13 +77,13 @@
         sg1 = self.__make_group('deleteme')
         self.__delete_group(sg1.group_id)
 
-        self.assertEqual(Group.get(sg1.group_id), None)
+        self.assertEqual(RepoGroup.get(sg1.group_id), None)
         self.assertFalse(self.__check_path('deteteme'))
 
         sg1 = self.__make_group('deleteme', parent_id=self.g1.group_id)
         self.__delete_group(sg1.group_id)
 
-        self.assertEqual(Group.get(sg1.group_id), None)
+        self.assertEqual(RepoGroup.get(sg1.group_id), None)
         self.assertFalse(self.__check_path('test1', 'deteteme'))
 
 
@@ -92,7 +92,7 @@
 
         new_sg1 = self.__update_group(sg1.group_id, 'after')
         self.assertTrue(self.__check_path('after'))
-        self.assertEqual(Group.get_by_group_name('initial'), None)
+        self.assertEqual(RepoGroup.get_by_group_name('initial'), None)
 
 
     def test_update_group_parent(self):
@@ -101,18 +101,18 @@
 
         new_sg1 = self.__update_group(sg1.group_id, 'after', parent_id=self.g1.group_id)
         self.assertTrue(self.__check_path('test1', 'after'))
-        self.assertEqual(Group.get_by_group_name('test1/initial'), None)
+        self.assertEqual(RepoGroup.get_by_group_name('test1/initial'), None)
 
 
         new_sg1 = self.__update_group(sg1.group_id, 'after', parent_id=self.g3.group_id)
         self.assertTrue(self.__check_path('test3', 'after'))
-        self.assertEqual(Group.get_by_group_name('test3/initial'), None)
+        self.assertEqual(RepoGroup.get_by_group_name('test3/initial'), None)
 
 
         new_sg1 = self.__update_group(sg1.group_id, 'hello')
         self.assertTrue(self.__check_path('hello'))
 
-        self.assertEqual(Group.get_by_group_name('hello'), new_sg1)
+        self.assertEqual(RepoGroup.get_by_group_name('hello'), new_sg1)