Skip to main content
https://img.shields.io/pypi/v/pystrainer.svg https://readthedocs.org/projects/strainer/badge/?version=latest https://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

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

Metadata

Release files for pystrainer 1.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pystrainer 1.3.1
File Size Uploaded
pystrainer-1.3.1.tar.gz 7.5 kB Details

Release files / pystrainer-1.3.1.tar.gz

Download URL pystrainer-1.3.1.tar.gz
Size 7.5 kB
Tags Source
SHA-256 checksum
How to use checksums
ad4e2882f31fe36c6538ef20fc73213e8df5d666857d9d2b140be492ed044e1f
BLAKE2b-256 checksum
How to use checksums
ba6ff43227bb174d7e680375efd1bcd6c1f6365229445522ac4bee5bffed8b45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.3.1 This release

1 release file

1.3.0

1 release file

1.2.0

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.0.9

1 release file

0.0.8

1 release file

0.0.7

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

1 release file

0.0.2

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page