Skip to content

Commit cd21053

Browse files
Merge branch 'feat-retrieving-queried-fields-only' into feat-pagination-performance
2 parents 1132d9d + 8f6a4c0 commit cd21053

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

graphene_mongo/converter.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,12 @@ def reference_resolver(root, *args, **kwargs):
221221
return None
222222

223223
if isinstance(field, mongoengine.GenericReferenceField):
224-
return graphene.Field(_union, resolver=reference_resolver,
224+
field_resolver = None
225+
if field.db_field is not None:
226+
resolver_function = getattr(_union, "resolve_" + field.db_field, None)
227+
if resolver_function and callable(resolver_function):
228+
field_resolver = resolver_function
229+
return graphene.Field(_union, resolver=field_resolver if field_resolver else reference_resolver,
225230
description=get_field_description(field, registry))
226231

227232
return graphene.Field(_union)
@@ -259,14 +264,20 @@ def dynamic_type():
259264
_type = registry.get_type_for_model(model)
260265
if not _type:
261266
return None
262-
elif isinstance(field, mongoengine.ReferenceField):
263-
return graphene.Field(_type, resolver=reference_resolver,
267+
if isinstance(field, mongoengine.EmbeddedDocumentField):
268+
return graphene.Field(_type,
264269
description=get_field_description(field, registry))
265-
elif isinstance(field, mongoengine.CachedReferenceField):
266-
return graphene.Field(_type, resolver=cached_reference_resolver,
270+
field_resolver = None
271+
if field.db_field is not None:
272+
resolver_function = getattr(_type, "resolve_" + field.db_field, None)
273+
if resolver_function and callable(resolver_function):
274+
field_resolver = resolver_function
275+
if isinstance(field, mongoengine.ReferenceField):
276+
return graphene.Field(_type, resolver=field_resolver if field_resolver else reference_resolver,
277+
description=get_field_description(field, registry))
278+
else:
279+
return graphene.Field(_type, resolver=field_resolver if field_resolver else cached_reference_resolver(),
267280
description=get_field_description(field, registry))
268-
return graphene.Field(_type,
269-
description=get_field_description(field, registry))
270281

271282
return graphene.Dynamic(dynamic_type)
272283

@@ -288,12 +299,16 @@ def lazy_resolver(root, *args, **kwargs):
288299

289300
def dynamic_type():
290301
_type = registry.get_type_for_model(model)
291-
292302
if not _type:
293303
return None
304+
field_resolver = None
305+
if field.db_field is not None:
306+
resolver_function = getattr(_type, "resolve_" + field.db_field, None)
307+
if resolver_function and callable(resolver_function):
308+
field_resolver = resolver_function
294309
return graphene.Field(
295310
_type,
296-
resolver=lazy_resolver,
311+
resolver=field_resolver if field_resolver else lazy_resolver,
297312
description=get_field_description(field, registry),
298313
)
299314

0 commit comments

Comments
 (0)