Yet another serialization library on top of dataclasses, inspired by serde-rs.
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.16.0...v0.16.1
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.15.0...v0.16.0
is_bearable
to isinstance
by @rtbs-dev in https://github.com/yukinarit/pyserde/pull/485
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.14.2...v0.15.0
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.14.1...v0.14.2
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.14.0...v0.14.1
pyserde's strict type check system is overhauled by using beartype - O(1) runtime type checker. all pyserde classes now implicitly implement beartype
decorator by default. Passing wrong type of values in constructor raises beartype's validation error.
@serde
class Foo:
s: str
If you call Foo
with wrong type of object, beartype validation error is raised.
>>> foo = Foo(10)
beartype.roar.BeartypeCallHintParamViolation: Method __main__.Foo.__init__()
parameter s=10 violates type hint <class 'str'>, as int 10 not instance of str.
If you deserialize with wrong value, serde error is raised.
>>> print(from_json(Foo, '{"s": 10}'))
serde.compat.SerdeError: Method __main__.Foo.__init__()
parameter s=10 violates type hint <class 'str'>, as int 10 not instance of str.
If you want to disable type check, set either serde.disabled
or serde.coerce
in type_check
class attribute.
from serde import serde, disabled
@serde(type_check=disabled)
class Foo:
s: str
See https://yukinarit.github.io/pyserde/guide/en/type-check.html for more information.
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.13.2...v0.14.0
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.13.1...v0.13.2
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.13.0...v0.13.1
New custom class (de)serializer allows to extend pyserde to support third party types in a neat and robust way. Also custom global (de)serializer is a game changer to allow sharing and reusing custom serializers across different python projects. See custom class serializer and custom global serializer for more information.
e.g. Implementing serializer for datetime
and int
class Serializer:
# Custom serializer for "datetime"
@overload
def serialize(self, value: datetime) -> str:
return value.strftime("%d/%m/%y")
# Custom serializer for "int"
@overload
def serialize(self, value: int) -> Any:
return str(value)
....
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.12.7...v0.13.0
skip_if
causing serialization of a recursive type to be O(2**n)
instead of O(n)
by @gschaffner in https://github.com/yukinarit/pyserde/pull/452
Full Changelog: https://github.com/yukinarit/pyserde/compare/v0.12.6...v0.12.7