3
3
from ..core .types import (Boolean , Field , InputObjectType , Interface , List ,
4
4
Mutation , ObjectType , String )
5
5
from ..core .types .argument import ArgumentsGroup
6
- from ..core .types .base import LazyType
7
6
from ..core .types .definitions import NonNull
8
7
from ..utils import memoize
9
8
from .fields import GlobalIDField
@@ -24,11 +23,6 @@ class PageInfo(ObjectType):
24
23
25
24
class Edge (ObjectType ):
26
25
'''An edge in a connection.'''
27
- class Meta :
28
- type_name = 'DefaultEdge'
29
-
30
- node = Field (LazyType (lambda object_type : object_type .node_type ),
31
- description = 'The item at the end of the edge' )
32
26
cursor = String (
33
27
required = True , description = 'A cursor for use in pagination' )
34
28
@@ -37,10 +31,11 @@ class Meta:
37
31
def for_node (cls , node ):
38
32
from graphene .relay .utils import is_node
39
33
assert is_node (node ), 'ObjectTypes in a edge have to be Nodes'
34
+ node_field = Field (node , description = 'The item at the end of the edge' )
40
35
return type (
41
36
'%s%s' % (node ._meta .type_name , cls ._meta .type_name ),
42
37
(cls ,),
43
- {'node_type' : node })
38
+ {'node_type' : node , 'node' : node_field })
44
39
45
40
46
41
class Connection (ObjectType ):
@@ -50,21 +45,20 @@ class Meta:
50
45
51
46
page_info = Field (PageInfo , required = True ,
52
47
description = 'The Information to aid in pagination' )
53
- edges = List (LazyType (lambda object_type : object_type .edge_type ),
54
- description = 'Information to aid in pagination.' )
55
48
56
49
_connection_data = None
57
50
58
51
@classmethod
59
52
@memoize
60
53
def for_node (cls , node , edge_type = None ):
61
54
from graphene .relay .utils import is_node
62
- edge_type = edge_type or Edge
55
+ edge_type = edge_type or Edge . for_node ( node )
63
56
assert is_node (node ), 'ObjectTypes in a connection have to be Nodes'
57
+ edges = List (edge_type , description = 'Information to aid in pagination.' )
64
58
return type (
65
59
'%s%s' % (node ._meta .type_name , cls ._meta .type_name ),
66
60
(cls ,),
67
- {'edge_type' : edge_type . for_node ( node ) })
61
+ {'edge_type' : edge_type , 'edges' : edges })
68
62
69
63
def set_connection_data (self , data ):
70
64
self ._connection_data = data
0 commit comments