diff --git a/mo/web/fields.py b/mo/web/fields.py index 85eeb71fb6655b2f6f2b047968c7d92ee0c949ad..5fcbb6b0c63b460973b63dae11bf2d8fa5224a11 100644 --- a/mo/web/fields.py +++ b/mo/web/fields.py @@ -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"} @@ -142,7 +155,7 @@ class Place(wtforms.StringField): field.place_error = "Zadané místo nenalezeno." def get_place(field) -> Optional[db.Place]: - """ Kešuje výsledek v field.place""" + """Kešuje výsledek v field.place""" if not field.place_loaded: field.place_loaded = True field.load_place() @@ -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):