1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# -*- encoding: utf-8 -*-
import flask
from flask.ext.wtf import Form as _Form
from wtforms.fields import DateField, IntegerField, StringField, HiddenField, PasswordField
from wtforms import validators as v
from wtforms import fields
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from wtforms.ext.i18n.form import Form as i18nForm
import datetime
from . import app
from . import login
today = datetime.date.today
@app.template_test('hidden')
def is_hidden_field(f):
return isinstance(f, HiddenField)
class DecimalField(fields.DecimalField):
def process_formdata(self, valuelist):
if valuelist:
value = valuelist[0].replace(',','.')
super(DecimalField, self).process_formdata([value])
req = [v.input_required()]
class Form(_Form, i18nForm):
# docs say LOCALES, code says LANGUAGES ... use both :)
LANGUAGES = LOCALES = ['de_DE', 'de']
def __init__ (self, *args, **kwargs):
self._msg = kwargs.pop('flash', u"Fehler im Formular!")
_Form.__init__(self, *args, **kwargs)
def flash(self):
flask.flash(self._msg, u'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 i18nForm._get_translations(self)
class ExpenseForm(Form):
date = DateField(u'Datum', req,
format="%d.%m.%Y",
default=lambda: today())
expense = DecimalField(u'Betrag', req,
description=u'EUR',
places=2)
description = StringField(u'Beschreibung', req)
category = QuerySelectField(u'Kategorie',
get_label='name')
class ConstForm(Form):
start = DateField(u'Beginn', req,
format='%m.%Y',
default=lambda: today())
end = DateField(u'Ende', req,
format='%m.%Y',
default=lambda: today().replace(year = today().year + 1),
description=u'(einschließlich)')
months = IntegerField(u'Zahlungsrythmus', req,
description='Monate')
expense = DecimalField(u'Betrag', req,
description=u'EUR',
places=2)
description = StringField(u'Beschreibung', req)
category = QuerySelectField(u'Kategorie',
get_label='name')
prev = QuerySelectField(u'Vorgänger',
get_label='description',
allow_blank=True)
class LoginForm(Form):
username = StringField(u'Username', req)
pwd = PasswordField(u'Passwort', req)
def __init__(self, *args, **kwargs):
Form.__init__(self,*args, **kwargs)
self.user = None
def validate(self):
rv = Form.validate(self)
if not rv:
return False
user = login.User.get_by(name = self.username.data)
if user is None or not user.check_password(self.pwd.data):
return False
self.user = user
return True
|