Coverage for tests/unit/json_serialize/serializable_dataclass/test_sdc_defaults.py: 100%
33 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-04 03:33 -0600
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-04 03:33 -0600
1from __future__ import annotations
4from muutils.json_serialize import (
5 JsonSerializer,
6 SerializableDataclass,
7 serializable_dataclass,
8 serializable_field,
9)
10from muutils.json_serialize.util import _FORMAT_KEY
12# pylint: disable=missing-class-docstring
15@serializable_dataclass
16class Config(SerializableDataclass):
17 name: str = serializable_field(default="default_name")
18 save_model: bool = serializable_field(default=True)
19 batch_size: int = serializable_field(default=64)
22def test_sdc_empty():
23 instance = Config()
24 serialized = instance.serialize()
25 assert serialized == {
26 "name": "default_name",
27 "save_model": True,
28 "batch_size": 64,
29 _FORMAT_KEY: "Config(SerializableDataclass)",
30 }
31 recovered = Config.load(serialized)
32 assert recovered == instance
35def test_sdc_strip_format_jser():
36 instance = Config()
37 jser: JsonSerializer = JsonSerializer(write_only_format=True)
38 serialized = jser.json_serialize(instance)
39 assert serialized == {
40 "name": "default_name",
41 "save_model": True,
42 "batch_size": 64,
43 "__write_format__": "Config(SerializableDataclass)",
44 }
45 recovered = Config.load(serialized) # type: ignore[arg-type]
46 assert recovered == instance
49TYPE_MAP: dict[str, type] = {x.__name__: x for x in [int, float, str, bool]}
52@serializable_dataclass
53class ComplicatedConfig(SerializableDataclass):
54 name: str = serializable_field(default="default_name")
55 save_model: bool = serializable_field(default=True)
56 batch_size: int = serializable_field(default=64)
58 some_type: type = serializable_field(
59 default=float,
60 serialization_fn=lambda x: x.__name__,
61 loading_fn=lambda data: TYPE_MAP[data["some_type"]],
62 )
65def test_sdc_empty_complicated():
66 instance = ComplicatedConfig()
67 serialized = instance.serialize()
68 recovered = ComplicatedConfig.load(serialized)
69 assert recovered == instance