Coverage for src/nos/utils/nested_dataclass_to_dict.py: 100%
14 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-19 11:29 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-19 11:29 +0000
1from dataclasses import (
2 fields,
3 is_dataclass,
4)
5from typing import (
6 Any,
7)
10def dataclass_to_dict(obj: Any) -> Any:
11 """
12 Recursively converts a nested dataclass into a dictionary.
14 Args:
15 obj: The dataclass instance to convert.
17 Returns:
18 A dictionary representation of the dataclass, including nested dataclasses.
19 """
20 if is_dataclass(obj):
21 result = {}
22 for field in fields(obj):
23 value = getattr(obj, field.name)
24 result[field.name] = dataclass_to_dict(value)
25 return result
26 elif isinstance(obj, list):
27 return [dataclass_to_dict(item) for item in obj]
28 elif isinstance(obj, dict):
29 return {key: dataclass_to_dict(value) for key, value in obj.items()}
30 else:
31 return obj