JSON API 1.0 (https://jsonapi.org) formatting with marshmallow
Project description
Homepage: http://marshmallow-jsonapi.rtfd.org/
JSON API 1.0 (https://jsonapi.org) formatting with marshmallow.
marshmallow-jsonapi provides a simple way to produce JSON API-compliant data in any Python web framework.
from marshmallow_jsonapi import Schema, fields
class PostSchema(Schema):
id = fields.Str(dump_only=True)
title = fields.Str()
author = fields.HyperlinkRelated(
'/authors/{author_id}',
url_kwargs={'author_id': '<author.id>'},
)
comments = fields.HyperlinkRelated(
'/posts/{post_id}/comments',
url_kwargs={'post_id': '<id>'},
# Include resource linkage
many=True, include_data=True,
type_='comments'
)
class Meta:
type_ = 'posts'
post_schema = PostSchema()
post_schema.dump(post).data
# {
# "data": {
# "id": "1",
# "type": "posts"
# "attributes": {
# "title": "JSON API paints my bikeshed!"
# },
# "relationships": {
# "author": {
# "links": {
# "related": "/authors/9"
# }
# },
# "comments": {
# "links": {
# "related": "/posts/1/comments/"
# }
# "data": [
# {"id": 5, "type": "comments"},
# {"id": 12, "type": "comments"}
# ],
# }
# },
# }
# }
Error formatting
Schema.load and Schema.validate will return JSON API-formatted Error objects.
from marshmallow import validate
from marshmallow_jsonapi import Schema, fields
class AuthorSchema(Schema):
id = fields.Str(dump_only=True)
first_name = fields.Str(required=True)
last_name = fields.Str(required=True)
password = fields.Str(load_only=True, validate=validate.Length(6))
twitter = fields.Str()
class Meta:
type_ = 'people'
schema = AuthorSchema()
schema.validate({'first_name': 'Dan', 'password': 'short'})
# {
# "errors": [
# {
# "detail": "Shorter than minimum length 6.",
# "source": {"pointer": "/data/attributes/password"}
# },
# {
# "detail": "Missing data for required field.",
# "source": {"pointer": "/data/attributes/last_name"}
# }
# ]
# }
Inflection
You can optionally specify a function to transform attribute names. For example, you may decide to follow JSON API’s recommendation to use “dasherized” names.
from marshmallow_jsonapi import Schema, fields
def dasherize(text):
return text.replace('_', '-')
class AuthorSchema(Schema):
id = fields.Str(dump_only=True)
first_name = fields.Str(required=True)
last_name = fields.Str(required=True)
class Meta:
type_ = 'people'
inflect = dasherize
result = AuthorSchema().dump(author)
result.data
# {
# 'data': {
# 'id': '9',
# 'type': 'people',
# 'attributes': {
# 'first-name': 'Dan',
# 'last-name': 'Gebhardt'
# }
# }
# }
Flask integration
Marshmallow-jsonapi includes optional utilities to integrate with Flask.
For example, the HyperlinkRelated field in the marshmallow_jsonapi.flask module allows you to pass an endpoint name instead of a path template.
The above schema could be rewritten in a Flask application like so:
from marshmallow_jsonapi import Schema, fields
from marshmallow_jsonapi.flask import HyperlinkRelated
class PostSchema(Schema):
id = fields.Str(dump_only=True)
title = fields.Str()
author = HyperlinkRelated(
# Flask endpoint name, passed to url_for
endpoint='author_detail',
url_kwargs={'author_id': '<author.id>'},
)
comments = HyperlinkRelated(
endpoint='posts_comments',
url_kwargs={'post_id': '<id>'},
# Include resource linkage
many=True, include_data=True,
type_='comments'
)
class Meta:
type_ = 'posts'
See here for a full example.
Installation
pip install marshmallow-jsonapi
Documentation
Full documentation is available at https://marshmallow-jsonapi.readthedocs.org/.
Requirements
Python >= 2.7 or >= 3.3
Project Links
License
MIT licensed. See the bundled LICENSE file for more details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file marshmallow-jsonapi-0.2.2.tar.gz
.
File metadata
- Download URL: marshmallow-jsonapi-0.2.2.tar.gz
- Upload date:
- Size: 16.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c56f725faa811aa7648ad61d20607b80d5d8cb8aa700b26375c73023feba741 |
|
MD5 | 1fe2497636bd13dc822d43a1df48586a |
|
BLAKE2b-256 | ea8fba117757066849838c57924936622c8b3249e7b90484c5f1061365a94831 |
Provenance
File details
Details for the file marshmallow_jsonapi-0.2.2-py2.py3-none-any.whl
.
File metadata
- Download URL: marshmallow_jsonapi-0.2.2-py2.py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c2a9379972f46835f6482e428b172cc840b3344569e0c3f45c11022a1da29c0d |
|
MD5 | 8b53b1120758eeac812e560ca29a1894 |
|
BLAKE2b-256 | 58f3e0648557bf98a85a2a6481542ef1fec78d7a65c70ae34204e9674065752f |