aboutsummaryrefslogtreecommitdiff
path: root/rhodecode/model/forms.py
diff options
context:
space:
mode:
authorMarcin Kuzminski <marcin@python-works.com>2011-05-23 02:22:00 +0200
committerMarcin Kuzminski <marcin@python-works.com>2011-05-23 02:22:00 +0200
commit4f0c3932fdffe2c764b71bf8e13f963eba179002 (patch)
tree642d6b9a9aa6bb9892ad7ee753266380f6470115 /rhodecode/model/forms.py
parentfc2574cf36e5b15730d7ddd79940930ed32c28dc (diff)
#47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Added new db unique key for Group --HG-- branch : beta
Diffstat (limited to 'rhodecode/model/forms.py')
-rw-r--r--rhodecode/model/forms.py89
1 files changed, 57 insertions, 32 deletions
diff --git a/rhodecode/model/forms.py b/rhodecode/model/forms.py
index c28f246f..ad39447d 100644
--- a/rhodecode/model/forms.py
+++ b/rhodecode/model/forms.py
@@ -35,7 +35,6 @@ from webhelpers.pylonslib.secure_form import authentication_token
from rhodecode.lib.utils import repo_name_slug
from rhodecode.lib.auth import authenticate, get_crypt_password
from rhodecode.lib.exceptions import LdapImportError
-from rhodecode.model import meta
from rhodecode.model.user import UserModel
from rhodecode.model.repo import RepoModel
from rhodecode.model.db import User, UsersGroup, Group
@@ -117,6 +116,27 @@ def ValidUsersGroup(edit, old_data):
return _ValidUsersGroup
+def ValidReposGroup(edit, old_data):
+
+ class _ValidReposGroup(formencode.validators.FancyValidator):
+
+ def validate_python(self, value, state):
+ #TODO WRITE VALIDATIONS
+ group_name = value.get('repos_group_name')
+ parent_id = value.get('repos_group_parent')
+
+ # slugify repo group just in case :)
+ slug = repo_name_slug(group_name)
+
+ # check filesystem
+ gr = Group.query().filter(Group.group_name == slug)\
+ .filter(Group.group_parent_id == parent_id).scalar()
+
+ if gr:
+ e_dict = {'repos_group_name':_('This group already exists')}
+ raise formencode.Invalid('', value, state,
+ error_dict=e_dict)
+ return _ValidReposGroup
class ValidPassword(formencode.validators.FancyValidator):
@@ -193,17 +213,13 @@ class ValidAuth(formencode.validators.FancyValidator):
class ValidRepoUser(formencode.validators.FancyValidator):
def to_python(self, value, state):
- sa = meta.Session()
try:
- self.user_db = sa.query(User)\
+ self.user_db = User.query()\
.filter(User.active == True)\
.filter(User.username == value).one()
except Exception:
raise formencode.Invalid(_('This username is not valid'),
value, state)
- finally:
- meta.Session.remove()
-
return value
def ValidRepoName(edit, old_data):
@@ -222,6 +238,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
+ # it has to use '/'
repo_name_full = group_path + '/' + repo_name
else:
group_path = ''
@@ -250,13 +267,13 @@ def ValidRepoName(edit, old_data):
return _ValidRepoName
-def SlugifyRepo():
- class _SlugifyRepo(formencode.validators.FancyValidator):
+def SlugifyName():
+ class _SlugifyName(formencode.validators.FancyValidator):
def to_python(self, value, state):
return repo_name_slug(value)
- return _SlugifyRepo
+ return _SlugifyName
def ValidCloneUri():
from mercurial.httprepo import httprepository, httpsrepository
@@ -331,15 +348,14 @@ class ValidPerms(formencode.validators.FancyValidator):
value['perms_new'] = perms_new
#update permissions
- sa = meta.Session
for k, v, t in perms_new:
try:
if t is 'user':
- self.user_db = sa.query(User)\
+ self.user_db = User.query()\
.filter(User.active == True)\
.filter(User.username == k).one()
if t is 'users_group':
- self.user_db = sa.query(UsersGroup)\
+ self.user_db = UsersGroup.query()\
.filter(UsersGroup.users_group_active == True)\
.filter(UsersGroup.users_group_name == k).one()
@@ -373,15 +389,11 @@ def UniqSystemEmail(old_data):
def to_python(self, value, state):
value = value.lower()
if old_data.get('email') != value:
- sa = meta.Session()
- try:
- user = sa.query(User).filter(User.email == value).scalar()
- if user:
- raise formencode.Invalid(_("This e-mail address is already taken") ,
- value, state)
- finally:
- meta.Session.remove()
-
+ user = User.query().filter(User.email == value).scalar()
+ if user:
+ raise formencode.Invalid(
+ _("This e-mail address is already taken"),
+ value, state)
return value
return _UniqSystemEmail
@@ -389,14 +401,10 @@ def UniqSystemEmail(old_data):
class ValidSystemEmail(formencode.validators.FancyValidator):
def to_python(self, value, state):
value = value.lower()
- sa = meta.Session
- try:
- user = sa.query(User).filter(User.email == value).scalar()
- if user is None:
- raise formencode.Invalid(_("This e-mail address doesn't exist.") ,
- value, state)
- finally:
- meta.Session.remove()
+ user = User.query().filter(User.email == value).scalar()
+ if user is None:
+ raise formencode.Invalid(_("This e-mail address doesn't exist.") ,
+ value, state)
return value
@@ -489,6 +497,23 @@ def UsersGroupForm(edit=False, old_data={}, available_members=[]):
return _UsersGroupForm
+def ReposGroupForm(edit=False, old_data={}, available_groups=[]):
+ class _ReposGroupForm(formencode.Schema):
+ allow_extra_fields = True
+ filter_extra_fields = True
+
+ repos_group_name = All(UnicodeString(strip=True, min=1, not_empty=True),
+ SlugifyName())
+ repos_group_description = UnicodeString(strip=True, min=1,
+ not_empty=True)
+ repos_group_parent = OneOf(available_groups, hideList=False,
+ testValueList=True,
+ if_missing=None, not_empty=False)
+
+ chained_validators = [ValidReposGroup(edit, old_data)]
+
+ return _ReposGroupForm
+
def RegisterForm(edit=False, old_data={}):
class _RegisterForm(formencode.Schema):
allow_extra_fields = True
@@ -519,7 +544,7 @@ def RepoForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
allow_extra_fields = True
filter_extra_fields = False
repo_name = All(UnicodeString(strip=True, min=1, not_empty=True),
- SlugifyRepo())
+ SlugifyName())
clone_uri = All(UnicodeString(strip=True, min=1, not_empty=False),
ValidCloneUri()())
repo_group = OneOf(repo_groups, hideList=True)
@@ -541,7 +566,7 @@ def RepoForkForm(edit=False, old_data={}, supported_backends=BACKENDS.keys()):
allow_extra_fields = True
filter_extra_fields = False
fork_name = All(UnicodeString(strip=True, min=1, not_empty=True),
- SlugifyRepo())
+ SlugifyName())
description = UnicodeString(strip=True, min=1, not_empty=True)
private = StringBoolean(if_missing=False)
repo_type = All(ValidForkType(old_data), OneOf(supported_backends))
@@ -552,7 +577,7 @@ def RepoSettingsForm(edit=False, old_data={}):
allow_extra_fields = True
filter_extra_fields = False
repo_name = All(UnicodeString(strip=True, min=1, not_empty=True),
- SlugifyRepo())
+ SlugifyName())
description = UnicodeString(strip=True, min=1, not_empty=True)
private = StringBoolean(if_missing=False)