You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.0 KiB
34 lines
1.0 KiB
from functools import reduce
|
|
from typing import Any, Callable, Dict
|
|
|
|
from . import formats
|
|
from .error_reporting import detailed_errors, ValidationError
|
|
from .extra_validations import EXTRA_VALIDATIONS
|
|
from .fastjsonschema_exceptions import JsonSchemaException, JsonSchemaValueException
|
|
from .fastjsonschema_validations import validate as _validate
|
|
|
|
__all__ = [
|
|
"validate",
|
|
"FORMAT_FUNCTIONS",
|
|
"EXTRA_VALIDATIONS",
|
|
"ValidationError",
|
|
"JsonSchemaException",
|
|
"JsonSchemaValueException",
|
|
]
|
|
|
|
|
|
FORMAT_FUNCTIONS: Dict[str, Callable[[str], bool]] = {
|
|
fn.__name__.replace("_", "-"): fn
|
|
for fn in formats.__dict__.values()
|
|
if callable(fn) and not fn.__name__.startswith("_")
|
|
}
|
|
|
|
|
|
def validate(data: Any) -> bool:
|
|
"""Validate the given ``data`` object using JSON Schema
|
|
This function raises ``ValidationError`` if ``data`` is invalid.
|
|
"""
|
|
with detailed_errors():
|
|
_validate(data, custom_formats=FORMAT_FUNCTIONS)
|
|
reduce(lambda acc, fn: fn(acc), EXTRA_VALIDATIONS, data)
|
|
return True
|
|
|