Skip to main content

Object Data Mapping for Python

Project description

Based off a previous library for mapping JSON to python objects Odin branches from just supporting JSON to supporting many other data representations, allowing them to be mapped into converted into a Python object graph, validated against a set of validators and mapped into other formats.

License https://pypip.in/v/odin/badge.png Travis CI Status Coveralls Requirements Status

Highlights

  • Class based declarative style

  • Fields for building composite resources

  • Field and Resource level validation

  • Resource to resource mapping

  • Easy extension to support custom fields

  • Python 2.7+, Python 3.2+ and PyPy 1 supported

1 certain contrib items are not supported. Pint is not installable with PyPy.

Upcoming features

In development

  • Customisable generation of documentation of resources (for integration into Sphinx)

  • Complete documentation (around 70-80% complete for current features)

  • Support for CSV

Planning

  • Integration with other libraries (ie Django Models/Forms)

Requires

  • six

Optional

  • simplejson - Odin will use simplejson if it is available or fallback to the builtin json library

Contrib

  • jinja2 >= 2.7 - For documentation generation

  • pint - Support for physical quantities using the Pint library.

Example

With definition:

import odin

class Author(odin.Resource):
    name = odin.StringField()

class Publisher(odin.Resource):
    name = odin.StringField()

class Book(odin.Resource):
    title = odin.StringField()
    authors = odin.ArrayOf(Author)
    publisher = odin.DictAs(Publisher)
    genre = odin.StringField()
    num_pages = odin.IntegerField()
>>> b = Book(
        title="Consider Phlebas",
        genre="Space Opera",
        publisher=Publisher(name="Macmillan"),
        num_pages=471
    )
>>> b.authors.append(Author(name="Iain M. Banks"))
>>> from odin.codecs import json_codec
>>> json_codec.dumps(b, pretty_print=True)
{
    "$": "Book",
    "authors": [
        {
            "$": "Author",
            "name": "Iain M. Banks"
        }
    ],
    "genre": "Space Opera",
    "num_pages": 471,
    "publisher": {
        "$": "Publisher",
        "name": "Macmillan"
    },
    "title": "Consider Phlebas"
}

Special Mention

I would like to acknowledge the strong influence on the design of Odin from the Django ORM and it’s notable contributor Malcolm Tredinnick. He was a valued colleague who’s untimely passing left a large void in our company and the wider community.

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

odin-0.4.2.tar.gz (18.4 kB view hashes)

Uploaded Source

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