Skip to content

Commit 5d54b01

Browse files
Removed conflict of only_fields by introducing required_fields
1 parent 5d08133 commit 5d54b01

File tree

3 files changed

+31
-31
lines changed

3 files changed

+31
-31
lines changed

graphene_mongo/converter.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,9 @@ def get_reference_objects(*args, **kwargs):
112112
document_field = mongoengine.ReferenceField(document)
113113
document_field = convert_mongoengine_field(document_field, registry)
114114
document_field_type = document_field.get_type().type._meta.name
115-
only_fields = [to_snake_case(i) for i in
115+
required_fields = [to_snake_case(i) for i in
116116
get_query_fields(args[0][3][0])[document_field_type].keys()]
117-
return document.objects().no_dereference().only(*only_fields).filter(pk__in=args[0][1])
117+
return document.objects().no_dereference().only(*required_fields).filter(pk__in=args[0][1])
118118
else:
119119
return []
120120

@@ -237,20 +237,20 @@ def reference_resolver(root, *args, **kwargs):
237237
document = getattr(root, field.name or field.db_name)
238238
if document:
239239
_type = registry.get_type_for_model(field.document_type)
240-
only_fields = _type._meta.only_fields.split(",") if isinstance(_type._meta.only_fields,
240+
required_fields = _type._meta.required_fields.split(",") if isinstance(_type._meta.required_fields,
241241
str) else list()
242242
return field.document_type.objects().no_dereference().only(
243-
*((list(set(only_fields + [to_snake_case(i) for i in get_query_fields(args[0]).keys()]))))).get(
243+
*((list(set(required_fields + [to_snake_case(i) for i in get_query_fields(args[0]).keys()]))))).get(
244244
pk=document.id)
245245
return None
246246

247247
def cached_reference_resolver(root, *args, **kwargs):
248248
if field:
249249
_type = registry.get_type_for_model(field.document_type)
250-
only_fields = _type._meta.only_fields.split(",") if isinstance(_type._meta.only_fields,
250+
required_fields = _type._meta.required_fields.split(",") if isinstance(_type._meta.required_fields,
251251
str) else list()
252252
return field.document_type.objects().no_dereference().only(
253-
*(list(set(only_fields + [to_snake_case(i) for i in get_query_fields(args[0]).keys()]))
253+
*(list(set(required_fields + [to_snake_case(i) for i in get_query_fields(args[0]).keys()]))
254254
)).get(
255255
pk=getattr(root, field.name or field.db_name))
256256
return None
@@ -279,10 +279,10 @@ def lazy_resolver(root, *args, **kwargs):
279279
document = getattr(root, field.name or field.db_name)
280280
if document:
281281
_type = registry.get_type_for_model(document.document_type)
282-
only_fields = _type._meta.only_fields.split(",") if isinstance(_type._meta.only_fields,
282+
required_fields = _type._meta.required_fields.split(",") if isinstance(_type._meta.required_fields,
283283
str) else list()
284284
return document.document_type.objects().no_dereference().only(
285-
*(list(set((only_fields + [to_snake_case(i) for i in get_query_fields(args[0]).keys()]))))).get(
285+
*(list(set((required_fields + [to_snake_case(i) for i in get_query_fields(args[0]).keys()]))))).get(
286286
pk=document.pk)
287287
return None
288288

graphene_mongo/fields.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,8 @@ def order_by(self):
6464
return self.node_type._meta.order_by
6565

6666
@property
67-
def only_fields(self):
68-
if isinstance(self.node_type._meta.only_fields, str):
69-
return self.node_type._meta.only_fields.split(",")
70-
return list()
67+
def required_fields(self):
68+
return tuple(set(self.node_type._meta.required_fields + self.node_type._meta.only_fields))
7169

7270
@property
7371
def registry(self):
@@ -190,7 +188,7 @@ def get_reference_field(r, kv):
190188
def fields(self):
191189
return self._type._meta.fields
192190

193-
def get_queryset(self, model, info, only_fields=list(), **args):
191+
def get_queryset(self, model, info, required_fields=list(), **args):
194192
if args:
195193
reference_fields = get_model_reference_fields(self.model)
196194
hydrated_references = {}
@@ -209,9 +207,9 @@ def get_queryset(self, model, info, only_fields=list(), **args):
209207
else:
210208
args.update(queryset_or_filters)
211209

212-
return model.objects(**args).no_dereference().only(*only_fields).order_by(self.order_by)
210+
return model.objects(**args).no_dereference().only(*required_fields).order_by(self.order_by)
213211

214-
def default_resolver(self, _root, info, only_fields=list(), **args):
212+
def default_resolver(self, _root, info, required_fields=list(), **args):
215213
args = args or {}
216214

217215
if _root is not None:
@@ -232,7 +230,7 @@ def default_resolver(self, _root, info, only_fields=list(), **args):
232230
args['pk'] = from_global_id(_id)[-1]
233231

234232
if callable(getattr(self.model, "objects", None)):
235-
iterables = self.get_queryset(self.model, info, only_fields, **args)
233+
iterables = self.get_queryset(self.model, info, required_fields, **args)
236234
if isinstance(info, ResolveInfo):
237235
if not info.context:
238236
info.context = Context()
@@ -256,13 +254,13 @@ def default_resolver(self, _root, info, only_fields=list(), **args):
256254
return connection
257255

258256
def chained_resolver(self, resolver, is_partial, root, info, **args):
259-
only_fields = list()
260-
for field in self.only_fields:
257+
required_fields = list()
258+
for field in self.required_fields:
261259
if field in self.model._fields_ordered:
262-
only_fields.append(field)
260+
required_fields.append(field)
263261
for field in get_query_fields(info):
264262
if to_snake_case(field) in self.model._fields_ordered:
265-
only_fields.append(to_snake_case(field))
263+
required_fields.append(to_snake_case(field))
266264
if not bool(args) or not is_partial:
267265
if isinstance(self.model, mongoengine.Document) or isinstance(self.model,
268266
mongoengine.base.metaclasses.TopLevelDocumentMetaclass):
@@ -273,7 +271,7 @@ def chained_resolver(self, resolver, is_partial, root, info, **args):
273271
if isinstance(info, ResolveInfo):
274272
if not info.context:
275273
info.context = Context()
276-
info.context.queryset = self.get_queryset(self.model, info, only_fields, **args_copy)
274+
info.context.queryset = self.get_queryset(self.model, info, required_fields, **args_copy)
277275
# XXX: Filter nested args
278276
resolved = resolver(root, info, **args)
279277
if resolved is not None:
@@ -284,7 +282,7 @@ def chained_resolver(self, resolver, is_partial, root, info, **args):
284282
return resolved
285283
else:
286284
return resolved
287-
return self.default_resolver(root, info, only_fields, **args)
285+
return self.default_resolver(root, info, required_fields, **args)
288286

289287
@classmethod
290288
def connection_resolver(cls, resolver, connection_type, root, info, **args):

graphene_mongo/types.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from .utils import get_model_fields, is_valid_mongoengine_model, get_query_fields
1414

1515

16-
def construct_fields(model, registry, only_fields, exclude_fields):
16+
def construct_fields(model, registry, required_fields, exclude_fields):
1717
"""
1818
Args:
1919
model (mongoengine.Document):
@@ -29,10 +29,10 @@ def construct_fields(model, registry, only_fields, exclude_fields):
2929
fields = OrderedDict()
3030
self_referenced = OrderedDict()
3131
for name, field in _model_fields.items():
32-
is_not_in_only = only_fields and name not in only_fields
32+
is_not_in_only = required_fields and name not in required_fields
3333
is_excluded = name in exclude_fields
3434
if is_not_in_only or is_excluded:
35-
# We skip this field if we specify only_fields and is not
35+
# We skip this field if we specify required_fields and is not
3636
# in there. Or when we exclude this field in exclude_fields
3737
continue
3838
if isinstance(field, mongoengine.ListField):
@@ -83,6 +83,7 @@ def __init_subclass_with_meta__(
8383
registry=None,
8484
skip_registry=False,
8585
only_fields=(),
86+
required_fields=(),
8687
exclude_fields=(),
8788
filter_fields=None,
8889
connection=None,
@@ -157,6 +158,7 @@ def __init_subclass_with_meta__(
157158
_meta.connection_field_class = connection_field_class
158159
# Save them for later
159160
_meta.only_fields = only_fields
161+
_meta.required_fields = required_fields
160162
_meta.exclude_fields = exclude_fields
161163
_meta.order_by = order_by
162164

@@ -211,15 +213,15 @@ def is_type_of(cls, root, info):
211213

212214
@classmethod
213215
def get_node(cls, info, id):
214-
only_fields = list()
215-
for field in cls._meta.only_fields:
216+
required_fields = list()
217+
for field in cls._meta.required_fields:
216218
if field in cls._meta.model._fields_ordered:
217-
only_fields.append(field)
219+
required_fields.append(field)
218220
for field in get_query_fields(info):
219221
if to_snake_case(field) in cls._meta.model._fields_ordered:
220-
only_fields.append(to_snake_case(field))
221-
only_fields = list(set(only_fields))
222-
return cls._meta.model.objects.no_dereference().only(*only_fields).get(pk=id)
222+
required_fields.append(to_snake_case(field))
223+
required_fields = list(set(required_fields))
224+
return cls._meta.model.objects.no_dereference().only(*required_fields).get(pk=id)
223225

224226
def resolve_id(self, info):
225227
return str(self.id)

0 commit comments

Comments
 (0)