Skip to main content

Dougrain is a Python library to help you work with the JSON variant of the Hypertext Application Language (HAL). It uses Python objects to represent the JSON document, so you can use it with whichever JSON library you prefer.

Status

build status

This is a pre-release version. It usually works pretty well, but the API may have breaking changes in minor releases until version 1.0. The HAL specification is still being developed, so Dougrain is unlikely to have a stable API until HAL itself is stable.

Compatibility

JSON HAL drafts 3, 4, and 5. Python 2.7, 3.2, and 3.3.

This version conforms to JSON Hypermedia API Language Internet Draft 5, but it can also work with JSON from Draft 4 and Draft 3. The draft version can be explicitly selected when the document is constructed, but the default behavior is for documents to automatically detect which draft to use.

This version is tested on Python 2.7, including PyPy, Python 3.2, and Python 3.3.

Installation

You’ll probably need to use sudo on the install commands, or run in a virtualenv.

The easiest way to install the current release is to use pip:

$ pip install dougrain

You can install a local copy of the source in the usual way:

$ cd dougrain
$ pip install -r requirements.txt
$ python setup.py install

Example

Document.from_object loads HAL data from a dict:

>>> from dougrain import Document
>>> doc = Document.from_object(
...     {
...         "_embedded": {
...             "r:post": {
...                 "_links": {
...                     "self": {
...                         "href": "/1"
...                     },
...                     "r:site": {
...                         "href": "/"
...                     }
...                 },
...                 "name": "First child"
...             }
...         },
...         "welcome": "Hi there!",
...         "_links": {
...             "curies": [
...                 {
...                     "href": "http://localhost/rels/{rel}",
...                     "name": "r",
...                     "templated": True
...                 }
...             ],
...             "self": {
...                 "href": "/"
...             },
...             "r:post": {
...                 "href": "/1"
...             },
...             "r:tags": {
...                 "href": "/tags"
...             }
...         }
...     },
...     base_uri="http://localhost/")

Document instances provide methods to interrogate the document’s properties, links, and embedded resources.

>>> doc.properties['welcome']
'Hi there!'
>>> doc.links['r:tags'].url()
'http://localhost/tags'
>>> doc.embedded['r:post'].url()
'http://localhost/1'

Link relations can be specified using CURIEs or URI references:

>>> doc.links['r:tags'].url()
'http://localhost/tags'
>>> doc.links['/rels/tags'].url()
'http://localhost/tags'

Builder provides a lightweight API for building HAL resources from scratch. Many of Builder’s methods can be chained:

>>> from dougrain import Builder
>>> new_post = (Builder("/2").set_property('name', "Second Child")
...                          .add_curie('admin', "/adminrels/{rel}")
...                          .add_link('admin:privacy', "/2/privacy"))
>>> import json
>>> print(json.dumps(new_post.as_object(), indent=2))
{
  "_links": {
    "curies": [
      {
        "href": "/adminrels/{rel}",
        "name": "admin",
        "templated": true
      }
    ],
    "self": {
      "href": "/2"
    },
    "admin:privacy": {
      "href": "/2/privacy"
    }
  },
  "name": "Second Child"
}

Builder and Document can be used together. For example, Document.embed will accept a Builder instance:

>>> doc.embed('r:post', new_post)
>>> [post.properties['name'] for post in doc.embedded['/rels/post']]
['First child', 'Second child']

Metadata

Release files for dougrain 0.5.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 dougrain 0.5.1
File Size Uploaded
dougrain-0.5.1.tar.gz 23.7 kB Details

Release files / dougrain-0.5.1.tar.gz

Download URL dougrain-0.5.1.tar.gz
Size 23.7 kB
Tags Source
SHA-256 checksum
How to use checksums
20170c81cd743671ef729399fc59d678c947a83d2aa45855da00f2e1a645e638
BLAKE2b-256 checksum
How to use checksums
ae60fb9caaaf878440d378a31078e80afd50640c437a1d95bbbb987f1a316f78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.5.1 This release

1 release file

0.5

1 release file

0.4

1 release file

0.3

1 release file

0.2

1 release file

0.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