From 21e18ae14cf3aef019ba837dca17da9031db65ef Mon Sep 17 00:00:00 2001 From: Sviatoslav Abakumov Date: Thu, 27 Nov 2025 11:28:13 +0400 Subject: [PATCH 1/2] Add test --- graphene/types/tests/test_inputobjecttype.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/graphene/types/tests/test_inputobjecttype.py b/graphene/types/tests/test_inputobjecttype.py index 0d7bcf80..664ecd12 100644 --- a/graphene/types/tests/test_inputobjecttype.py +++ b/graphene/types/tests/test_inputobjecttype.py @@ -1,9 +1,10 @@ from graphql import Undefined +import pytest from ..argument import Argument from ..field import Field from ..inputfield import InputField -from ..inputobjecttype import InputObjectType +from ..inputobjecttype import InputObjectType, InputObjectTypeContainer from ..objecttype import ObjectType from ..scalars import Boolean, String from ..schema import Schema @@ -167,3 +168,16 @@ def resolve_undefined_optionals_work(self, info, input: TestUndefinedInput): assert not result.errors assert result.data == {"undefinedOptionalsWork": True} + + +def test_inputobjecttype_explicit_container(): + class MyInputObjectType(InputObjectType): + class Meta: + container = InputObjectTypeContainer + + first_name = String() + last_name = String() + + container = MyInputObjectType._meta.container(first_name="John") + assert container.first_name == "John" + assert container.last_name is None From 8c97ce12f0048991f91f2c859a65f34a3ec1d0a9 Mon Sep 17 00:00:00 2001 From: Sviatoslav Abakumov Date: Thu, 27 Nov 2025 11:28:23 +0400 Subject: [PATCH 2/2] Add fix --- graphene/types/inputobjecttype.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/graphene/types/inputobjecttype.py b/graphene/types/inputobjecttype.py index 257f48be..8171ca46 100644 --- a/graphene/types/inputobjecttype.py +++ b/graphene/types/inputobjecttype.py @@ -7,12 +7,12 @@ # For static type checking with type checker if TYPE_CHECKING: - from typing import Dict, Callable # NOQA + from typing import Dict, Callable, Type # NOQA class InputObjectTypeOptions(BaseOptions): fields = None # type: Dict[str, InputField] - container = None # type: InputObjectTypeContainer + container = None # type: Type[InputObjectTypeContainer] # Currently in Graphene, we get a `None` whenever we access an (optional) field that was not set in an InputObjectType @@ -103,8 +103,8 @@ def __init_subclass_with_meta__(cls, container=None, _meta=None, **options): else: _meta.fields = fields if container is None: - container = type(cls.__name__, (InputObjectTypeContainer, cls), {}) - _meta.container = container + container = InputObjectTypeContainer + _meta.container = type(cls.__name__, (container, cls), {}) # type: ignore super(InputObjectType, cls).__init_subclass_with_meta__(_meta=_meta, **options) @classmethod