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

1from dataclasses import ( 

2 fields, 

3 is_dataclass, 

4) 

5from typing import ( 

6 Any, 

7) 

8 

9 

10def dataclass_to_dict(obj: Any) -> Any: 

11 """ 

12 Recursively converts a nested dataclass into a dictionary. 

13 

14 Args: 

15 obj: The dataclass instance to convert. 

16 

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