@@ -61,6 +61,32 @@ def get_manager(self):
61
61
def merge_querysets (cls , default_queryset , queryset ):
62
62
return default_queryset & queryset
63
63
64
+ @classmethod
65
+ def resolve_connection (cls , connection , default_manager , args , iterable ):
66
+ if iterable is None :
67
+ iterable = default_manager
68
+ iterable = maybe_queryset (iterable )
69
+ if isinstance (iterable , QuerySet ):
70
+ if iterable is not default_manager :
71
+ default_queryset = maybe_queryset (default_manager )
72
+ iterable = cls .merge_querysets (default_queryset , iterable )
73
+ _len = iterable .count ()
74
+ else :
75
+ _len = len (iterable )
76
+ connection = connection_from_list_slice (
77
+ iterable ,
78
+ args ,
79
+ slice_start = 0 ,
80
+ list_length = _len ,
81
+ list_slice_length = _len ,
82
+ connection_type = connection ,
83
+ edge_type = connection .Edge ,
84
+ pageinfo_type = PageInfo ,
85
+ )
86
+ connection .iterable = iterable
87
+ connection .length = _len
88
+ return connection
89
+
64
90
@classmethod
65
91
def connection_resolver (cls , resolver , connection , default_manager , max_limit ,
66
92
enforce_first_or_last , root , args , context , info ):
@@ -86,30 +112,12 @@ def connection_resolver(cls, resolver, connection, default_manager, max_limit,
86
112
args ['last' ] = min (last , max_limit )
87
113
88
114
iterable = resolver (root , args , context , info )
89
- iterable = Promise .resolve (iterable ).get ()
90
- if iterable is None :
91
- iterable = default_manager
92
- iterable = maybe_queryset (iterable )
93
- if isinstance (iterable , QuerySet ):
94
- if iterable is not default_manager :
95
- default_queryset = maybe_queryset (default_manager )
96
- iterable = cls .merge_querysets (default_queryset , iterable )
97
- _len = iterable .count ()
98
- else :
99
- _len = len (iterable )
100
- connection = connection_from_list_slice (
101
- iterable ,
102
- args ,
103
- slice_start = 0 ,
104
- list_length = _len ,
105
- list_slice_length = _len ,
106
- connection_type = connection ,
107
- edge_type = connection .Edge ,
108
- pageinfo_type = PageInfo ,
109
- )
110
- connection .iterable = iterable
111
- connection .length = _len
112
- return connection
115
+ on_resolve = partial (cls .resolve_connection , connection , default_manager , args )
116
+
117
+ if Promise .is_thenable (iterable ):
118
+ return Promise .resolve (iterable ).then (on_resolve )
119
+
120
+ return on_resolve (iterable )
113
121
114
122
def get_resolver (self , parent_resolver ):
115
123
return partial (
0 commit comments