@@ -61,6 +61,32 @@ def get_manager(self):
6161 def merge_querysets (cls , default_queryset , queryset ):
6262 return default_queryset & queryset
6363
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+
6490 @classmethod
6591 def connection_resolver (cls , resolver , connection , default_manager , max_limit ,
6692 enforce_first_or_last , root , args , context , info ):
@@ -86,30 +112,12 @@ def connection_resolver(cls, resolver, connection, default_manager, max_limit,
86112 args ['last' ] = min (last , max_limit )
87113
88114 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 )
113121
114122 def get_resolver (self , parent_resolver ):
115123 return partial (
0 commit comments