36 lines
962 B
Python
36 lines
962 B
Python
|
|
||
|
from ..modules import db
|
||
|
|
||
|
from wtforms.validators import ValidationError
|
||
|
|
||
|
import json
|
||
|
from sqlalchemy.ext import mutable
|
||
|
|
||
|
class JsonEncodedDict(db.TypeDecorator):
|
||
|
"""Enables JSON storage by encoding and decoding on the fly."""
|
||
|
impl = db.Text
|
||
|
|
||
|
def process_bind_param(self, value, dialect):
|
||
|
if value is None:
|
||
|
return '{}'
|
||
|
else:
|
||
|
return json.dumps(value)
|
||
|
|
||
|
def process_result_value(self, value, dialect):
|
||
|
if value is None:
|
||
|
return {}
|
||
|
else:
|
||
|
return json.loads(value)
|
||
|
|
||
|
mutable.MutableDict.associate_with(JsonEncodedDict)
|
||
|
|
||
|
def value(min:int=0, max:int=None):
|
||
|
if not max:
|
||
|
message = f'Value must be greater than {min}.'
|
||
|
else:
|
||
|
message = f'Value must be between {min} and {max}.'
|
||
|
def length(form, field):
|
||
|
value = field.data or 0
|
||
|
if value < min or max != None and value > max:
|
||
|
raise ValidationError(message)
|
||
|
return length
|