Skip to content

Commit c7105ec

Browse files
committed
Handle async get_node
1 parent 5590a2e commit c7105ec

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

graphene_django/converter.py

+25-3
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,21 @@ def dynamic_type():
261261
_type = registry.get_type_for_model(model)
262262
if not _type:
263263
return
264+
265+
class CustomField(Field):
266+
def wrap_resolve(self, parent_resolver):
267+
resolver = super().wrap_resolve(parent_resolver)
268+
269+
try:
270+
get_running_loop()
271+
except RuntimeError:
272+
pass
273+
else:
274+
resolver=sync_to_async(resolver)
264275

265-
return Field(_type, required=not field.null)
276+
return resolver
277+
278+
return CustomField(_type, required=not field.null)
266279

267280
return Dynamic(dynamic_type)
268281

@@ -324,13 +337,22 @@ def wrap_resolve(self, parent_resolver):
324337
it goes through the `get_queryset` method of the DjangoObjectType.
325338
"""
326339
resolver = super().wrap_resolve(parent_resolver)
327-
328340
try:
329341
get_running_loop()
330342
except RuntimeError:
331343
pass
332344
else:
333-
resolver=sync_to_async(resolver)
345+
async def custom_resolver(root, info, **args):
346+
fk_obj = await sync_to_async(resolver)(root, info, **args)
347+
if not isinstance(fk_obj, model):
348+
# In case the resolver is a custom one that overwrites
349+
# the default Django resolver
350+
# This happens, for example, when using custom awaitable resolvers.
351+
return fk_obj
352+
## This fucks shit up I do believe
353+
return await sync_to_async(_type.get_node)(info, fk_obj.pk)
354+
355+
return custom_resolver
334356

335357
def custom_resolver(root, info, **args):
336358
fk_obj = resolver(root, info, **args)

0 commit comments

Comments
 (0)