Skip to main content
https://badge.fury.io/py/jsonmodels.png https://travis-ci.org/beregond/jsonmodels.png?branch=master https://pypip.in/d/jsonmodels/badge.png

Models to make easier to deal with structures that are to be casted to JSON.

Features

  • Fully tested with Python 2.7, 3.4 and PyPy.

  • Create Django-like models:

from jsonmodels import models, fields


class Cat(models.Base):

    name = fields.StringField(required=True)
    breed = fields.StringField()


class Dog(models.Base):

    name = fields.StringField(required=True)
    age = fields.IntField()


class Car(models.Base):

    registration_number = fields.StringField(required=True)
    engine_capacity = fields.FloatField()
    color = fields.StringField()


class Person(models.Base):

    name = fields.StringField(required=True)
    surname = fields.StringField(required=True)
    car = fields.EmbeddedField(Car)
    pets = fields.ListField([Cat, Dog])
  • Access to values through attributes:

>>> cat = Cat()
>>> cat.populate(name='Garfield')
>>> cat.name
'Garfield'
>>> cat.breed = 'mongrel'
>>> cat.breed
'mongrel'
  • Validate models:

>>> person = Person(name='Chuck', surname='Norris')
>>> person.validate()
None

>>> dog = Dog()
>>> dog.validate()
*** ValidationError: Field "name" is required!
  • Cast models to python struct and JSON:

>>> cat = Cat(name='Garfield')
>>> dog = Dog(name='Dogmeat', age=9)
>>> car = Car(registration_number='ASDF 777', color='red')
>>> person = Person(name='Johny', surname='Bravo', pets=[cat, dog])
>>> person.car = car
>>> person.to_struct()
{
    'car': {
        'color': 'red',
        'registration_number': 'ASDF 777'
    },
    'surname': 'Bravo',
    'name': 'Johny',
    'pets': [
        {'name': 'Garfield'},
        {'age': 9, 'name': 'Dogmeat'}
    ]
}

>>> import json
>>> person_json = json.dumps(person.to_struct())
  • You don’t like to write JSON Schema? Let jsonmodels do it for you:

>>> person = Person()
>>> person.to_json_schema()
{
    'additionalProperties': False,
    'required': ['surname', 'name'],
    'type': 'object',
    'properties': {
        'car': {
            'additionalProperties': False,
            'required': ['registration_number'],
            'type': 'object',
            'properties': {
                'color': {'type': 'string'},
                'engine_capacity': {'type': 'float'},
                'registration_number': {'type': 'string'}
            }
        },
        'surname': {'type': 'string'},
        'name': {'type': 'string'},
        'pets': {
            'items': {
                'oneOf': [
                    {
                        'additionalProperties': False,
                        'required': ['name'],
                        'type': 'object',
                        'properties': {
                            'breed': {'type': 'string'},
                            'name': {'type': 'string'}
                        }
                    },
                    {
                        'additionalProperties': False,
                        'required': ['name'],
                        'type': 'object',
                        'properties': {
                            'age': {'type': 'integer'},
                            'name': {'type': 'string'}
                        }
                    }
                ]
            },
            'type': 'list'
        }
    }
}
  • Compare JSON schemas:

>>> from jsonmodels.utils import compare_schemas
>>> schema1 = {'type': 'object'}
>>> schema2 = {'type': 'list'}
>>> compare_schemas(schema1, schema1)
True
>>> compare_schemas(schema1, schema2)
False

More

For more examples and better description see full documentation: http://jsonmodels.rtfd.org.

History

Current

  • Added custom validators.

1.1.1 (2014-06-07)

  • Added possibility to populate already initialized data to EmbeddedField.

  • Added compare_schemas utility.

1.1 (2014-05-19)

  • Added docs.

  • Added json schema generation.

  • Added tests for PEP8 and complexity.

  • Moved to Python 3.4.

  • Added PEP257 compatibility.

  • Added help text to fields.

1.0.5 (2014-04-14)

  • Added data transformers.

1.0.4 (2014-04-13)

  • List field now supports simple types.

1.0.3 (2014-04-10)

  • Fixed compatibility with Python 3.

  • Fixed str and repr methods.

1.0.2 (2014-04-03)

  • Added deep data initialization.

1.0.1 (2014-04-03)

  • Added populate method.

1.0 (2014-04-02)

  • First stable release on PyPI.

0.1.0 (2014-03-17)

  • First release on PyPI.

Download files

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

Source Distribution

jsonmodels-1.2.0.1.tar.gz (10.5 kB view details)

Uploaded Source

File details

Details for the file jsonmodels-1.2.0.1.tar.gz.

File metadata

  • Download URL: jsonmodels-1.2.0.1.tar.gz
  • Upload date:
  • Size: 10.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for jsonmodels-1.2.0.1.tar.gz
Algorithm Hash digest
SHA256 5a8adc320949163722e8961ed12a844bcd7545c0a386c0aa0046030f6856606a
MD5 3fe3558f3f821ae83b86c43923802f16
BLAKE2b-256 8633e2645b6d097f6db5d3b718a272c64b71dbc28b2895baf87cfae4c7b66750

See more details on using hashes here.

Release history Release notifications | RSS feed

2.8.0

2 files

2.7.0

2 files

2.6.0

2 files

2.5.1

1 file

2.5.0

1 file

2.4.1

2 files

2.4

2 files

2.3

2 files

2.2

2 files

2.1.5

2 files

2.1.4

2 files

2.1.3

1 file

2.1.2

2 files

2.1.1

2 files

2.1

2 files

2.0.1

2 files

2.0

2 files

1.4.1

2 files

1.4

2 files

1.3.1

1 file

1.3

1 file

1.2.0.2

1 file

This release

1.2.0.1 This release

1 file

1.2

1 file

1.1.1

1 file

1.1

1 file

1.0.5

1 file

1.0.4

1 file

1.0.3

1 file

1.0.2

1 file

1.0.1

1 file

1.0

1 file

0.1.0

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page