From 449b8c67d11533c6f087f50931bd9aab7e723968 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Sat, 4 Jun 2016 15:34:07 -0700 Subject: [PATCH] Added reset_counter to ordered types. Improved node implementation --- graphene/relay/node.py | 11 ++++++++++- graphene/relay/tests/test_node.py | 22 ++++++++++++++++++++++ graphene/utils/orderedtype.py | 3 +++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/graphene/relay/node.py b/graphene/relay/node.py index 05b71db2..2e20b550 100644 --- a/graphene/relay/node.py +++ b/graphene/relay/node.py @@ -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)): diff --git a/graphene/relay/tests/test_node.py b/graphene/relay/tests/test_node.py index 943788e7..67055ca3 100644 --- a/graphene/relay/tests/test_node.py +++ b/graphene/relay/tests/test_node.py @@ -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() \ No newline at end of file diff --git a/graphene/utils/orderedtype.py b/graphene/utils/orderedtype.py index d13b5528..4e88183d 100644 --- a/graphene/utils/orderedtype.py +++ b/graphene/utils/orderedtype.py @@ -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)):