jsrn

JavaScript Resource Notation for Python


License
MIT-feh
Install
pip install jsrn==0.3.2

Documentation

This project is now deprecated and has been replaced by Odin.

JSRN - JavaScript Resource Notation for Python

A JSON based notation for resources that can be easily converted into object graphs.

Note

Official location of this project is now GitHub (for Travis-CI support), the BitBucket repository may not contain the latest code.

Travis CI Status

Highlights

  • Class based declarative style
  • Support for all JSON primitive types (including JavaScript Date)
  • Fields for building composite resources
  • Field and Resource level validation
  • Easy extension to support custom fields
  • Python 2.7+ and Python 3.3+ supported

Quick links

Upcoming features

In development

  • Customisable generation of documentation of resources (for integration into Sphinx)
  • Complete documentation (around 70-80% complete for current features)

Planning

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

Requires

  • six

Optional

  • jinja2 >= 2.7 - For documentation generation
  • simplejson - Performance improvements

Example

With definition:

import jsrn

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

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

class Book(jsrn.Resource):
    title = jsrn.StringField()
    authors = jsrn.ArrayOf(Author)
    publisher = jsrn.ObjectAs(Publisher)
    genre = jsrn.StringField()
    num_pages = jsrn.IntegerField()
>>> b = Book(
        title="Consider Phlebas",
        genre="Space Opera",
        publisher=Publisher(name="Macmillan"),
        num_pages=471
    )
>>> b.authors.append(Author(name="Iain M. Banks"))
>>> jsrn.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"
}