Data-structure definition/validation/traversal, mapping and serialisation toolkit for Python
Project description
Odin provides a declarative framework for defining resources (classes) and their relationships, validation of the fields that make up the resources and mapping between objects (either a resource, or other python structures).
Odin also comes with built in serialisation tools for importing and exporting data from resources.
Docs/ Help |
|
Build |
|
Quality |
|
Package |
Highlights
Class based declarative style
Class based annotations style! ✨ new in 2.0
Fields for building composite resources
Field and Resource level validation
Easy extension to support custom fields
Python 3.8+ and PyPy 1 supported
Support for documenting resources with Sphinx
Minimal dependencies
1 certain contrib items are not supported. Pint is not installable with PyPy.
Use cases
Design, document and validate complex (and simple!) data structures
Convert structures to and from different formats such as JSON, YAML, MsgPack, CSV, TOML
Validate API inputs
Define message formats for communications protocols, like an RPC
Map API requests to ORM objects
Quick links
Upcoming features
In development
XML Codec (export only)
Complete documentation coverage
Improvements for CSV Codec (writing, reading multi resource CSV’s)
Requires
Optional
simplejson - Odin will use simplejson if it is available or fallback to the builtin json library
msgpack-python - To enable use of the msgpack codec
pyyaml - To enable use of the YAML codec
toml - To enable use of the TOML codec
Contrib
arrow - Support for Arrow data types.
pint - Support for physical quantities using the Pint library.
Development
pytest - Testing
pytest-cov - Coverage reporting
Example
Definition
import odin
class Author(odin.Resource):
name = odin.StringField()
class Publisher(odin.Resource):
name = odin.StringField()
class Book(odin.Resource):
title = odin.StringField()
authors = odin.ArrayOf(Author)
publisher = odin.DictAs(Publisher)
genre = odin.StringField()
num_pages = odin.IntegerField()
Using Annotations
import odin
class Author(odin.AnnotatedResource):
name: str
class Publisher(odin.AnnotatedResource):
name: str
website: Optional[odin.Url]
class Book(odin.AnnotatedResource):
title: str
authors: List[Author]
publisher: Publisher
genre: str
num_pages: int
Usage:
>>> b = Book( title="Consider Phlebas", genre="Space Opera", publisher=Publisher(name="Macmillan"), num_pages=471 ) >>> b.authors.append(Author(name="Iain M. Banks")) >>> from odin.codecs import json_codec >>> json_codec.dumps(b, indent=4) { "$": "Book", "authors": [ { "$": "Author", "name": "Iain M. Banks" } ], "genre": "Space Opera", "num_pages": 471, "publisher": { "$": "Publisher", "name": "Macmillan" }, "title": "Consider Phlebas" }
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 odin-2.10.tar.gz
.
File metadata
- Download URL: odin-2.10.tar.gz
- Upload date:
- Size: 113.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e94ac2acd3168a25323d80a9ef26220aeaf4d7967ec9b637f9585f2d0b94edf |
|
MD5 | 9efa32324346e11b182d9eebd6496100 |
|
BLAKE2b-256 | 8f4aa177ebb8ee2592466d5223ce3cd5bed8638398ada02f394288c6e0bab547 |
File details
Details for the file odin-2.10-py3-none-any.whl
.
File metadata
- Download URL: odin-2.10-py3-none-any.whl
- Upload date:
- Size: 93.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ae643aaa655805478b22708fd7456b21a62f00104e634ae6dac3a68be872b7a |
|
MD5 | 77cf64577496e531169eb83adf3cb516 |
|
BLAKE2b-256 | 5a101af536c687a49d52200c3f2f5f911194f077b9042aa8dfdb51ad7aab69f4 |