diff options
Diffstat (limited to 'kosten/app/forms.py')
-rw-r--r-- | kosten/app/forms.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/kosten/app/forms.py b/kosten/app/forms.py new file mode 100644 index 0000000..b7cbebf --- /dev/null +++ b/kosten/app/forms.py @@ -0,0 +1,59 @@ +# -*- encoding: utf-8 -*- +import flask +from flask_wtf import FlaskForm +from wtforms.fields import BooleanField, StringField, HiddenField, PasswordField, DecimalField as WTFDecimalField, DateField as HTML4DateField +from wtforms.fields.html5 import DateField, IntegerField +from wtforms import validators, ValidationError, Form as WTForm + +from wtforms.ext.sqlalchemy.fields import QuerySelectField + +from . import app + +@app.template_test('hidden') +def is_hidden_field(f): + return isinstance(f, HiddenField) + +class DecimalField(WTFDecimalField): + def __init__(self, *args, **kwargs): + render_kw = kwargs.setdefault('render_kw', dict()) + render_kw.setdefault('inputmethod', 'decimal') + + super().__init__(*args, **kwargs) + + def process_formdata(self, valuelist): + if valuelist: + value = valuelist[0].replace(',','.') + super().process_formdata([value]) + +class MonthField(HTML4DateField): + def __init__(self, label, validators, format='%m.%Y', **kwargs): + super().__init__(label, validators, format, **kwargs) + +req = [validators.input_required()] + +class Form(FlaskForm): + class Meta: + locales = ['de_DE', 'de'] + + def __init__ (self, *args, **kwargs): + self._msg = kwargs.pop('flash', "Fehler im Formular!") + super().__init__(*args, **kwargs) + + def flash(self): + flask.flash(self._msg, 'error') + + def flash_validate (self): + if not self.validate(): + self.flash() + return False + + return True + + def validate_on_submit (self): + return self.is_submitted() and self.flash_validate() + + def _get_translations(self): + # use WTForms builtin translation support instead of the flask-babael + # stuff added by flask-wtf + # FIXME: remove this, if flask-babel is used in the app + return WTForm._get_translations(self) |