Added reset_counter to ordered types. Improved node implementation

This commit is contained in:
Syrus Akbary 2016-06-04 15:34:07 -07:00
parent ab72393e66
commit 449b8c67d1
3 changed files with 35 additions and 1 deletions

View File

@ -1,3 +1,4 @@
import copy
from functools import partial
import six
from graphql_relay import node_definitions, from_global_id
@ -20,9 +21,17 @@ class NodeMeta(InterfaceTypeMeta):
field_class=Field
)
cls._meta.graphql_type = node_interface
cls.Field = node_field
cls._Field = node_field
return constructed
@property
def Field(cls):
# We put as a property for reset the field counter each time is setted up, so
# it will be order correctly wherever is mounted
field = copy.copy(cls._Field)
field.reset_counter()
return field
class Node(six.with_metaclass(NodeMeta, Interface)):

View File

@ -17,6 +17,7 @@ class MyNode(ObjectType):
class RootQuery(ObjectType):
first = String()
node = Node.Field
schema = Schema(query=RootQuery, types=[MyNode])
@ -59,3 +60,24 @@ def test_node_query_incorrect_id():
)
assert not executed.errors
assert executed.data == {'node': None}
def test_str_schema():
assert str(schema) == """
schema {
query: RootQuery
}
type MyNode implements Node {
id: ID!
name: String
}
interface Node {
id: ID!
}
type RootQuery {
first: String
node(id: ID!): Node
}
""".lstrip()

View File

@ -14,6 +14,9 @@ class OrderedType(object):
OrderedType.creation_counter += 1
return counter
def reset_counter(self):
self.creation_counter = self.gen_counter()
def __eq__(self, other):
# Needed for @total_ordering
if isinstance(self, type(other)):