From f3a45b732cb40eba025c7b0b522fe36f18c85e8c Mon Sep 17 00:00:00 2001 From: Rami Chowdhury Date: Mon, 9 Dec 2024 23:02:24 -0500 Subject: [PATCH 1/3] Add test to catch bug --- tests/test_registry.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/test_registry.py b/tests/test_registry.py index b8c875f..77ee7d7 100644 --- a/tests/test_registry.py +++ b/tests/test_registry.py @@ -58,3 +58,20 @@ def test_register_object_field_and_get_for_graphene_field(): field = r.get_object_field_for_graphene_field(GraphFoo, "name") assert field is not None assert field.annotation == str + + +def test_register_object_field_nested_model(): + """https://github.com/graphql-python/graphene-pydantic/issues/104""" + + class A(BaseModel): + x: str | None = None + y: list["A"] | None = None + + class P_A(PydanticInputObjectType): + class Meta: + model = A + + try: + P_A.resolve_placeholders() + except TypeError as e: + assert False, f"'10 / 5' raised an exception: {e}" From 4183d7bef18f58f2dba483374de137e004775caf Mon Sep 17 00:00:00 2001 From: Rami Chowdhury Date: Mon, 9 Dec 2024 23:02:32 -0500 Subject: [PATCH 2/3] Remove argument --- graphene_pydantic/inputobjecttype.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/graphene_pydantic/inputobjecttype.py b/graphene_pydantic/inputobjecttype.py index 95f444d..08e4960 100644 --- a/graphene_pydantic/inputobjecttype.py +++ b/graphene_pydantic/inputobjecttype.py @@ -80,8 +80,8 @@ def __init_subclass_with_meta__( _meta=None, **options, ): - assert model and issubclass( - model, pydantic.BaseModel + assert ( + model and issubclass(model, pydantic.BaseModel) ), f'You need to pass a valid Pydantic model in {cls.__name__}.Meta, received "{model}"' assert isinstance( @@ -149,8 +149,6 @@ def resolve_placeholders(cls): model=target_type.model, ) fields_to_update[name] = graphene_field - meta.registry.register_object_field( - cls, name, pydantic_field, model=target_type.model - ) + meta.registry.register_object_field(cls, name, pydantic_field) # update the graphene side of things meta.fields.update(fields_to_update) From 2bf7184b0b9ada8542c19c5fa654c122161ddbad Mon Sep 17 00:00:00 2001 From: Rami Chowdhury Date: Mon, 9 Dec 2024 23:49:50 -0500 Subject: [PATCH 3/3] Lint --- graphene_pydantic/inputobjecttype.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphene_pydantic/inputobjecttype.py b/graphene_pydantic/inputobjecttype.py index 08e4960..c7d8a5e 100644 --- a/graphene_pydantic/inputobjecttype.py +++ b/graphene_pydantic/inputobjecttype.py @@ -80,8 +80,8 @@ def __init_subclass_with_meta__( _meta=None, **options, ): - assert ( - model and issubclass(model, pydantic.BaseModel) + assert model and issubclass( + model, pydantic.BaseModel ), f'You need to pass a valid Pydantic model in {cls.__name__}.Meta, received "{model}"' assert isinstance(