Skip to content

Repository files navigation

Strainer: Fast Functional Serializers

https://readthedocs.org/projects/strainer/badge/?version=latesthttps://travis-ci.org/voidfiles/strainer.svg?branch=master

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

importdatetimefromstrainerimport (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()])
)
classArtist(object):
def__init__(self, name):
self.name=nameclassAlbum(object):
def__init__(self, title, release_date, artist):
self.title=titleself.release_date=release_dateself.artist=artistbowie=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)
>>>delinput['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.

About

Functional serializers for python

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages