From 49b065b2ab5f7eec2d63eefce1d0c2e57e594d4b Mon Sep 17 00:00:00 2001 From: Ivan Vozhakov Date: Thu, 29 Dec 2022 08:52:56 +0500 Subject: [PATCH] fix: Parsing of custom root models (#4883) --- pydantic/main.py | 1 + tests/test_parse.py | 1 + 2 files changed, 2 insertions(+) diff --git a/pydantic/main.py b/pydantic/main.py index 16b759f7ce0..361c9669d79 100644 --- a/pydantic/main.py +++ b/pydantic/main.py @@ -508,6 +508,7 @@ def json( def _enforce_dict_if_root(cls, obj: Any) -> Any: if cls.__custom_root_type__ and ( not (isinstance(obj, dict) and obj.keys() == {ROOT_KEY}) + and not (isinstance(obj, BaseModel) and obj.__fields__.keys() == {ROOT_KEY}) or cls.__fields__[ROOT_KEY].shape in MAPPING_LIKE_SHAPES ): return {ROOT_KEY: obj} diff --git a/tests/test_parse.py b/tests/test_parse.py index a0260fba8b8..a7d2287fff1 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -46,6 +46,7 @@ class MyModel(BaseModel): m = MyModel.parse_obj('a') assert m.dict() == {'__root__': 'a'} assert m.__root__ == 'a' + assert MyModel.parse_obj(m) == m def test_parse_root_list():