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):
|
class ListField(Field):
|
||||||
|
|
||||||
def type_wrapper(self, field_type):
|
def type_wrapper(self, field_type):
|
||||||
return GraphQLList(field_type)
|
return GraphQLList(field_type)
|
||||||
|
|
||||||
|
|
||||||
class NonNullField(Field):
|
class NonNullField(Field):
|
||||||
|
|
||||||
def type_wrapper(self, field_type):
|
def type_wrapper(self, field_type):
|
||||||
return GraphQLNonNull(field_type)
|
return GraphQLNonNull(field_type)
|
||||||
|
|
|
@ -7,10 +7,11 @@ from graphql_relay.connection.connection import (
|
||||||
connectionArgs
|
connectionArgs
|
||||||
)
|
)
|
||||||
from graphql_relay.node.node import (
|
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 cached_property
|
||||||
from graphene.utils import memoize
|
from graphene.utils import memoize
|
||||||
|
|
||||||
|
@ -42,13 +43,41 @@ class ConnectionField(Field):
|
||||||
|
|
||||||
|
|
||||||
class NodeField(LazyNativeField):
|
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):
|
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
|
from graphene.relay.types import BaseNode
|
||||||
return BaseNode.get_definitions(schema).nodeField
|
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):
|
def get_field(self, schema):
|
||||||
return globalIdField(self.object_type._meta.type_name)
|
return globalIdField(self.object_type._meta.type_name)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user