from formencode.api import FancyValidator, NoDefault
[docs]class JSONTyped(FancyValidator):
"""
Wrap formencode validator with JSON schema's types & properties. ::
validator = JSONTyped(
{'type': 'string'},
validators.UnicodeString(),
required=True,
description="Some important field",
)
"""
__unpackargs__ = ('json_type', 'validator')
required = NoDefault
description = None
def _convert_to_python(self, value, state=None):
return self.validator.to_python(value, state)
def _convert_from_python(self, value, state=None):
return self.validator.from_python(value, state)
[docs]class ObjectTyped(JSONTyped):
"""Wrap formencode validator with object type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'object',
}, validator, *args, **kwargs)
[docs]class ArrrayTyped(JSONTyped):
"""Wrap formencode validator with array type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'array',
}, validator, *args, **kwargs)
[docs]class DateTyped(JSONTyped):
"""Wrap formencode validator with date type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'string',
'format': 'date',
}, validator, *args, **kwargs)
[docs]class TimeTyped(JSONTyped):
"""Wrap formencode validator with time type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'string',
'format': 'time',
}, validator, *args, **kwargs)
[docs]class DateTimeTyped(JSONTyped):
"""Wrap formencode validator with date-time type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'string',
'format': 'date-time',
}, validator, *args, **kwargs)
[docs]class UUIDTyped(JSONTyped):
"""Wrap formencode validator with uuid type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'string',
'format': 'uuid',
}, validator, *args, **kwargs)
[docs]class StringTyped(JSONTyped):
"""Wrap formencode validator with string type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'string',
'format': 'uuid',
}, validator, *args, **kwargs)
[docs]class DecimalTyped(JSONTyped):
"""Wrap formencode validator with decimal type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'number',
'format': 'decimal',
}, validator, *args, **kwargs)
[docs]class FloatTyped(JSONTyped):
"""Wrap formencode validator with float type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'number',
'format': 'float',
}, validator, *args, **kwargs)
[docs]class IntegerTyped(JSONTyped):
"""Wrap formencode validator with integer type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'integer',
}, validator, *args, **kwargs)
[docs]class BooleanTyped(JSONTyped):
"""Wrap formencode validator with boolean type of JSON Schema"""
def __init__(self, validator, *args, **kwargs):
super().__init__({
'type': 'boolean',
}, validator, *args, **kwargs)