Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dinoboff/schemabuilder
Helper to build json schema definitions
https://github.com/dinoboff/schemabuilder
Last synced: about 1 month ago
JSON representation
Helper to build json schema definitions
- Host: GitHub
- URL: https://github.com/dinoboff/schemabuilder
- Owner: dinoboff
- License: mit
- Created: 2014-09-07T13:58:32.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2015-01-06T16:07:20.000Z (almost 10 years ago)
- Last Synced: 2024-10-04T07:17:47.179Z (about 1 month ago)
- Language: Python
- Size: 176 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
===================
JSON-Schema builder
===================Helpers to build you define JSON schema for either validation or publication.
Requirements
============It requires Python 2.7 and ``jsonschema``. ``jsonschema`` or ``setuptools``
should be installed with Python.Install
=======Using pip::
pip install schemabuilder
Or easy_install::
easty_install schemabuilder
You may install it manually::
git clone https://github.com/dinoboff/schemabuilder.git
cd schemabuilder
python setup.py installUsage
=====Primitives
----------JSON schema primitives are represented by object of type:
* ``schemabuilder.Str``
* ``schemabuilder.Bool``
* ``schemabuilder.Number``
* ``schemabuilder.Int``
* ``schemabuilder.Object``
* ``schemabuilder.Array``.. code-block:: python
>>> import schemabuilder as jsb
>>> import pprint
>>>
>>> name = jsb.Str(pattern="^[a-zA-Z][- 'a-zA-Z0-9]+")
>>> email = jsb.Str(format="email")
>>> user = jsb.Object(properties={
... 'name': name(required=True),
... 'email': email(),
... 'home': jsb.Str(format='uri'),
... })
>>> pprint.pprint(user.to_dict())
{'properties': {'email': {'type': 'string'},
'home': {'format': 'uri', 'type': 'string'},
'name': {'type': 'string'}},
'required': ['name'],
'type': 'object'}Schema
------Schema collects those definitions for validation (using ``jsonschema``) or
publication... code-block:: python
>>> import schemabuilder as jsb
>>> import pprint
>>>
>>> my_schemas = jsb.Schema(id='http://example.com/schemas.json#')
>>> name = my_schemas.define(
... 'name', jsb.Str(pattern="^[a-zA-Z][- 'a-zA-Z0-9]+")
... )
>>> email = my_schemas.define('email', jsb.Str(format="email"))
>>> user = my_schemas.define('user', jsb.Object(properties={
... 'name': name(required=True),
... 'email': email(required=True),
... }))
>>>
>>> user.validate({'name': 'bob'})
Traceback (most recent call last):
File "", line 1, in
File "schemabuilder/schema.py", line 50, in validate
validator.validate(data)
File "/Users/bob/pyenv/lib/python2.7/site-packages/jsonschema/validators.py", line 117, in validate
raise error
jsonschema.exceptions.ValidationError: 'email' is a required property
Failed validating 'required' in schema:
{'properties': {'email': {'$ref': '#/definitions/email'},
'name': {'$ref': '#/definitions/name'}},
'required': ['name', 'email'],
'type': 'object'}
On instance:
{'name': 'bob'}
>>>
>>> user.validate({'name': 'bob', 'email': '[email protected]'})
>>>
>>> import json
>>> print json.dumps(my_schemas.to_dict(), indent=4)
{
"definitions": {
"email": {
"type": "string",
"format": "email"
},
"user": {
"required": [
"name",
"email"
],
"type": "object",
"properties": {
"name": {
"$ref": "#/definitions/name"
},
"email": {
"$ref": "#/definitions/email"
}
}
},
"name": {
"pattern": "^[a-zA-Z][- 'a-zA-Z0-9]+",
"type": "string"
}
},
"id": "http://example.com/schemas.json#",
"$schema": "http://json-schema.org/draft-04/schema#"
}