Skip to content
Snippets Groups Projects
Commit 35f0395a authored by Martin Mareš's avatar Martin Mareš Committed by Jan Prachař
Browse files

Automatické ořezávání stringových polí ve formulářích

V modulu mo.web.fields zavádím typy String a Password, které
se od StringField a PasswordField liší automatickým ořezáváním.
Ostatní stringovité typy odvozujeme od nich.

Viz #254.
parent c74cabb5
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,19 @@ import mo.users
import mo.db as db
class Stripped:
"""Zkombinuje se s třídou z WTForms a přidá automatické ořezávání mezer."""
def process_formdata(self, valuelist):
if valuelist:
valuelist = [x.strip() for x in valuelist]
super().process_formdata(valuelist)
class String(Stripped, wtforms.StringField):
pass
class OptionalInt(wtforms.IntegerField):
widget = NumberInput()
......@@ -40,7 +53,7 @@ class Decimal(wtforms.DecimalField):
return super(Decimal, self)._value()
class IntList(wtforms.StringField):
class IntList(String):
list = None
def __init__(self, label="", validators=None, **kwargs):
......@@ -54,13 +67,13 @@ class IntList(wtforms.StringField):
except mo.CheckError as e:
raise wtforms.ValidationError(str(e))
class Points(Decimal):
def __init__(self, label="Body", validators=None, **kwargs):
super().__init__(label, validators, **kwargs)
class Email(EmailField):
class Email(Stripped, EmailField):
def __init__(self, label="E-mail", validators=None, **kwargs):
super().__init__(label, validators, **kwargs)
......@@ -72,7 +85,7 @@ class Email(EmailField):
raise wtforms.ValidationError(str(e))
class Grade(wtforms.StringField):
class Grade(String):
"""Pro validaci hledá ve formuláři form.school a podle ní rozlišuje SŠ a ZŠ """
default_description = "Pro základní školy je to číslo od 1 do 9, pro <var>k</var>-tý ročník <var>r</var>-leté střední školy má formát <var>k</var>/<var>r</var>."
validate_grade = True
......@@ -104,7 +117,7 @@ class BirthYear(OptionalInt):
raise wtforms.ValidationError(str(e))
class Name(wtforms.StringField):
class Name(String):
def pre_validate(field, form):
# XXX: Tato kontrola úmyslně není striktní, aby prošla i jména jako 'de Beer'
if field.data:
......@@ -124,7 +137,7 @@ class LastName(Name):
super().__init__(label, validators, **kwargs)
class Place(wtforms.StringField):
class Place(String):
def __init__(self, label="Místo", validators=None, **kwargs):
super().__init__(label, validators, **kwargs)
self.render_kw = {"placeholder": "Kód"}
......@@ -182,7 +195,11 @@ class School(Place):
field.place_error = str(e)
class NewPassword(wtforms.PasswordField):
class Password(Stripped, wtforms.PasswordField):
pass
class NewPassword(Password):
def __init__(self, label="Nové heslo", validators=None, **kwargs):
super().__init__(label, validators, **kwargs)
......@@ -192,7 +209,7 @@ class NewPassword(wtforms.PasswordField):
raise wtforms.ValidationError(mo.users.password_help)
class RepeatPassword(wtforms.PasswordField):
class RepeatPassword(Password):
"""Pro validaci hledá ve formuláři form.new_passwd a s ním porovnává."""
def __init__(self, label="Zopakujte heslo", validators=None, **kwargs):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment