skip to navigation
skip to content

pystrainer 1.3.1

Fast functional serializers

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.


  • Functional
  • Complex Python object serialization
  • Data de-serialization
  • Data Validation
  • Speed

Serialization Example

import datetime
from strainer import (serializer, field, child,
                      formatters, validators,

artist_serializer = serializer(
  field('name', validators=[validators.required()])

album_schema = serializer(
  field('title', validators=[validators.required()]),
        validators=[validators.required(), validators.datetime()],
  child('artist', serializer=artist_serializer, validators=[validators.required()])

class Artist(object):
    def __init__(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(
    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.


To install Strainer, simply:

$ pip install pystrainer

Satisfaction, guaranteed.

Release History


  • refining validators
  • added attr_getter to child, and many


  • Updating docs
  • Making it official


  • Fixing python 3 comptatability issue


  • Removed an errant print statement


  • Fixed a bug with datetime validators


  • 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
File Type Py Version Uploaded on Size
pystrainer-1.3.1.tar.gz (md5) Source 2017-09-14 7KB