No project description provided
A serialization and validation library for python 3 based on the typing module.
Don't put this code on servers. You can, but you probably shouldn't.
When using python's builtin types for schema annotations, the data must be instances of the specified types or the load operation will fail with an exception. Unexpected and missing data will error by default.
Validation errors mirror the structure of the data, provide insight into the values that caused the error, and present meaningful information to help resolve the problem.
The default functionality is fast and lean. The performance degrades gracefully as complex functionality is explicitly opted into by the developer.
Custom data types are created by defining formatter classes, then transfored into types compatible with the builtin typing module.
Python's builtin typing generics can be leveraged to declare complex type unions that know how to automatically handle multiple types using a syntax that is explicit and concise.
pip install marsha
Need to create database model instances from user input and expose them in serialized form?
Creating a schema that is separate from the model is a useful way to declare a "view" and allows defining multiple schemas to control how data is exposed in different contexts.
from my_app.database_models import Artist, Album import marsha from typing import List @marsha.schema(Artist) class ArtistSchema: name: str @marsha.schema(Album) class AlbumSchema: title: str artists: List[Artist] # dict -> Album album = marsha.load(album_data, Album) # Do stuff album.save() # Album -> dict response_data = marsha.dump(album)
Just need to validate some data and convert it to the correct type?
You can automatically register the type annotations of any model as a schema by
import marsha from typing import List @marsha.schema() class Artist(dict): name: str @marsha.schema() class Album(dict): title: str artists: List[Artist] # dict -> dict album = marsha.load(album_data, Album) # Do stuff first_artist = album['artists']
# python >= 3.6 pip install -r dev-requirements.txt
# Quick testing. flake8 pytest # Ensure all statements and branches are covered with tests. pytest --cov=marsha --cov-branch --cov-report html --cov-report term # Ensure documentations changes render correctly. make html