46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
|
|
CALLBACKS = {
|
|
'validate': lambda self, value: True,
|
|
'render': lambda self, *args, **kwargs: '',
|
|
'digest_key': None,
|
|
'rendervalue': lambda self, *args, **kwargs: self.value,
|
|
'initializer': None,
|
|
}
|
|
|
|
class Field:
|
|
|
|
def wrap_callback(self, cb):
|
|
if cb is None:
|
|
return
|
|
def func(*args, **kwargs):
|
|
return cb(self, *args, **kwargs)
|
|
return func
|
|
|
|
def __init__(self, *, is_multiple=False, **callbacks):
|
|
self.apply_filters = []
|
|
for cb in CALLBACKS.keys():
|
|
func = self.wrap_callback(
|
|
callbacks.get(cb, CALLBACKS[cb])
|
|
)
|
|
if func is not None:
|
|
setattr(self, cb, func)
|
|
self.initializer = callbacks.get('initializer', lambda: '')
|
|
#self.digest_key = callbacks.get('digest_key', None)
|
|
self.error_msg = ''
|
|
self.multiple = is_multiple
|
|
self.options_map = {}
|
|
self.is_valid = None
|
|
|
|
@property
|
|
def value(self):
|
|
if not hasattr(self, '_value'):
|
|
self._value = self.initializer()
|
|
return self._value
|
|
|
|
@value.setter
|
|
def value(self, value):
|
|
self._value = value
|
|
|
|
class ValidationError(RuntimeError):
|
|
pass
|