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 from models import Group, Pad from widgets import TextArea CreateGroup = model_form(Group, base_class=Form, exclude=['api_id'], field_args={ 'name': {'validators': [ validators.Required(), validators.Regexp('^[a-zA-Z1-9_-]+$', message=u'Invalid group name ' '(only simple characters, numbers, - and _).'), validators.Regexp('^[a-zA-Z1-9]', message=u'Group name should not ' 'start with a special character.'), Unique(Group, Group.name, message=u'A group with this name ' 'already exists.')] }, 'description': {'widget': TextArea(rows=7)}}) ChangeGroup = model_form(Group, base_class=Form, exclude=['api_id'], field_args={ 'description': {'widget': TextArea(rows=7)}}, converter=ModelConverter(overrides={'name': ReadonlyField})) _CreatePad = model_form( Pad, base_class=Form, exclude=['api_id', 'created', 'group'], field_args={ 'name': {'validators': [ validators.Required(), validators.Regexp('^[a-zA-Z1-9_-]+$', message=u'Invalid pad name ' '(only simple characters, numbers, - and _).'), validators.Regexp('^[a-zA-Z1-9]', message=u'Pad name should not ' 'start with a special character.')]}}, 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')