| 109 | obj_dict = asdict(obj, dict_factory=dict_class) |
| 110 | |
| 111 | def assert_proper_dict_class(obj, obj_dict): |
| 112 | assert isinstance(obj_dict, dict_class) |
| 113 | |
| 114 | for field in fields(obj.__class__): |
| 115 | field_val = getattr(obj, field.name) |
| 116 | if has(field_val.__class__): |
| 117 | class="cm"># This field holds a class, recurse the assertions. |
| 118 | assert_proper_dict_class(field_val, obj_dict[field.name]) |
| 119 | elif isinstance(field_val, Sequence): |
| 120 | dict_val = obj_dict[field.name] |
| 121 | for item, item_dict in zip(field_val, dict_val): |
| 122 | if has(item.__class__): |
| 123 | assert_proper_dict_class(item, item_dict) |
| 124 | elif isinstance(field_val, Mapping): |
| 125 | class="cm"># This field holds a dictionary. |
| 126 | assert isinstance(obj_dict[field.name], dict_class) |
| 127 | |
| 128 | for key, val in field_val.items(): |
| 129 | if has(val.__class__): |
| 130 | assert_proper_dict_class( |
| 131 | val, obj_dict[field.name][key] |
| 132 | ) |
| 133 | |
| 134 | assert_proper_dict_class(obj, obj_dict) |
| 135 | |