diff --git a/graphene/types/argument.py b/graphene/types/argument.py index c884b017..cb28ee5e 100644 --- a/graphene/types/argument.py +++ b/graphene/types/argument.py @@ -4,6 +4,7 @@ from itertools import chain from .mountedtype import MountedType from .structures import NonNull from .dynamic import Dynamic +from .utils import get_type class Argument(MountedType): @@ -15,10 +16,14 @@ class Argument(MountedType): type = NonNull(type) self.name = name - self.type = type + self._type = type self.default_value = default_value self.description = description + @property + def type(self): + return get_type(self._type) + def __eq__(self, other): return isinstance(other, Argument) and ( self.name == other.name, diff --git a/graphene/types/tests/test_argument.py b/graphene/types/tests/test_argument.py index b4cc3d58..e485c01b 100644 --- a/graphene/types/tests/test_argument.py +++ b/graphene/types/tests/test_argument.py @@ -1,4 +1,5 @@ import pytest +from functools import partial from ..argument import Argument, to_arguments from ..field import Field @@ -48,7 +49,7 @@ def test_to_arguments_raises_if_field(): with pytest.raises(ValueError) as exc_info: to_arguments(args) - + assert str(exc_info.value) == 'Expected arg_string to be Argument, but received Field. Try using Argument(String).' @@ -59,5 +60,17 @@ def test_to_arguments_raises_if_inputfield(): with pytest.raises(ValueError) as exc_info: to_arguments(args) - + assert str(exc_info.value) == 'Expected arg_string to be Argument, but received InputField. Try using Argument(String).' + + +def test_argument_with_lazy_type(): + MyType = object() + arg = Argument(lambda: MyType) + assert arg.type == MyType + + +def test_argument_with_lazy_partial_type(): + MyType = object() + arg = Argument(partial(lambda: MyType)) + assert arg.type == MyType \ No newline at end of file