Update atst to atat
This commit is contained in:
46
atat/forms/forms.py
Normal file
46
atat/forms/forms.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from flask_wtf import FlaskForm
|
||||
from flask import current_app, request as http_request
|
||||
import re
|
||||
|
||||
from atat.utils.flash import formatted_flash as flash
|
||||
|
||||
EMPTY_LIST_FIELD = ["", None]
|
||||
|
||||
|
||||
def remove_empty_string(value):
|
||||
# only return strings that contain non whitespace characters
|
||||
if value and re.search(r"\S", value):
|
||||
return value.strip()
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
class BaseForm(FlaskForm):
|
||||
def __init__(self, formdata=None, **kwargs):
|
||||
# initialize the form with data from the cache
|
||||
formdata = formdata or {}
|
||||
cached_data = current_app.form_cache.from_request(http_request)
|
||||
cached_data.update(formdata)
|
||||
super().__init__(cached_data, **kwargs)
|
||||
|
||||
@property
|
||||
def data(self):
|
||||
# remove 'csrf_token' key/value pair
|
||||
# remove empty strings and None from list fields
|
||||
# prevent values that are not an option in a RadioField from being saved to the DB
|
||||
_data = super().data
|
||||
_data.pop("csrf_token", None)
|
||||
for field in _data:
|
||||
if _data[field].__class__.__name__ == "list":
|
||||
_data[field] = [el for el in _data[field] if el not in EMPTY_LIST_FIELD]
|
||||
if self[field].__class__.__name__ == "RadioField":
|
||||
choices = [el[0] for el in self[field].choices]
|
||||
if _data[field] not in choices:
|
||||
_data[field] = None
|
||||
return _data
|
||||
|
||||
def validate(self, *args, flash_invalid=True, **kwargs):
|
||||
valid = super().validate(*args, **kwargs)
|
||||
if not valid and flash_invalid:
|
||||
flash("form_errors")
|
||||
return valid
|
Reference in New Issue
Block a user