()
| 168 | |
| 169 | @pytest.mark.filterwarnings('ignore:`parse_obj_as` is deprecated.*:DeprecationWarning') |
| 170 | def test_parse_nested_root_tuple(): |
| 171 | class NestedData(BaseModel): |
| 172 | id: str |
| 173 | |
| 174 | class NestedModel(BaseModel): |
| 175 | root: tuple[int, NestedData] |
| 176 | |
| 177 | @model_validator(mode='before') |
| 178 | @classmethod |
| 179 | def populate_root(cls, values): |
| 180 | return {'root': values} |
| 181 | |
| 182 | @model_serializer(mode='wrap') |
| 183 | def _serialize(self, handler, info): |
| 184 | data = handler(self) |
| 185 | if info.mode == 'json': |
| 186 | return data['root'] |
| 187 | else: |
| 188 | return data |
| 189 | |
| 190 | @classmethod |
| 191 | def model_modify_json_schema(cls, json_schema): |
| 192 | return json_schema['properties']['root'] |
| 193 | |
| 194 | class MyModel(BaseModel): |
| 195 | nested: list[NestedModel] |
| 196 | |
| 197 | data = [0, {'id': 'foo'}] |
| 198 | m = MyModel.model_validate({'nested': [data]}) |
| 199 | assert isinstance(m.nested[0], NestedModel) |
| 200 | assert isinstance(m.nested[0].root[1], NestedData) |
| 201 | |
| 202 | nested = parse_obj_as(NestedModel, data) |
| 203 | assert isinstance(nested, NestedModel) |
| 204 | |
| 205 | |
| 206 | def test_parse_nested_custom_root(): |
nothing calls this directly
no test coverage detected