mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-02 12:44:15 +03:00
Added NodeTypeField
This commit is contained in:
parent
25eca8776a
commit
dd799483b0
|
@ -197,12 +197,10 @@ class FloatField(TypeField):
|
|||
|
||||
|
||||
class ListField(Field):
|
||||
|
||||
def type_wrapper(self, field_type):
|
||||
return GraphQLList(field_type)
|
||||
|
||||
|
||||
class NonNullField(Field):
|
||||
|
||||
def type_wrapper(self, field_type):
|
||||
return GraphQLNonNull(field_type)
|
||||
|
|
|
@ -7,10 +7,11 @@ from graphql_relay.connection.connection import (
|
|||
connectionArgs
|
||||
)
|
||||
from graphql_relay.node.node import (
|
||||
globalIdField
|
||||
globalIdField,
|
||||
fromGlobalId
|
||||
)
|
||||
|
||||
from graphene.core.fields import Field, LazyNativeField
|
||||
from graphene.core.fields import Field, LazyNativeField, LazyField
|
||||
from graphene.utils import cached_property
|
||||
from graphene.utils import memoize
|
||||
|
||||
|
@ -42,13 +43,41 @@ class ConnectionField(Field):
|
|||
|
||||
|
||||
class NodeField(LazyNativeField):
|
||||
def __init__(self, object_type=None, *args, **kwargs):
|
||||
super(NodeField, self).__init__(*args, **kwargs)
|
||||
self.field_object_type = object_type
|
||||
|
||||
def get_field(self, schema):
|
||||
if self.field_object_type:
|
||||
field = NodeTypeField(self.field_object_type)
|
||||
field.contribute_to_class(self.object_type, self.field_name)
|
||||
return field.internal_field(schema)
|
||||
from graphene.relay.types import BaseNode
|
||||
return BaseNode.get_definitions(schema).nodeField
|
||||
|
||||
|
||||
class NodeIDField(LazyNativeField):
|
||||
class NodeTypeField(LazyField):
|
||||
def __init__(self, object_type, *args, **kwargs):
|
||||
super(NodeTypeField, self).__init__(None, *args, **kwargs)
|
||||
self.field_object_type = object_type
|
||||
|
||||
def inner_field(self, schema):
|
||||
from graphene.relay.types import BaseNode
|
||||
node_field = BaseNode.get_definitions(schema).nodeField
|
||||
|
||||
def resolver(instance, args, info):
|
||||
global_id = args.get('id')
|
||||
resolved_global_id = fromGlobalId(global_id)
|
||||
if resolved_global_id.type == self.field_object_type._meta.type_name:
|
||||
return node_field.resolver(instance, args, info)
|
||||
|
||||
args = {a.name: a for a in node_field.args}
|
||||
field = Field(self.field_object_type, id=args['id'], resolve=resolver)
|
||||
field.contribute_to_class(self.object_type, self.field_name)
|
||||
|
||||
return field
|
||||
|
||||
|
||||
class NodeIDField(LazyNativeField):
|
||||
def get_field(self, schema):
|
||||
return globalIdField(self.object_type._meta.type_name)
|
||||
|
|
Loading…
Reference in New Issue
Block a user