Metadata-Version: 2.1
Name: strainer-2020
Version: 1.4.0
Summary: Fast functional serializers
Home-page: http://github.com/zgoda/strainer
Author: Alex Kessinger
Author-email: voidfiles@gmail.com
Maintainer: Jarek Zgoda
Maintainer-email: jarek.zgoda@gmail.com
License: Apache 2.0
Description: Strainer-2020: Fast Functional Serializers
        ==========================================
        
        Strainer-2020 is a different take on serialization and validation in python. It utilizes a functional style over classes.
        
        Strainer-2020 officially supports Python 3.6 and newer, and runs great on PyPy.
        
        This is a fork of original Alex Kessinger `pystrainer <https://github.com/voidfiles/strainer>`_ library with improvements that changed operation but not the usage paradigm. I'm trying to keep his commitment to efficiency.
        
        Features
        --------
        
        - Functional
        - Complex Python object serialization
        - Data deserialization into simple Python structures
        - Data validation
        
        Changes
        -------
        
        - serialization is done by data serializers defined for fields
        - validators perform data validation only
        - basic field types have simplified interface functions tthat wrap generic ``field()`` function
        - datetime/time serialization and deserialization preserves timezone information or lack of it; naive datetimes/times are serialized as naive and then deserialized as naive too
        
        Serialization Example
        ---------------------
        
        .. code-block:: python
        
            import datetime
            from strainer import (serializer, field, child,
                                  formatters, validators,
                                  ValidationException, fields)
        
            artist_serializer = serializer(
                field('name', validators=[validators.required()])
            )
        
            album_schema = serializer(
                field('title', validators=[validators.required()]),
                fields.date('release_date', required=True),
                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
        
        .. code-block:: python
        
            >>> album_schema.serialize(album)
            {'artist': {'name': 'David Bowie'},
             'release_date': '1971-12-17',
             'title': 'Hunky Dory'}
            >>> album_schema.deserialize(album_schema.serialize(album))
            {'artist': {'name': 'David Bowie'},
             'release_date': datetime.date(1971, 12, 17),
             '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 <https://marshmallow.readthedocs.io/en/latest/>`_ and tweaked.
        
        Installation
        ------------
        
        To install Strainer-2020, simply:
        
        .. code-block:: bash
        
            $ pip install strainer-2020
            ✨🍰✨
        
        Satisfaction, guaranteed.
        
        
        .. :changelog:
        
        Release History
        ---------------
        
        1.4.0 (2020)
        ++++++++++++
        
        - infrastructure refresh
        - separate operation of validators and serializers
        - change to datetime serialization that preserves timezone information or lack of it
        - drop Python 2 support, limit support to modern Python 3 only
        
        
        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
        
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Development Status :: 5 - Production/Stable
Requires-Python: ~=3.6
Description-Content-Type: text/x-rst
