graphene/graphene/types/inputobjecttype.py
2017-07-11 20:59:44 -07:00

44 lines
1.2 KiB
Python

from collections import OrderedDict
from .inputfield import InputField
from .unmountedtype import UnmountedType
from .utils import yank_fields_from_attrs
from .base import BaseOptions, BaseType
class InputObjectTypeOptions(BaseOptions):
fields = None # type: Dict[str, Field]
class InputObjectType(UnmountedType, BaseType):
'''
Input Object Type Definition
An input object defines a structured collection of fields which may be
supplied to a field argument.
Using `NonNull` will ensure that a value must be provided by the query
'''
@classmethod
def __init_subclass_with_meta__(cls, **options):
_meta = InputObjectTypeOptions(cls)
fields = OrderedDict()
for base in reversed(cls.__mro__):
fields.update(
yank_fields_from_attrs(base.__dict__, _as=InputField)
)
_meta.fields = fields
super(InputObjectType, cls).__init_subclass_with_meta__(_meta=_meta, **options)
@classmethod
def get_type(cls):
'''
This function is called when the unmounted type (InputObjectType instance)
is mounted (as a Field, InputField or Argument)
'''
return cls