tinydb-serialization


Nametinydb-serialization JSON
Version 2.1.1 PyPI version JSON
download
home_page
SummarySerialization for objects that TinyDB otherwise couldn't handle
upload_time2023-07-24 19:22:45
maintainer
docs_urlNone
authorMarkus Siemens
requires_python>=3.8,<4.0
licenseMIT
keywords database nosql
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            tinydb-serialization
^^^^^^^^^^^^^^^^^^^^

|Build Status| |Coverage| |Version|

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

Usage
*****

General Usage
-------------

To use a serializer, create a ``SerializationMiddleware`` instance with
the storage class you want to use and register the serializers you want
to use. Then you pass the middleware instance as the storage to TinyDB:

.. code-block:: python

    >>> from tinydb import TinyDB, Query
    >>> from tinydb.storages import JSONStorage
    >>> from tinydb_serialization import SerializationMiddleware
    >>> from tinydb_serialization.serializers import DateTimeSerializer
    >>>
    >>> from datetime import datetime
    >>>
    >>> serialization = SerializationMiddleware(JSONStorage)
    >>> 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)}]


**Important:** A ``SerializationMiddleware`` instance always wraps a database's storage.
This means that the ``SerializationMiddleware`` instance **cannot** be shared
between multiple ``TinyDB`` instances as they would use the same underlying storage
instance and thus share all data between both instances.

Provided Serializers
--------------------

- ``tinydb_serialization.serializers.DateTimeSerializer``: serializes ``datetime`` objects
  as ISO 8601 formatted strings

Creating Custom Serializers
---------------------------

In this example we implement a serializer for ``datetime`` objects (like the one provided
by this package):

.. 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.isoformat()

        def decode(self, s):
            return datetime.fromisoformat(s)


Changelog
*********

**v2.1.1** (2023-07-24)
-----------------------

- Fix VSCode Pylance type error (see `pull request #14 <https://github.com/msiemens/tinydb-serialization/pull/14>`_)
- Add support for storages that encode as binary strings (see `pull request #17 <https://github.com/msiemens/tinydb-serialization/pull/17>`_)
- Drop Python 3.7 support

**v2.1.0** (2021-01-23)
-----------------------

- Include the ``DateTimeSerializer`` in this package (see `issue #10 <https://github.com/msiemens/tinydb-serialization/pull/10>`_)
- Drop Python 3.6 support (as 3.7 is needed for date parsing)

**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%20CI?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/

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "tinydb-serialization",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8,<4.0",
    "maintainer_email": "",
    "keywords": "database,nosql",
    "author": "Markus Siemens",
    "author_email": "markus@m-siemens.de",
    "download_url": "https://files.pythonhosted.org/packages/8d/7b/e7f075dfa52a27627756e21aae24fbbc80c8a9c5d9d67efeb0c2aabd8551/tinydb_serialization-2.1.1.tar.gz",
    "platform": null,
    "description": "tinydb-serialization\n^^^^^^^^^^^^^^^^^^^^\n\n|Build Status| |Coverage| |Version|\n\n``tinydb-serialization`` provides serialization for objects that TinyDB\notherwise couldn't handle.\n\nUsage\n*****\n\nGeneral Usage\n-------------\n\nTo use a serializer, create a ``SerializationMiddleware`` instance with\nthe storage class you want to use and register the serializers you want\nto use. Then you pass the middleware instance as the storage to TinyDB:\n\n.. code-block:: python\n\n    >>> from tinydb import TinyDB, Query\n    >>> from tinydb.storages import JSONStorage\n    >>> from tinydb_serialization import SerializationMiddleware\n    >>> from tinydb_serialization.serializers import DateTimeSerializer\n    >>>\n    >>> from datetime import datetime\n    >>>\n    >>> serialization = SerializationMiddleware(JSONStorage)\n    >>> serialization.register_serializer(DateTimeSerializer(), 'TinyDate')\n    >>>\n    >>> db = TinyDB('db.json', storage=serialization)\n    >>> db.insert({'date': datetime(2000, 1, 1, 12, 0, 0)})\n    >>> db.all()\n    [{'date': datetime.datetime(2000, 1, 1, 12, 0)}]\n    >>> query = Query()\n    >>> db.insert({'date': datetime(2010, 1, 1, 12, 0, 0)})\n    >>> db.search(query.date > datetime(2005, 1, 1))\n    [{'date': datetime.datetime(2010, 1, 1, 12, 0)}]\n\n\n**Important:** A ``SerializationMiddleware`` instance always wraps a database's storage.\nThis means that the ``SerializationMiddleware`` instance **cannot** be shared\nbetween multiple ``TinyDB`` instances as they would use the same underlying storage\ninstance and thus share all data between both instances.\n\nProvided Serializers\n--------------------\n\n- ``tinydb_serialization.serializers.DateTimeSerializer``: serializes ``datetime`` objects\n  as ISO 8601 formatted strings\n\nCreating Custom Serializers\n---------------------------\n\nIn this example we implement a serializer for ``datetime`` objects (like the one provided\nby this package):\n\n.. code-block:: python\n\n    from datetime import datetime\n    from tinydb_serialization import Serializer\n\n    class DateTimeSerializer(Serializer):\n        OBJ_CLASS = datetime  # The class this serializer handles\n\n        def encode(self, obj):\n            return obj.isoformat()\n\n        def decode(self, s):\n            return datetime.fromisoformat(s)\n\n\nChangelog\n*********\n\n**v2.1.1** (2023-07-24)\n-----------------------\n\n- Fix VSCode Pylance type error (see `pull request #14 <https://github.com/msiemens/tinydb-serialization/pull/14>`_)\n- Add support for storages that encode as binary strings (see `pull request #17 <https://github.com/msiemens/tinydb-serialization/pull/17>`_)\n- Drop Python 3.7 support\n\n**v2.1.0** (2021-01-23)\n-----------------------\n\n- Include the ``DateTimeSerializer`` in this package (see `issue #10 <https://github.com/msiemens/tinydb-serialization/pull/10>`_)\n- Drop Python 3.6 support (as 3.7 is needed for date parsing)\n\n**v2.0.0** (2020-05-26)\n-----------------------\n\n- Add TinyDB v4.0.0 support (see `pull request #9 <https://github.com/msiemens/tinydb-serialization/pull/9>`_)\n\n**v1.0.4** (2017-03-27)\n-----------------------\n\n- Don't modify the original element if it contains a list (see\n  `pull request #5 <https://github.com/msiemens/tinydb-serialization/pull/5>`_)\n\n**v1.0.3** (2016-02-11)\n-----------------------\n\n- Handle nested data (nested dicts, lists) properly when serializing/deserializing (see\n  `pull request #3 <https://github.com/msiemens/tinydb-serialization/pull/3>`_)\n\n**v1.0.2** (2016-01-04)\n-----------------------\n\n- Don't destroy original data when serializing (see\n  `pull request #2 <https://github.com/msiemens/tinydb-serialization/pull/2>`_)\n\n**v1.0.1** (2015-11-17)\n-----------------------\n\n- Fix installation via pip (see `issue #1 <https://github.com/msiemens/tinydb-serialization/issues/1>`_)\n\n**v1.0.0** (2015-09-27)\n-----------------------\n\n- Initial release on PyPI\n\n.. |Build Status| image:: https://img.shields.io/github/workflow/status/msiemens/tinydb-serialization/Python%20CI?style=flat-square\n   :target: https://github.com/msiemens/tinydb-serialization/actions?query=workflow%3A%22Python+CI%22\n.. |Coverage| image:: https://img.shields.io/coveralls/msiemens/tinydb-serialization.svg?style=flat-square\n   :target: https://coveralls.io/r/msiemens/tinydb-serialization\n.. |Version| image:: https://img.shields.io/pypi/v/tinydb-serialization.svg?style=flat-square\n   :target: https://pypi.python.org/pypi/tinydb-serialization/\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Serialization for objects that TinyDB otherwise couldn't handle",
    "version": "2.1.1",
    "project_urls": null,
    "split_keywords": [
        "database",
        "nosql"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7f60c5c714ae8fa91a55befbd7397be5c5455ad90c5e97a6e63f56e7f054d972",
                "md5": "578c1bccaed303059f91055be6e6e4ae",
                "sha256": "95e04564590798a0fdca63fe57f9a4013183448b4aadcba151b6234d1c9b6f28"
            },
            "downloads": -1,
            "filename": "tinydb_serialization-2.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "578c1bccaed303059f91055be6e6e4ae",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8,<4.0",
            "size": 5689,
            "upload_time": "2023-07-24T19:22:44",
            "upload_time_iso_8601": "2023-07-24T19:22:44.316197Z",
            "url": "https://files.pythonhosted.org/packages/7f/60/c5c714ae8fa91a55befbd7397be5c5455ad90c5e97a6e63f56e7f054d972/tinydb_serialization-2.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8d7be7f075dfa52a27627756e21aae24fbbc80c8a9c5d9d67efeb0c2aabd8551",
                "md5": "7ec31a1146d4085faff6087622b8b979",
                "sha256": "3f7a23bd60ef88d4d0ae930c1902bd72d5a970c87c721099b2d726731c8616c1"
            },
            "downloads": -1,
            "filename": "tinydb_serialization-2.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "7ec31a1146d4085faff6087622b8b979",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8,<4.0",
            "size": 4861,
            "upload_time": "2023-07-24T19:22:45",
            "upload_time_iso_8601": "2023-07-24T19:22:45.736232Z",
            "url": "https://files.pythonhosted.org/packages/8d/7b/e7f075dfa52a27627756e21aae24fbbc80c8a9c5d9d67efeb0c2aabd8551/tinydb_serialization-2.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-07-24 19:22:45",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "tinydb-serialization"
}
        
Elapsed time: 0.09917s