Skip to content

Commit bfcac1d

Browse files
committed
Use Promise.then instead of Promise.get on DjangoConnectionField
1 parent 4350582 commit bfcac1d

File tree

1 file changed

+32
-24
lines changed

1 file changed

+32
-24
lines changed

graphene_django/fields.py

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)