Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

JSON Schema support for Morepath

Project Description

more.jsonschema: JSON Schema support for Morepath

This package provides Morepath integration for JSON Schema, implemented with jsonschema:

JSON Schema can automate user input validation in a HTTP API.

Schema

The JSON schema need to be load into a Python dict (you can use json.load()):

user_schema = {
    'type': 'object',
    'properties': {
        'name': {
            'type': 'string',
            'minLength': 3
        },
        'age': {
            'type': 'integer',
            'minimum': 10
        }
    },
    'required': ['name', 'age']
}

If you want to define JSON schemas in Python, you can use jsl for instance.

Validate

The more.jsonschema integration helps with validation of the request body as it is POSTed to a view. First we must create a loader for our schema:

from more.jsonschema import loader

user_schema_load = loader(user_schema)

We can use this loader to handle a POST request for instance:

@App.json(model=User, request_method='POST', load=user_schema_load)
def user_post(self, request, json):
    # json is now a validated and normalized dict of whatever got
    # POST onto this view that you can use to update
    # self

Customize the Validator

By default more.jsonschema uses the Draft4Validator. But you can also use the Draft3Validator, create your own Validator or extend an existent Validator. Just pass the Validator to the loader:

from jsonschema import Draft3Validator
from more.jsonschema import loader

  user_schema_load = loader(user_schema, validator=Draft3Validator)

More information about creating or extending Validator classes you can find in the jsonschema documentation.

Error handling

If validation fails due to a validation error (a required field is missing, or a field is of the wrong datatype, for instance), you want to show some kind of error message. The load function created by more.jsonschema raise the more.jsonschema.ValidationError exception in case of errors.

This exception object has an errors attribute with the validation errors. You must define an exception view for it, otherwise validation errors are returned as “500 internal server error” to API users.

This package provides a default exception view implementation. If you subclass your application from more.jsonschema.JsonSchemaApp then you get a default error view for ValidationError that has a 422 status code with an error message:

from more.jsonschema import JsonSchemaApp

class App(JsonSchemaApp):
    pass

Now your app has reasonable error handling built-in.

CHANGES

0.1 (2017-03-17)

  • initial public release.
Release History

Release History

This version
History Node

0.1

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
more.jsonschema-0.1-py2.py3-none-any.whl (7.8 kB) Copy SHA256 Checksum SHA256 py2.py3 Wheel Mar 17, 2017
more.jsonschema-0.1.tar.gz (5.5 kB) Copy SHA256 Checksum SHA256 Source Mar 17, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting