Skip to main content
Hyp
===
JSON-API responses in Python.

About
-----
Hyp is a library implementing the _must_ parts of the [JSON-API](http://jsonapi.org) response specification. This means that you can use Hyp to serialize your models into responses that contain links and linked compound documents. It works really good in combination with your micro web framework of choice, preferably [Flask](http://flask.pocoo.org).

It has built in support for both [Schematics](https://schematics.readthedocs.org/) and [Marshmallow](http://marshmallow.readthedocs.org) in the sense that you can use any of them for serializing your models (or primitives) into JSON that Hyp creates responses from. To add support for more data serialization libraries such as [Colander](http://docs.pylonsproject.org/projects/colander/en/latest/) should be trivial though.

Tutorial
--------
First let's define some serializers for your models:

```python
from marshmallow import Serializer, fields


class CommentSerializer(Serializer):
id = fields.Integer()
content = fields.String()


class PersonSerializer(Serializer):
id = fields.Integer()
name = fields.String()


class PostSerializer(Serializer):
id = fields.Integer()
title = fields.String()
```

We can then create our own responders using the `hyp.Responders` class:

```python
from hyp.responder import Responder


class CommentResponder(Responder):
TYPE = 'comment'
SERIALIZER = CommentSerializer


class PersonResponder(Responder):
TYPE = 'person'
SERIALIZER = PersonSerializer


class PostResponder(Responder):
TYPE = 'post'
SERIALIZER = PostSerializer
LINKS = {
'comments': {
'responder': CommentResponder(),
'href': 'http://example.com/comments/{posts.comments}',
},
'author': {
'responder': PersonResponder(),
'href': 'http://example.com/people/{posts.author}',
},
}
```

Finally we can use our responders for creating responses. These responses goes perfectly into any Flask application out there:

```python
post = {
'id': 1,
'title': 'My post',
'comments': [
{'id': 1, 'content': 'A comment'},
{'id': 2, 'content': 'Another comment'},
]
}

json = PostResponder.respond(post, linked={'comments': post['comments']})

```

The `json` variable will now contain some freshly squeezed JSON ready for sending back to the client:

```json
{
"posts": [
{
"id": 1,
"title": "My title",
"links": {
"comments": [1, 2]
}
}
],
"linked": {
"comments": [
{
"id": 1,
"content": "My comment"
},
{
"id": 2,
"content": "Another comment"
}
]
},
"links": {
"posts.comments": {
"type": "comments",
"href": "http://example.com/comments/{posts.comments}"
}
}
}
```

If you'd like to get have dict returned instead of json, for example if you want to use flask's [jsonify](http://flask.pocoo.org/docs/api/#flask.json.jsonify), then you can use the `build` method instead like so:

```python
post = {
'id': 1,
'title': 'My post',
'comments': [
{'id': 1, 'content': 'A comment'},
{'id': 2, 'content': 'Another comment'},
]
}

response = PostResponder.build(post, linked={'comments': post['comments']})
json = flask.jsonify(response)
```

Release files for hyp 1.0.0

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

Source distribution (sdist)

Source distribution for hyp 1.0.0
File Size Uploaded
hyp-1.0.0.tar.gz 3.6 kB Details

Release files / hyp-1.0.0.tar.gz

Download URL hyp-1.0.0.tar.gz
Size 3.6 kB
Tags Source
SHA-256 checksum
How to use checksums
4bdf1f3af1bb20ca621cc5fa21b79c048f5aad39280c14c81d2402efebad54aa
BLAKE2b-256 checksum
How to use checksums
e6a4c279db9d2c1ba8fa04e7dd612d3cdb16bfa6161976549856e819a71dd33d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.0.0 This release

1 release file

0.6.0

1 release file

0.5.0

1 release file

0.4.0

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

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