mirror of
https://github.com/graphql-python/graphene.git
synced 2025-07-03 20:03:29 +03:00
Making node argument optional for GlobalID.
This commit is contained in:
parent
94d46f7960
commit
513b3e46c3
|
@ -46,7 +46,7 @@ class DjangoConnectionField(ConnectionField):
|
|||
connection.length = _len
|
||||
return connection
|
||||
|
||||
def get_resolver(self, parent_resolver):
|
||||
def get_resolver(self, parent_resolver, _):
|
||||
return partial(self.connection_resolver, parent_resolver, self.type, self.get_manager())
|
||||
|
||||
|
||||
|
|
|
@ -34,6 +34,6 @@ class DjangoFilterConnectionField(DjangoConnectionField):
|
|||
|
||||
return DjangoConnectionField.connection_resolver(resolver, connection, qs, root, args, context, info)
|
||||
|
||||
def get_resolver(self, parent_resolver):
|
||||
def get_resolver(self, parent_resolver, _):
|
||||
return partial(self.connection_resolver, parent_resolver, self.type, self.get_manager(),
|
||||
self.filterset_class, self.filtering_args)
|
||||
|
|
|
@ -33,5 +33,5 @@ class SQLAlchemyConnectionField(ConnectionField):
|
|||
edge_type=connection.Edge,
|
||||
)
|
||||
|
||||
def get_resolver(self, parent_resolver):
|
||||
def get_resolver(self, parent_resolver, _):
|
||||
return partial(self.connection_resolver, parent_resolver, self.type, self.model)
|
||||
|
|
|
@ -133,8 +133,8 @@ class IterableConnectionField(Field):
|
|||
connection.iterable = iterable
|
||||
return connection
|
||||
|
||||
def get_resolver(self, parent_resolver):
|
||||
resolver = super(IterableConnectionField, self).get_resolver(parent_resolver)
|
||||
def get_resolver(self, parent_resolver, _):
|
||||
resolver = super(IterableConnectionField, self).get_resolver(parent_resolver, None)
|
||||
return partial(self.connection_resolver, resolver, self.type)
|
||||
|
||||
ConnectionField = IterableConnectionField
|
||||
|
|
|
@ -35,8 +35,8 @@ def get_default_connection(cls):
|
|||
|
||||
class GlobalID(Field):
|
||||
|
||||
def __init__(self, node, *args, **kwargs):
|
||||
super(GlobalID, self).__init__(ID, *args, **kwargs)
|
||||
def __init__(self, node=None, required=True, *args, **kwargs):
|
||||
super(GlobalID, self).__init__(ID, required=required, *args, **kwargs)
|
||||
self.node = node
|
||||
|
||||
@staticmethod
|
||||
|
@ -44,15 +44,15 @@ class GlobalID(Field):
|
|||
id = parent_resolver(root, args, context, info)
|
||||
return node.to_global_id(info.parent_type.name, id) # root._meta.name
|
||||
|
||||
def get_resolver(self, parent_resolver):
|
||||
return partial(self.id_resolver, parent_resolver, self.node)
|
||||
def get_resolver(self, parent_resolver, parent_type):
|
||||
return partial(self.id_resolver, parent_resolver, self.node or parent_type)
|
||||
|
||||
|
||||
class NodeMeta(InterfaceMeta):
|
||||
|
||||
def __new__(cls, name, bases, attrs):
|
||||
cls = InterfaceMeta.__new__(cls, name, bases, attrs)
|
||||
cls._meta.fields['id'] = GlobalID(cls, required=True, description='The ID of the object.')
|
||||
cls._meta.fields['id'] = GlobalID(cls, description='The ID of the object.')
|
||||
return cls
|
||||
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ from graphql_relay import to_global_id
|
|||
|
||||
from ...types import ObjectType, Schema, String, AbstractType
|
||||
from ..connection import Connection
|
||||
from ..node import Node
|
||||
from ..node import Node, GlobalID
|
||||
|
||||
|
||||
class SharedNodeFields(AbstractType):
|
||||
|
@ -28,6 +28,18 @@ class MyNode(ObjectType):
|
|||
return MyNode(name=str(id))
|
||||
|
||||
|
||||
class MyNodeImplementedId(ObjectType):
|
||||
|
||||
class Meta:
|
||||
interfaces = (Node, )
|
||||
id = GlobalID()
|
||||
name = String()
|
||||
|
||||
@staticmethod
|
||||
def get_node(id, *_):
|
||||
return MyNodeImplementedId(name=str(id) + '!')
|
||||
|
||||
|
||||
class MyOtherNode(SharedNodeFields, ObjectType):
|
||||
extra_field = String()
|
||||
|
||||
|
@ -46,7 +58,7 @@ class RootQuery(ObjectType):
|
|||
first = String()
|
||||
node = Node.Field()
|
||||
|
||||
schema = Schema(query=RootQuery, types=[MyNode, MyOtherNode])
|
||||
schema = Schema(query=RootQuery, types=[MyNode, MyOtherNode, MyNodeImplementedId])
|
||||
|
||||
|
||||
def test_node_good():
|
||||
|
@ -78,6 +90,14 @@ def test_subclassed_node_query():
|
|||
assert executed.data == OrderedDict({'node': OrderedDict([('shared', '1'), ('extraField', 'extra field info.'), ('somethingElse', '----')])})
|
||||
|
||||
|
||||
def test_node_query_implemented_id():
|
||||
executed = schema.execute(
|
||||
'{ node(id:"%s") { ... on MyNodeImplementedId { name } } }' % to_global_id("MyNodeImplementedId", 1)
|
||||
)
|
||||
assert not executed.errors
|
||||
assert executed.data == {'node': {'name': '1!'}}
|
||||
|
||||
|
||||
def test_node_query_incorrect_id():
|
||||
executed = schema.execute(
|
||||
'{ node(id:"%s") { ... on MyNode { name } } }' % "something:2"
|
||||
|
@ -97,6 +117,11 @@ type MyNode implements Node {
|
|||
name: String
|
||||
}
|
||||
|
||||
type MyNodeImplementedId implements Node {
|
||||
id: ID!
|
||||
name: String
|
||||
}
|
||||
|
||||
type MyOtherNode implements Node {
|
||||
id: ID!
|
||||
shared: String
|
||||
|
|
|
@ -45,5 +45,5 @@ class Field(OrderedType):
|
|||
return self._type()
|
||||
return self._type
|
||||
|
||||
def get_resolver(self, parent_resolver):
|
||||
def get_resolver(self, parent_resolver, _):
|
||||
return self.resolver or parent_resolver
|
||||
|
|
|
@ -219,7 +219,7 @@ class TypeMap(GraphQLTypeMap):
|
|||
_field = GraphQLField(
|
||||
field_type,
|
||||
args=args,
|
||||
resolver=field.get_resolver(self.get_resolver_for_type(type, name)),
|
||||
resolver=field.get_resolver(self.get_resolver_for_type(type, name), type),
|
||||
deprecation_reason=field.deprecation_reason,
|
||||
description=field.description
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue
Block a user