Odin
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.10+ 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: odin.Url | None
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"
}
Metadata
Release files for odin 2.11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| odin-2.11.tar.gz | 109.9 kB | Without provenance | Details for odin-2.11.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| odin-2.11-py3-none-any.whl | Python 3 | none | any | Details for odin-2.11-py3-none-any.whl |
Total release size: 203.5 kB
Release files / odin-2.11.tar.gz
| Download URL | odin-2.11.tar.gz |
|---|---|
| Size | 109.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
283d6fd8b49775b59873d65dbfae9ae0e31a81e9e7553d8faecc06d60f321176
|
|
BLAKE2b-256 checksum How to use checksums |
52fc2701ed79061856e8ee1d0cfc1da000b4272c7aa0d79953b62fa4579217f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / odin-2.11-py3-none-any.whl
| Download URL | odin-2.11-py3-none-any.whl |
|---|---|
| Size | 93.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4155f984a293b859d7bc252e7ac8ea93647d8b10c1603d6d090acf9865e5bd8d
|
|
BLAKE2b-256 checksum How to use checksums |
7c28eac232ee44fba1959635307b76b171b3871105b89b9d5e81cde0c39a0a2b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Security for odin 2.11
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.