Skip to main content

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 Draft7Validator. But you can also use Draft3Validator, Draft4Validator or Draft6Validator. You can even create your own Validator or extend an existent one. Just pass the Validator to the loader:

from jsonschema import Draft4Validator
from more.jsonschema import loader

  user_schema_load = loader(user_schema, validator=Draft4Validator)

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.2 (2020-04-26)

  • Removed: Removed support for Python 2 and Python 3.4 and 3.5.

    You have to upgrade to Python 3 if you want to use this version.

  • Added support for Python 3.6, 3.7 and 3.8 and PyPy 3.6.

  • Make Python 3.7 the default testing environment.

  • Upgrade jsonschema to version 3.2.0.

  • Make JSON Schema Draft 7 the default validator.

  • Add integration for the Black code formatter.

0.1 (2017-03-17)

  • initial public release.

Project details


Download files

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

Source Distribution

more.jsonschema-0.2.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

more.jsonschema-0.2-py2.py3-none-any.whl (6.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file more.jsonschema-0.2.tar.gz.

File metadata

  • Download URL: more.jsonschema-0.2.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.3

File hashes

Hashes for more.jsonschema-0.2.tar.gz
Algorithm Hash digest
SHA256 d2e2b23fa78940f8897947847930adc6bb2a76e905a905529397184e582c5657
MD5 4484f7e52951ad5b86a5311d83203399
BLAKE2b-256 1606a59832bbabe632916f6868c3e93a441708d27025b8be044cbecbf485abcd

See more details on using hashes here.

File details

Details for the file more.jsonschema-0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: more.jsonschema-0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.3

File hashes

Hashes for more.jsonschema-0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 560b7e35e1e5982a097ca254ec06ee595c1fdbfe110a60092a10f2475ed3ae67
MD5 f4cc80bd4833c1eefd9e07357658151b
BLAKE2b-256 167cf850583599a01ebe2f0fc6c98fc4a4c0167c65ef156ca0279962905fcece

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page