File tree 4 files changed +56
-3
lines changed
4 files changed +56
-3
lines changed Original file line number Diff line number Diff line change @@ -59,7 +59,7 @@ def registry(self):
59
59
def args (self ):
60
60
return to_arguments (
61
61
self ._base_args or OrderedDict (),
62
- dict (self .field_args , ** self .reference_args )
62
+ dict (dict ( self .field_args , ** self .reference_args ), ** self . filter_args )
63
63
)
64
64
65
65
@args .setter
@@ -104,6 +104,17 @@ def get_type(v):
104
104
def field_args (self ):
105
105
return self ._field_args (self .fields .items ())
106
106
107
+ @property
108
+ def filter_args (self ):
109
+ filter_args = dict ()
110
+ if self ._type ._meta .filter_fields :
111
+ for field , filter_collection in self ._type ._meta .filter_fields .items ():
112
+ for each in filter_collection :
113
+ filter_args [field + "__" + each ] = graphene .Argument (
114
+ type = getattr (graphene , str (self ._type ._meta .fields [field ].type ).replace ("!" , "" )))
115
+
116
+ return filter_args
117
+
107
118
@property
108
119
def reference_args (self ):
109
120
Original file line number Diff line number Diff line change @@ -42,6 +42,8 @@ class PlayerNode(MongoengineObjectType):
42
42
class Meta :
43
43
model = models .Player
44
44
interfaces = (Node , )
45
+ filter_fields = {
46
+ 'first_name' : ['istartswith' ]}
45
47
46
48
47
49
class ReporterNode (MongoengineObjectType ):
Original file line number Diff line number Diff line change @@ -330,3 +330,4 @@ class Meta:
330
330
Reporter ._fields ['generic_reference' ], registry .get_global_registry ())
331
331
assert isinstance (generic_reference_field , graphene .Field )
332
332
assert isinstance (generic_reference_field .type (), graphene .Union )
333
+ assert generic_reference_field .type ()._meta .types == (A , E )
Original file line number Diff line number Diff line change 1
- import base64
2
1
import os
2
+ import json
3
3
import pytest
4
-
4
+ import base64
5
5
import graphene
6
6
7
7
from graphene .relay import Node
@@ -1038,3 +1038,42 @@ class Query(graphene.ObjectType):
1038
1038
result = schema .execute (query )
1039
1039
assert not result .errors
1040
1040
assert result .data == expected
1041
+
1042
+
1043
+ def test_should_filter_mongoengine_queryset (fixtures ):
1044
+
1045
+ class Query (graphene .ObjectType ):
1046
+ players = MongoengineConnectionField (nodes .PlayerNode )
1047
+
1048
+ query = '''
1049
+ query players {
1050
+ players(firstName_Istartswith: "M") {
1051
+ edges {
1052
+ node {
1053
+ firstName
1054
+ }
1055
+ }
1056
+ }
1057
+ }
1058
+ '''
1059
+ expected = {
1060
+ 'players' : {
1061
+ 'edges' : [
1062
+ {
1063
+ 'node' : {
1064
+ 'firstName' : 'Michael' ,
1065
+ }
1066
+ },
1067
+ {
1068
+ 'node' : {
1069
+ 'firstName' : 'Magic'
1070
+ }
1071
+ }
1072
+ ]
1073
+ }
1074
+ }
1075
+ schema = graphene .Schema (query = Query )
1076
+ result = schema .execute (query )
1077
+
1078
+ assert not result .errors
1079
+ assert json .dumps (result .data , sort_keys = True ) == json .dumps (expected , sort_keys = True )
You can’t perform that action at this time.
0 commit comments