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
- Speed
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.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size pystrainer-1.3.1.tar.gz (7.5 kB) | File type Source | Python version None | Upload date | Hashes View |