mirror of
https://github.com/graphql-python/graphene.git
synced 2025-05-09 02:43:40 +03:00
Simplified InputObjectType
This commit is contained in:
parent
5ee6e2b8e7
commit
d8b42dd1ca
|
@ -1,45 +1,17 @@
|
||||||
import six
|
from collections import OrderedDict
|
||||||
|
|
||||||
from ..utils.is_base_type import is_base_type
|
|
||||||
from ..utils.trim_docstring import trim_docstring
|
|
||||||
from .abstracttype import AbstractTypeMeta
|
|
||||||
from .inputfield import InputField
|
from .inputfield import InputField
|
||||||
from .options import Options
|
|
||||||
from .unmountedtype import UnmountedType
|
from .unmountedtype import UnmountedType
|
||||||
from .utils import get_base_fields, merge, yank_fields_from_attrs
|
from .utils import yank_fields_from_attrs
|
||||||
|
|
||||||
|
from .base import BaseOptions, BaseType
|
||||||
|
|
||||||
|
|
||||||
class InputObjectTypeMeta(AbstractTypeMeta):
|
class InputObjectTypeOptions(BaseOptions):
|
||||||
|
fields = None # type: Dict[str, Field]
|
||||||
def __new__(cls, name, bases, attrs):
|
|
||||||
# Also ensure initialization is only performed for subclasses of
|
|
||||||
# InputObjectType
|
|
||||||
if not is_base_type(bases, InputObjectTypeMeta):
|
|
||||||
return type.__new__(cls, name, bases, attrs)
|
|
||||||
|
|
||||||
options = Options(
|
|
||||||
attrs.pop('Meta', None),
|
|
||||||
name=name,
|
|
||||||
description=trim_docstring(attrs.get('__doc__')),
|
|
||||||
local_fields=None,
|
|
||||||
)
|
|
||||||
|
|
||||||
options.base_fields = get_base_fields(bases, _as=InputField)
|
|
||||||
|
|
||||||
if not options.local_fields:
|
|
||||||
options.local_fields = yank_fields_from_attrs(attrs, _as=InputField)
|
|
||||||
|
|
||||||
options.fields = merge(
|
|
||||||
options.base_fields,
|
|
||||||
options.local_fields
|
|
||||||
)
|
|
||||||
return type.__new__(cls, name, bases, dict(attrs, _meta=options))
|
|
||||||
|
|
||||||
def __str__(cls): # noqa: N802
|
|
||||||
return cls._meta.name
|
|
||||||
|
|
||||||
|
|
||||||
class InputObjectType(six.with_metaclass(InputObjectTypeMeta, UnmountedType)):
|
class InputObjectType(UnmountedType, BaseType):
|
||||||
'''
|
'''
|
||||||
Input Object Type Definition
|
Input Object Type Definition
|
||||||
|
|
||||||
|
@ -49,6 +21,19 @@ class InputObjectType(six.with_metaclass(InputObjectTypeMeta, UnmountedType)):
|
||||||
Using `NonNull` will ensure that a value must be provided by the query
|
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
|
@classmethod
|
||||||
def get_type(cls):
|
def get_type(cls):
|
||||||
'''
|
'''
|
||||||
|
|
Loading…
Reference in New Issue
Block a user