Models for conversion and validation of rich data structures.
Project description
stereotype
Stereotype is a performance-focused Python 3.8+ library for providing a structure for your data and validating it. The models allow fast & easy conversion between primitive data and well-typed Python classes.
Stereotype is heavily influenced by the beauty of dataclasses and versatility of Schematics, while having much better performance - both in terms of CPU usage and memory footprint. While it wasn't an influence, it is somewhat similar to Pydantic, but also beats it in benchmarks and provides easier validation.
Stereotype supports Python 3.8 and above (future support for older versions of Python is highly unlikely) and has 100% test coverage.
Features
- Fields
- All JSON atomic types -
bool
,int
,float
,str
,Optional[*]
- Compound fields -
List[*]
of any type or aDict[*, *]
of atomic types to any type - Model nesting -
Model
subclass fields, including recursive definitions - Dynamic model fields -
Model
subclass fields resolved using a stringtype
key - Free-form fields using
Any
- Calculated
serializable
fields - aproperty
present also in serialized data - Schematics compatibility field, custom fields can be defined
- All JSON atomic types -
- Validation
- Basic built-in validation helpers for most fields
- Custom field validator callbacks
- Custom
Model
instance validation methods - Validation separate from conversion, multiple validation errors reported with paths
- Conversion & serialization
- Optional field defaults using atomic values or callables
- Renaming or disabling fields for purposes of input/output/both
- Optional hiding of
None
values from output - Serialization roles using field blacklists or whitelists, with inheritance or overriding
Documentation
Full documentation of stereotype
Brief usage example
from typing import Optional, List
from stereotype import Model, StrField, FloatField
class Movie(Model):
name: str
genre: str = StrField(choices=("Comedy", "Action", "Family", "Drama"))
ratings: Optional[float] = FloatField(min_value=1, max_value=10, default=None)
cast: List[CastMember] = []
class CastMember(Model):
name: str
movie = Movie({"name": "Monty Python and the Holy Grail", "genre": "Comedy", "ratings": 8.2})
movie.validate()
movie.cast.append(CastMember({"name": "John Cleese"}))
print(movie.serialize())
See the Tutorial for more examples with detailed explanations.
Issues & contributing
Please see the Contribution guide
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 stereotype-1.5.2.tar.gz
.
File metadata
- Download URL: stereotype-1.5.2.tar.gz
- Upload date:
- Size: 40.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 14b77de12f9df8f7c8b02d464c3b500a574357fdb7f16cc204af47cb622fd0ee |
|
MD5 | cbd040aa37c077f65670074311714b36 |
|
BLAKE2b-256 | 2920e973fbc6e96132cf2733e63cf17517280b0a1107224c611e6b8da63fc466 |
File details
Details for the file stereotype-1.5.2-py3-none-any.whl
.
File metadata
- Download URL: stereotype-1.5.2-py3-none-any.whl
- Upload date:
- Size: 30.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 86e45697a126c68065add8b59c99b102fa21c3331041b704d35f274816cd4d9e |
|
MD5 | e3e919ff8dca35ae75f7b0a1d42601ec |
|
BLAKE2b-256 | 145f229b1dfa8f719d9ae644b1fba04ef9ac7251960470c9bad40216cb462deb |