Skip to main content

python-docar

python-docar gives an declarative syntax for defining messages passed between client and server applications. By moving the focus of web applications to the documents exchanged it gives you the possibility to implement document oriented architectures. In this way you can map documents (messages) to resources identified by an URI. This is helpful for applications that implement a RESTful API. In the context of frameworks like Django, docar serves as a supporting library.

On the server side those documents can be mapped to an underlying model store. At this time python-docar supports a Django ORM backend and a HTTP backend. Other model mappers like Sqlalchemy or a MongoDB backend mappers are possible. Currently a MongoDB backend is in the making.

The same document definitions can be reused on the client side. In the future it will come with a HTTP client that can craft messages and send them right away to the server applications. Those documents can be validated, on the client side as well as on the server side.

At the moment the only messaging format supported is a very simple JSON format. It is planned to provide more dialects (like XML) or the possibility to override the built-in serializers.

For the full documentation, either build it yourself or visit the online documentation at readthedocs: http://readthedocs.org/docs/python-docar/

Report any issues on the issue tracker of github. For any questions, send me a mail at crito[AT]30loops.net.

python-docar is influenced by roar.

Example

The following code is a simplified example of how to use python-docar. We start using the Django backend:

# First declare your document
from webapp.models import EntryModel, AuthorModel
from docar import Document, Collection, fields

class Author(Document):
    name = fields.StringField()

    class Meta:
        backend_type = 'django'
        model = AuthorModel
        identifier = 'name'

class BlogEntry(Document):
    id = fields.NumberField()
    title = fields.StringField()
    body = fields.StringField()
    published = fields.BooleanField(default=False)
    author = fields.ForeignDocument(Author)

    class Meta:
        backend_type = 'django'
        model = EntryModel
        #identifier = 'id'  # The identifier defaults to 'id'

# You can also declare collections of documents
class Blog(Collection):
    document = BlogEntry

You can use those documents in the views of your application:

from webapp.documents import Author, BlogEntry, Blog

entry = BlogEntry({'id': 1})

# Bind the document to a model
entry.fetch()

I can also change attributes of the document and save it back to the model:

entry.title = "20000 Leagues under the sea"
entry.save()  # --> saves to the django model backend

The render method renders the document into a normalized dictionary. Serializers take the normalized output, and transform it into the message format that is needed.:

# render the document as a json string
entry.render()

{
    "id": 1,
    "title": "20000 Leagues under the sea",
    "body": "The whole story about captain Nemo ...",
    "published": True,
    "author": {
        "name": "Jules Vernes",
    }
}

Installation

Clone yourself the latest source from github. Development happens fast, so its good to always go with the latest commit:

$ git clone git://github.com/30loops/python-docar.git
$ cd python-docar
$ sudo python setup.py install

Development

This module comes along with a thorough test suite. Run it the following way:

$ python setup.py nosetests

Documentation

To build the documentation you need sphinx installed:

$ cd docs
$ make html

You find the documentation in docs/_build/html/.

Disclaimer

The use of this software comes without any warranty. It is released under a BSD license. See LICENSE for details.

Release files for docar 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for docar 0.9.1
File Size Uploaded
docar-0.9.1.tar.gz 230.6 kB Details

Release files / docar-0.9.1.tar.gz

Download URL docar-0.9.1.tar.gz
Size 230.6 kB
Tags Source
SHA-256 checksum
How to use checksums
a3bcb09ab316a07e2079126c50f925503e6cd4f40ced93c12a4d2967b0960407
BLAKE2b-256 checksum
How to use checksums
f934b5f0042facbbaef6a01571a52523c752c4d34ebadd095ac9c7dd2e65eea7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.9.1 This release

1 release file

0.9

1 release file

0.5.6

1 release file

0.5.5

1 release file

0.5.4

1 release file

0.5.3

1 release file

0.5.2

1 release file

0.5.1

1 release file

0.5

1 release file

0.4.1

1 release file

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