From d1b69f0d4d9a1dc501beebb329efab33e4c92b58 Mon Sep 17 00:00:00 2001 From: Justin Sexton Date: Tue, 29 Dec 2020 00:25:23 -0600 Subject: [PATCH] Fixed issue causing KeyError to be raised when building schema from multiple `BaseModel` with the same names declared in separate classes (#1912) --- changes/1912-JSextonn.md | 1 + pydantic/schema.py | 2 +- tests/test_schema.py | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 changes/1912-JSextonn.md diff --git a/changes/1912-JSextonn.md b/changes/1912-JSextonn.md new file mode 100644 index 00000000000..5225db4ba25 --- /dev/null +++ b/changes/1912-JSextonn.md @@ -0,0 +1 @@ +Fixed issue causing KeyError to be raised when building schema from multiple `BaseModel` with the same names declared in separate classes. \ No newline at end of file diff --git a/pydantic/schema.py b/pydantic/schema.py index e51d74ce123..c0ca0a41204 100644 --- a/pydantic/schema.py +++ b/pydantic/schema.py @@ -395,7 +395,7 @@ def get_flat_models_from_models(models: Sequence[Type['BaseModel']]) -> TypeMode def get_long_model_name(model: TypeModelOrEnum) -> str: - return f'{model.__module__}__{model.__name__}'.replace('.', '__') + return f'{model.__module__}__{model.__qualname__}'.replace('.', '__') def field_type_schema( diff --git a/tests/test_schema.py b/tests/test_schema.py index ddea9ede3cf..1b517040063 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -2097,3 +2097,19 @@ class Model(BaseModel): 'properties': {'a': {'title': 'A', 'type': 'string'}}, 'required': ['a'], } + + +def test_multiple_nested_model_declarations_do_not_raise_error(): + class ModelOne(BaseModel): + class NestedModel(BaseModel): + a: float + + nested: NestedModel + + class ModelTwo(BaseModel): + class NestedModel(BaseModel): + b: float + + nested: NestedModel + + schema([ModelOne, ModelTwo])