9
9
from graphene import Context
10
10
from graphene .types .utils import get_type
11
11
from graphene .utils .str_converters import to_snake_case
12
- from graphql import ResolveInfo
12
+ from graphql import GraphQLResolveInfo
13
13
from mongoengine .base import get_document
14
14
from promise import Promise
15
15
from graphql_relay import from_global_id
@@ -168,7 +168,7 @@ def filter_args(self):
168
168
}
169
169
filter_type = advanced_filter_types .get (each , filter_type )
170
170
filter_args [field + "__" + each ] = graphene .Argument (
171
- type = filter_type
171
+ type_ = filter_type
172
172
)
173
173
return filter_args
174
174
@@ -278,6 +278,9 @@ def get_queryset(self, model, info, required_fields=list(), skip=None, limit=Non
278
278
279
279
def default_resolver (self , _root , info , required_fields = list (), ** args ):
280
280
args = args or {}
281
+ for key , value in dict (args ).items ():
282
+ if value is None :
283
+ del args [key ]
281
284
if _root is not None :
282
285
field_name = to_snake_case (info .field_name )
283
286
if not hasattr (_root , "_fields_ordered" ):
@@ -301,9 +304,13 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
301
304
limit = None
302
305
reverse = False
303
306
first = args .pop ("first" , None )
304
- after = cursor_to_offset (args .pop ("after" , None ))
307
+ after = args .pop ("after" , None )
308
+ if after :
309
+ after = cursor_to_offset (after )
305
310
last = args .pop ("last" , None )
306
- before = cursor_to_offset (args .pop ("before" , None ))
311
+ before = args .pop ("before" , None )
312
+ if before :
313
+ before = cursor_to_offset (before )
307
314
if callable (getattr (self .model , "objects" , None )):
308
315
if "pk__in" in args and args ["pk__in" ]:
309
316
count = len (args ["pk__in" ])
@@ -318,21 +325,21 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
318
325
args ["pk__in" ] = args ["pk__in" ][skip :]
319
326
iterables = self .get_queryset (self .model , info , required_fields , ** args )
320
327
list_length = len (iterables )
321
- if isinstance (info , ResolveInfo ):
322
- if not info .context :
323
- info .context = Context ()
324
- info .context .queryset = self .get_queryset (self .model , info , required_fields , ** args )
328
+ # if isinstance(info, GraphQLResolveInfo ):
329
+ # if not info.context:
330
+ # info.context = Context()
331
+ # info.context.queryset = self.get_queryset(self.model, info, required_fields, **args)
325
332
elif _root is None or args :
326
333
count = self .get_queryset (self .model , info , required_fields , ** args ).count ()
327
334
if count != 0 :
328
335
skip , limit , reverse = find_skip_and_limit (first = first , after = after , last = last , before = before ,
329
336
count = count )
330
337
iterables = self .get_queryset (self .model , info , required_fields , skip , limit , reverse , ** args )
331
338
list_length = len (iterables )
332
- if isinstance (info , ResolveInfo ):
333
- if not info .context :
334
- info .context = Context ()
335
- info .context .queryset = self .get_queryset (self .model , info , required_fields , ** args )
339
+ # if isinstance(info, GraphQLResolveInfo ):
340
+ # if not info.context:
341
+ # info.context = Context()
342
+ # info.context.queryset = self.get_queryset(self.model, info, required_fields, **args)
336
343
337
344
elif _root is not None :
338
345
field_name = to_snake_case (info .field_name )
@@ -381,10 +388,10 @@ def chained_resolver(self, resolver, is_partial, root, info, **args):
381
388
for arg_name , arg in args .copy ().items ():
382
389
if arg_name not in self .model ._fields_ordered + tuple (self .filter_args .keys ()):
383
390
args_copy .pop (arg_name )
384
- if isinstance (info , ResolveInfo ):
385
- if not info .context :
386
- info .context = Context ()
387
- info .context .queryset = self .get_queryset (self .model , info , required_fields , ** args_copy )
391
+ # if isinstance(info, GraphQLResolveInfo ):
392
+ # if not info.context:
393
+ # info.context = Context()
394
+ # info.context.queryset = self.get_queryset(self.model, info, required_fields, **args_copy)
388
395
# XXX: Filter nested args
389
396
resolved = resolver (root , info , ** args )
390
397
if resolved is not None :
@@ -415,6 +422,8 @@ def chained_resolver(self, resolver, is_partial, root, info, **args):
415
422
args_copy [arg_name + operation .replace ('$' , '__' )] = arg [operation ]
416
423
del args_copy [arg_name ]
417
424
return self .default_resolver (root , info , required_fields , ** args_copy )
425
+ elif isinstance (resolved , Promise ):
426
+ return resolved .value
418
427
else :
419
428
return resolved
420
429
return self .default_resolver (root , info , required_fields , ** args )
0 commit comments