Skip to main content

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:

>>> 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

  • tinydb_serialization.serializers.DateSerializer: serializes date 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):

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.2.0 (2024-10-05)

  • Include the DateSerializer in this package (see issue #16)

v2.1.1 (2023-07-24)

v2.1.0 (2021-01-23)

  • Include the DateTimeSerializer in this package (see issue #10)

  • Drop Python 3.6 support (as 3.7 is needed for date parsing)

v2.0.0 (2020-05-26)

v1.0.4 (2017-03-27)

  • Don’t modify the original element if it contains a list (see pull request #5)

v1.0.3 (2016-02-11)

  • Handle nested data (nested dicts, lists) properly when serializing/deserializing (see pull request #3)

v1.0.2 (2016-01-04)

v1.0.1 (2015-11-17)

  • Fix installation via pip (see issue #1)

v1.0.0 (2015-09-27)

  • Initial release on PyPI

Metadata

Release files for tinydb-serialization 2.2.0

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

Source distribution (sdist)

Source distribution for tinydb-serialization 2.2.0
File Size Uploaded Provenance
tinydb_serialization-2.2.0.tar.gz 4.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for tinydb-serialization 2.2.0
File Interpreter ABI Platform
tinydb_serialization-2.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 10.6 kB

Release files / tinydb_serialization-2.2.0.tar.gz

Download URL tinydb_serialization-2.2.0.tar.gz
Size 4.9 kB
Tags Source
SHA-256 checksum
How to use checksums
b7e7f2b0cc17350438ba070eeb2f5fcb3a9949c5ff38476379450422de3f935f
BLAKE2b-256 checksum
How to use checksums
87afd6bc960eadee5fb4406eaeceec4b7be6ef82676a5f3cf638fd56ecf39448
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.3 CPython/3.12.6 Linux/6.8.0-1014-azure

Release files / tinydb_serialization-2.2.0-py3-none-any.whl

Download URL tinydb_serialization-2.2.0-py3-none-any.whl
Size 5.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
02edeafd6560b811c8df3e39792a37dee68ac63978659c214eab593316c58253
BLAKE2b-256 checksum
How to use checksums
96cd7e44162c9d3288517b7f19d13932112b6ecef079eec28f8d23997ebbe2c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.3 CPython/3.12.6 Linux/6.8.0-1014-azure

Security for tinydb-serialization 2.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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