diff --git a/rhodecode/model/forms.py b/rhodecode/model/forms.py --- a/rhodecode/model/forms.py +++ b/rhodecode/model/forms.py @@ -32,6 +32,7 @@ from formencode.validators import Unicod from pylons.i18n.translation import _ from webhelpers.pylonslib.secure_form import authentication_token +from rhodecode.config.routing import ADMIN_PREFIX from rhodecode.lib.utils import repo_name_slug from rhodecode.lib.auth import authenticate, get_crypt_password from rhodecode.lib.exceptions import LdapImportError @@ -70,8 +71,7 @@ def ValidUsername(edit, old_data): old_un = UserModel().get(old_data.get('user_id')).username if old_un != value or not edit: - if UserModel().get_by_username(value, cache=False, - case_insensitive=True): + if User.get_by_username(value, case_insensitive=True): raise formencode.Invalid(_('This username already ' 'exists') , value, state) @@ -122,7 +122,7 @@ def ValidReposGroup(edit, old_data): def validate_python(self, value, state): #TODO WRITE VALIDATIONS group_name = value.get('group_name') - group_parent_id = int(value.get('group_parent_id') or - 1) + group_parent_id = int(value.get('group_parent_id') or -1) # slugify repo group just in case :) slug = repo_name_slug(group_name) @@ -206,7 +206,7 @@ class ValidAuth(formencode.validators.Fa def validate_python(self, value, state): password = value['password'] username = value['username'] - user = UserModel().get_by_username(username) + user = User.get_by_username(username) if authenticate(username, password): return value @@ -241,7 +241,7 @@ def ValidRepoName(edit, old_data): repo_name = value.get('repo_name') slug = repo_name_slug(repo_name) - if slug in ['_admin', '']: + if slug in [ADMIN_PREFIX, '']: e_dict = {'repo_name': _('This repository name is disallowed')} raise formencode.Invalid('', value, state, error_dict=e_dict) @@ -250,7 +250,7 @@ def ValidRepoName(edit, old_data): gr = Group.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 actuall just the name to store in the + # db key This is an actual just the name to store in the # database repo_name_full = group_path + Group.url_sep() + repo_name else: @@ -259,25 +259,32 @@ def ValidRepoName(edit, old_data): value['repo_name_full'] = repo_name_full - if old_data.get('repo_name') != repo_name_full or not edit: + rename = old_data.get('repo_name') != repo_name_full + create = not edit + if rename or create: if group_path != '': if RepoModel().get_by_repo_name(repo_name_full,): e_dict = {'repo_name':_('This repository already ' - 'exists in group "%s"') % + 'exists in a group "%s"') % gr.group_name} raise formencode.Invalid('', value, state, error_dict=e_dict) + elif Group.get_by_group_name(repo_name_full): + e_dict = {'repo_name':_('There is a group with this' + ' name already "%s"') % + repo_name_full} + raise formencode.Invalid('', value, state, + error_dict=e_dict) - else: - if RepoModel().get_by_repo_name(repo_name_full): + elif RepoModel().get_by_repo_name(repo_name_full): e_dict = {'repo_name':_('This repository ' 'already exists')} raise formencode.Invalid('', value, state, error_dict=e_dict) + return value - return _ValidRepoName def ValidForkName(): @@ -287,7 +294,7 @@ def ValidForkName(): repo_name = value.get('fork_name') slug = repo_name_slug(repo_name) - if slug in ['_admin', '']: + if slug in [ADMIN_PREFIX, '']: e_dict = {'repo_name': _('This repository name is disallowed')} raise formencode.Invalid('', value, state, error_dict=e_dict)