Update atst to atat
This commit is contained in:
104
atat/forms/validators.py
Normal file
104
atat/forms/validators.py
Normal file
@@ -0,0 +1,104 @@
|
||||
from datetime import datetime
|
||||
import re
|
||||
|
||||
from werkzeug.datastructures import FileStorage
|
||||
from wtforms.validators import ValidationError, Regexp
|
||||
import pendulum
|
||||
|
||||
from atat.utils.localization import translate
|
||||
|
||||
|
||||
def DateRange(lower_bound=None, upper_bound=None, message=None):
|
||||
def _date_range(form, field):
|
||||
if field.data is None:
|
||||
return
|
||||
|
||||
now = pendulum.now().date()
|
||||
|
||||
if isinstance(field.data, str):
|
||||
date = datetime.strptime(field.data, field.format)
|
||||
else:
|
||||
date = field.data
|
||||
|
||||
if lower_bound is not None:
|
||||
if (now - lower_bound) > date:
|
||||
raise ValidationError(message)
|
||||
|
||||
if upper_bound is not None:
|
||||
if (now + upper_bound) < date:
|
||||
raise ValidationError(message)
|
||||
|
||||
return _date_range
|
||||
|
||||
|
||||
def Number(message=translate("forms.validators.is_number_message")):
|
||||
def _is_number(form, field):
|
||||
if field.data:
|
||||
try:
|
||||
int(field.data)
|
||||
except (ValueError, TypeError):
|
||||
raise ValidationError(message)
|
||||
|
||||
return _is_number
|
||||
|
||||
|
||||
def PhoneNumber(message=translate("forms.validators.phone_number_message")):
|
||||
def _is_phone_number(form, field):
|
||||
digits = re.sub(r"\D", "", field.data)
|
||||
if len(digits) not in [5, 10]:
|
||||
raise ValidationError(message)
|
||||
|
||||
match = re.match(r"[\d\-\(\) ]+", field.data)
|
||||
if not match or match.group() != field.data:
|
||||
raise ValidationError(message)
|
||||
|
||||
return _is_phone_number
|
||||
|
||||
|
||||
def Name(message=translate("forms.validators.name_message")):
|
||||
def _name(form, field):
|
||||
match = re.match(r"[\w \,\.\'\-]+", field.data)
|
||||
if not match or match.group() != field.data:
|
||||
raise ValidationError(message)
|
||||
|
||||
return _name
|
||||
|
||||
|
||||
def ListItemRequired(
|
||||
message=translate("forms.validators.list_item_required_message"),
|
||||
empty_values=[None],
|
||||
):
|
||||
def _list_item_required(form, field):
|
||||
non_empty_values = [
|
||||
v for v in field.data if (v not in empty_values and re.search(r"\S", v))
|
||||
]
|
||||
if len(non_empty_values) == 0:
|
||||
raise ValidationError(message)
|
||||
|
||||
return _list_item_required
|
||||
|
||||
|
||||
def ListItemsUnique(message=translate("forms.validators.list_items_unique_message")):
|
||||
def _list_items_unique(form, field):
|
||||
if len(field.data) > len(set(field.data)):
|
||||
raise ValidationError(message)
|
||||
|
||||
return _list_items_unique
|
||||
|
||||
|
||||
def FileLength(max_length=50000000, message=None):
|
||||
def _file_length(_form, field):
|
||||
if field.data is None or not isinstance(field.data, FileStorage):
|
||||
return True
|
||||
|
||||
content = field.data.read()
|
||||
if len(content) > max_length:
|
||||
raise ValidationError(message)
|
||||
else:
|
||||
field.data.seek(0)
|
||||
|
||||
return _file_length
|
||||
|
||||
|
||||
def AlphaNumeric(message=translate("forms.validators.alpha_numeric_message")):
|
||||
return Regexp(regex=r"^[A-Za-z0-9\-_ \.]*$", message=message)
|
Reference in New Issue
Block a user