Extensions¶
- Extensions are available to handle some non-native data types:
dateutil
key_mapping
numpy
attrs
Install using the pip extensions mechanism.
>>> from dataclasses_serialization.mapper.json_mapper import JsonMapper
Dateutil¶
Support for mapping relativedelta fields to and from milliseconds. Example usage:
>>> from dataclasses_serialization.extensions.dateutil_helpers import (dateutil_serializers,
... dateutil_deserializers)
>>> from dateutil.relativedelta import relativedelta
>>> mapper = (JsonMapper()
... .register_serializers(dateutil_serializers)
... .register_deserializers(dateutil_deserializers)
... )
>>> mapper.serialize(relativedelta(days=4, minutes=5))
345900000
>>> mapper.deserialize(relativedelta, 345900000)
relativedelta(days=+4, minutes=+5)
Numpy¶
Support for mapping some numpy types. Example usage:
>>> from dataclasses_serialization.extensions.numpy_helpers import (numpy_serializers,
... numpy_deserializers)
>>> import numpy
>>> mapper = (JsonMapper()
... .register_serializers(numpy_serializers)
... .register_deserializers(numpy_deserializers)
... )
>>> mapper.serialize(numpy.array([[1,2,3],[4,5,6]]))
[[1, 2, 3], [4, 5, 6]]
>>> mapper.deserialize(numpy.ndarray, [[1,2,3],[4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
attrs¶
Support for mapping attrs classes which have type hints.
>>> from dataclasses_serialization.extensions.attrs_helpers import attrs_serializers, attrs_deserializers
>>> from dataclasses_serialization.mapper.json_mapper import JsonMapper
Assumeing an attrs supported class is defined:
>>> from typing import Dict
>>> from attr import define
>>> @define
... class SampleAttrs:
... number: int
... name: str
... lookup: Dict[str, int]
Define a mapper with attrs support:
>>> mapper = (JsonMapper()
... .register_serializers(attrs_serializers)
... .register_deserializers(attrs_deserializers)
... )
An instance can be serialized:
>>> item = SampleAttrs(3, 'a', {'b': 2})
>>> mapper.serialize(item)
{'number': 3, 'name': 'a', 'lookup': {'b': 2}}
And deserialized:
>>> item = {'number': 3, 'name': 'a', 'lookup': {'b': 2}}
>>> mapper.deserialize(SampleAttrs, item)
SampleAttrs(number=3, name='a', lookup={'b': 2})