Metadata-Version: 2.1
Name: tinydb-serialization
Version: 2.0.0
Summary: Serialization for objects that TinyDB otherwise couldn't handle
License: MIT
Keywords: database,nosql
Author: Markus Siemens
Author-email: markus@m-siemens.de
Requires-Python: >=3.5,<4.0
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Database
Classifier: Topic :: Database :: Database Engines/Servers
Classifier: Topic :: Utilities
Requires-Dist: tinydb (>=4.0,<5.0)
Description-Content-Type: text/x-rst

tinydb-serialization
^^^^^^^^^^^^^^^^^^^^

|Build Status| |Coverage| |Version|

``tinydb-serialization`` provides serialization for objects that TinyDB
otherwise couldn't handle.

Usage
*****

Creating a Serializer
---------------------

In this example we implement a serializer for ``datetime`` objects:

.. code-block:: python

    from datetime import datetime
    from tinydb_serialization import Serializer

    class DateTimeSerializer(Serializer):
        OBJ_CLASS = datetime  # The class this serializer handles

        def encode(self, obj):
            return obj.strftime('%Y-%m-%dT%H:%M:%S')

        def decode(self, s):
            return datetime.strptime(s, '%Y-%m-%dT%H:%M:%S')

Using a Serializer
------------------

You can use your serializer like this:

.. code-block:: python

    >>> from tinydb import TinyDB
    >>> from tinydb_serialization import SerializationMiddleware
    >>> from tinydb import Query
    >>>
    >>> from datetime import datetime
    >>>
    >>>
    >>> serialization = SerializationMiddleware()
    >>> serialization.register_serializer(DateTimeSerializer(), 'TinyDate')
    >>>
    >>> db = TinyDB('db.json', storage=serialization)
    >>> db.insert({'date': datetime(2000, 1, 1, 12, 0, 0)})
    >>> db.all()
    [{'date': datetime.datetime(2000, 1, 1, 12, 0)}]
    >>> query = Query()
    >>> db.insert({'date': datetime(2010, 1, 1, 12, 0, 0)})
    >>> db.search(query.date > datetime(2005, 1, 1))
    [{'date': datetime.datetime(2010, 1, 1, 12, 0)}]


For a more complexe example that provides better time support, check out `issue #6 <https://github.com/msiemens/tinydb-serialization/issues/6>`_.

Changelog
*********

**v2.0.0** (2020-05-26)
-----------------------

- Add TinyDB v4.0.0 support (see `pull request #9 <https://github.com/msiemens/tinydb-serialization/pull/9>`_)

**v1.0.4** (2017-03-27)
-----------------------

- Don't modify the original element if it contains a list (see
  `pull request #5 <https://github.com/msiemens/tinydb-serialization/pull/5>`_)

**v1.0.3** (2016-02-11)
-----------------------

- Handle nested data (nested dicts, lists) properly when serializing/deserializing (see
  `pull request #3 <https://github.com/msiemens/tinydb-serialization/pull/3>`_)

**v1.0.2** (2016-01-04)
-----------------------

- Don't destroy original data when serializing (see
  `pull request #2 <https://github.com/msiemens/tinydb-serialization/pull/2>`_)

**v1.0.1** (2015-11-17)
-----------------------

- Fix installation via pip (see `issue #1 <https://github.com/msiemens/tinydb-serialization/issues/1>`_)

**v1.0.0** (2015-09-27)
-----------------------

- Initial release on PyPI

.. |Build Status| image:: https://img.shields.io/github/workflow/status/msiemens/tinydb-serialization/Python CI?style=flat-square
   :target: https://github.com/msiemens/tinydb-serialization/actions?query=workflow%3A%22Python+CI%22
.. |Coverage| image:: https://img.shields.io/coveralls/msiemens/tinydb-serialization.svg?style=flat-square
   :target: https://coveralls.io/r/msiemens/tinydb-serialization
.. |Version| image:: https://img.shields.io/pypi/v/tinydb-serialization.svg?style=flat-square
   :target: https://pypi.python.org/pypi/tinydb-serialization/

