Source code for falcon.media.validators.jsonschema
from __future__ import absolute_import
import falcon
try:
import jsonschema
except ImportError:
pass
[docs]def validate(schema):
"""Decorator for validating ``req.media`` using JSON Schema.
This decorator provides standard JSON Schema validation via the
``jsonschema`` package available from PyPI. Semantic validation via
the *format* keyword is enabled for the default checkers implemented
by ``jsonschema.FormatChecker``.
Note:
The `jsonschema`` package must be installed separately in order to use
this decorator, as Falcon does not install it by default.
Args:
schema (dict): A dictionary that follows the JSON Schema specification.
See `json-schema.org <http://json-schema.org/>`_ for more
information on defining a compatible dictionary.
Example:
.. code:: python
from falcon.media.validators import jsonschema
# -- snip --
@jsonschema.validate(my_post_schema)
def on_post(self, req, resp):
# -- snip --
"""
def decorator(func):
def wrapper(self, req, resp, *args, **kwargs):
try:
jsonschema.validate(req.media, schema, format_checker=jsonschema.FormatChecker())
except jsonschema.ValidationError as e:
raise falcon.HTTPBadRequest(
'Failed data validation',
description=e.message
)
return func(self, req, resp, *args, **kwargs)
return wrapper
return decorator