Serialization for objects that TinyDB otherwise couldn't handle
Project Description
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:
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:
>>> from tinydb import TinyDB >>> from tinydb.storages import JSONStorage >>> 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)}]
Changelog
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)
- Don’t destroy original data when serializing (see pull request #2)
v1.0.1 (2015-11-17)
- Fix installation via pip (see issue #1)
v1.0.0 (2015-09-27)
- Initial release on PyPI
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size & hash SHA256 hash help | File type | Python version | Upload date |
---|---|---|---|
tinydb-serialization-1.0.4.zip (8.7 kB) Copy SHA256 hash SHA256 | Source | None | Mar 27, 2017 |