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