Fast functional serializers
Project description
Strainer is a different take on serialization and validation in python. It utilizes a functional style over classes.
Strainer officially supports Python 2.6–2.7 & 3.4–3.5, and runs great on PyPy.
Features
Functional
Complex Python object serialization
Data de-serialization
Data Validation
Serialization Example
import datetime
from strainer import (serializer, field, child,
formatters, validators,
ValidationException)
artist_serializer = serializer(
field('name', validators=[validators.required()])
)
album_schema = serializer(
field('title', validators=[validators.required()]),
field('release_date',
validators=[validators.required(), validators.datetime()],
formatters=[formatters.format_datetime()]),
child('artist', serializer=artist_serializer, validators=[validators.required()])
)
class Artist(object):
def __init__(self, name):
self.name = name
class Album(object):
def __init__(self, title, release_date, artist):
self.title = title
self.release_date = release_date
self.artist = artist
bowie = Artist(name='David Bowie')
album = Album(
artist=bowie,
title='Hunky Dory',
release_date=datetime.datetime(1971, 12, 17)
)
Now we can serialize, deserialize, and validate data
>>> album_schema.serialize(album)
{'artist': {'name': 'David Bowie'},
'release_date': '1971-12-17T00:00:00',
'title': 'Hunky Dory'}
>>> album_schema.deserialize(album_schema.serialize(album))
{'artist': {'name': 'David Bowie'},
'release_date': datetime.datetime(1971, 12, 17, 0, 0, tzinfo=<iso8601.Utc>),
'title': 'Hunky Dory'}
>>> input = album_schema.serialize(album)
>>> del input['artist']
>>> album_schema.deserialize(input)
ValidationException: {'artist': ['This field is required']}
The example has been borrowed from Marshmallow and tweaked.
Installation
To install Strainer, simply:
$ pip install pystrainer
✨🍰✨
Satisfaction, guaranteed.
Release History
1.0.1
refining validators
added attr_getter to child, and many
1.0.0
Updating docs
Making it official
0.0.9
Fixing python 3 comptatability issue
0.0.8
Removed an errant print statement
0.0.7
Fixed a bug with datetime validators
0.0.6
Fixed a bug with multiple validation, pointing to the correct index
Fixed a bug that applied vlaidation to entire array in multiple instead of elements
Added a dict_field, if source is dict, instead of an object
Added ability to pass validators to child, and many instances applying validation before moving to sub-element
Added tests around catching nested validation errors
Added formatters, so things can be formatted on the way out
Got rid of encoders, not the domain of this project
Everything can be imported from one namespace
Changed the API from to_representation/to_internal to serialize/deserialize
0.0.5 (2016-11-29)
Fleshed out docs
Added datetime validator
Increased speed bu reducing loops
0.0.4 (2016-11-23)
Add some validators
0.0.1 (2016-11-23)
Birth
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
File details
Details for the file pystrainer-1.3.1.tar.gz
.
File metadata
- Download URL: pystrainer-1.3.1.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad4e2882f31fe36c6538ef20fc73213e8df5d666857d9d2b140be492ed044e1f |
|
MD5 | 66a476e10a4fa4b7e7c50b41926024b8 |
|
BLAKE2b-256 | ba6ff43227bb174d7e680375efd1bcd6c1f6365229445522ac4bee5bffed8b45 |