From 7a91b816c414a7b3dc63190cdee005158b81d571 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 19 Nov 2014 02:58:24 +0100 Subject: forms: validate pad name uniqueness in CreatePad --- forms.py | 19 +++++++++++++++++-- views.py | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/forms.py b/forms.py index 459839d..72848ad 100644 --- a/forms.py +++ b/forms.py @@ -1,4 +1,4 @@ -from wtforms import HiddenField, PasswordField, validators +from wtforms import HiddenField, PasswordField, validators, ValidationError from wtfpeewee.orm import model_form, ModelConverter from flask.ext.wtf import Form from utils import Unique, ReadonlyField @@ -24,7 +24,7 @@ ChangeGroup = model_form(Group, base_class=Form, exclude=['api_id'], field_args= converter=ModelConverter(overrides={'name': ReadonlyField})) -CreatePad = model_form( +_CreatePad = model_form( Pad, base_class=Form, exclude=['api_id', 'created', 'group'], field_args={ 'name': {'validators': [ validators.Required(), @@ -35,5 +35,20 @@ CreatePad = model_form( converter=ModelConverter(overrides={'password': PasswordField})) +class CreatePad(_CreatePad): + def __init__(self, formdata=None, obj=None, group=None, prefix='', **kwarg): + self.group = group + super(CreatePad, self).__init__(formdata, obj, prefix, **kwarg) + + def validate_name(self, field): + if self.group is not None: + try: + Pad.get(Pad.name == field.data, Pad.group == self.group) + raise ValidationError(u'A pad with this name already ' + 'exists in this group.') + except Pad.DoesNotExist: + pass + + class DeleteForm(Form): sure = HiddenField('are you sure', default='yes') diff --git a/views.py b/views.py index 495c0a3..31fe9b8 100644 --- a/views.py +++ b/views.py @@ -107,7 +107,7 @@ def group_join(group_name, member_id, accept): @auth.login_required def pad_create(group_name): group = get_group_or_404(Group.name == group_name, Member.admin == True) - form = CreatePad(request.form) + form = CreatePad(request.form, group=group) if form.validate_on_submit(): pad = Pad() form.populate_obj(pad) -- cgit v1.2.3-1-g7c22