mirror of
https://github.com/graphql-python/graphene.git
synced 2024-11-27 03:53:56 +03:00
Improved unmounted type logic
This commit is contained in:
parent
73d37a1bb2
commit
0f279abecf
|
@ -57,24 +57,3 @@ class UnmountedType(OrderedType):
|
||||||
_creation_counter=self.creation_counter,
|
_creation_counter=self.creation_counter,
|
||||||
**self.kwargs
|
**self.kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
def as_mounted(self, cls):
|
|
||||||
'''
|
|
||||||
Mount the UnmountedType dinamically as Field or InputField
|
|
||||||
depending on the class is mounted in.
|
|
||||||
|
|
||||||
ObjectType -> Field
|
|
||||||
InputObjectType -> InputField
|
|
||||||
'''
|
|
||||||
from .inputobjecttype import InputObjectType
|
|
||||||
from .objecttype import ObjectType
|
|
||||||
from .interface import Interface
|
|
||||||
|
|
||||||
if issubclass(cls, (ObjectType, Interface)):
|
|
||||||
inner = self.as_field()
|
|
||||||
elif issubclass(cls, (InputObjectType)):
|
|
||||||
inner = self.as_inputfield()
|
|
||||||
else:
|
|
||||||
raise Exception('TypedProxy "{}" cannot be mounted in {}'.format(self.get_type(), cls))
|
|
||||||
|
|
||||||
return inner
|
|
||||||
|
|
|
@ -6,14 +6,32 @@ from .get_graphql_type import get_graphql_type
|
||||||
from .is_graphene_type import is_graphene_type
|
from .is_graphene_type import is_graphene_type
|
||||||
|
|
||||||
|
|
||||||
|
def unmounted_field_in_type(unmounted_field, type):
|
||||||
|
'''
|
||||||
|
Mount the UnmountedType dinamically as Field or InputField
|
||||||
|
depending on where mounted in.
|
||||||
|
|
||||||
|
ObjectType -> Field
|
||||||
|
InputObjectType -> InputField
|
||||||
|
'''
|
||||||
|
from ..types.inputobjecttype import InputObjectType
|
||||||
|
from ..types.objecttype import ObjectType
|
||||||
|
from ..types.interface import Interface
|
||||||
|
|
||||||
|
if issubclass(type, (ObjectType, Interface)):
|
||||||
|
return unmounted_field.as_field()
|
||||||
|
elif issubclass(type, (InputObjectType)):
|
||||||
|
return unmounted_field.as_inputfield()
|
||||||
|
|
||||||
|
raise Exception('Unmounted field "{}" cannot be mounted in {}'.format(self.get_type(), type))
|
||||||
|
|
||||||
|
|
||||||
def get_fields_from_attrs(in_type, attrs):
|
def get_fields_from_attrs(in_type, attrs):
|
||||||
for attname, value in list(attrs.items()):
|
for attname, value in list(attrs.items()):
|
||||||
is_field = isinstance(value, (Field, InputField))
|
if isinstance(value, (Field, InputField)):
|
||||||
is_field_proxy = isinstance(value, UnmountedType)
|
yield attname, value
|
||||||
if not (is_field or is_field_proxy):
|
elif isinstance(value, UnmountedType):
|
||||||
continue
|
yield attname, unmounted_field_in_type(value, in_type)
|
||||||
field = value.as_mounted(in_type) if is_field_proxy else value
|
|
||||||
yield attname, field
|
|
||||||
|
|
||||||
|
|
||||||
def get_fields_from_bases_and_types(bases, types):
|
def get_fields_from_bases_and_types(bases, types):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user