Source code for pjrpc.server.validators.jsonschema

from typing import Any, Dict, Iterable, Optional

import jsonschema

from pjrpc.common.typedefs import JsonRpcParams, MethodType

from . import base


[docs]class JsonSchemaValidator(base.BaseValidator): """ Parameters validator based on `jsonschema <https://python-jsonschema.readthedocs.io/en/stable/>`_ library. :param kwargs: default jsonschema validator arguments """ def __init__(self, **kwargs: Any): kwargs.setdefault('types', {'array': (list, tuple)}) self.default_kwargs = kwargs
[docs] def validate_method( self, method: MethodType, params: Optional['JsonRpcParams'], exclude: Iterable[str] = (), **kwargs: Any, ) -> Dict[str, Any]: """ Validates params against method using ``pydantic`` validator. :param method: method to validate parameters against :param params: parameters to be validated :param exclude: parameter names to be excluded from validation :param kwargs: jsonschema validator arguments :raises: :py:class:`pjrpc.server.validators.ValidationError` """ arguments = super().validate_method(method, params, exclude) try: kwargs = {**self.default_kwargs, **kwargs} jsonschema.validate(arguments, **kwargs) except jsonschema.ValidationError as e: raise base.ValidationError(str(e)) from e return arguments