Skip to content

Commit fe51fc6

Browse files
authored
Merge pull request #53 from crunk1/master
Fix: #49 All fields were being set as non-nullable. Allow nullable filter.
2 parents 3d16589 + 29d366c commit fe51fc6

File tree

3 files changed

+21
-17
lines changed

3 files changed

+21
-17
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
.coverage
22
.cache/
33
.eggs/
4+
.idea/
45
_build/
56
build/
67
dist/

graphene_mongo/converter.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,41 +21,41 @@ def convert_mongoengine_field(field, registry=None):
2121
@convert_mongoengine_field.register(mongoengine.StringField)
2222
@convert_mongoengine_field.register(mongoengine.URLField)
2323
def convert_field_to_string(field, registry=None):
24-
return String(description=field.db_field, required=not field.null)
24+
return String(description=field.db_field, required=field.required)
2525

2626

2727
@convert_mongoengine_field.register(mongoengine.UUIDField)
2828
@convert_mongoengine_field.register(mongoengine.ObjectIdField)
2929
def convert_field_to_id(field, registry=None):
30-
return ID(description=field.db_field, required=not field.null)
30+
return ID(description=field.db_field, required=field.required)
3131

3232

3333
@convert_mongoengine_field.register(mongoengine.IntField)
3434
@convert_mongoengine_field.register(mongoengine.LongField)
3535
def convert_field_to_int(field, registry=None):
36-
return Int(description=field.db_field, required=not field.null)
36+
return Int(description=field.db_field, required=field.required)
3737

3838

3939
@convert_mongoengine_field.register(mongoengine.BooleanField)
4040
def convert_field_to_boolean(field, registry=None):
41-
return Boolean(description=field.db_field, required=not field.null)
41+
return Boolean(description=field.db_field, required=field.required)
4242

4343

4444
@convert_mongoengine_field.register(mongoengine.DecimalField)
4545
@convert_mongoengine_field.register(mongoengine.FloatField)
4646
def convert_field_to_float(field, registry=None):
47-
return Float(description=field.db_field, required=not field.null)
47+
return Float(description=field.db_field, required=field.required)
4848

4949

5050
@convert_mongoengine_field.register(mongoengine.DictField)
5151
@convert_mongoengine_field.register(mongoengine.MapField)
5252
def convert_dict_to_jsonstring(field, registry=None):
53-
return JSONString(description=field.db_field, required=not field.null)
53+
return JSONString(description=field.db_field, required=field.required)
5454

5555

5656
@convert_mongoengine_field.register(mongoengine.DateTimeField)
5757
def convert_date_to_string(field, registry=None):
58-
return String(description=field.db_field, required=not field.null)
58+
return String(description=field.db_field, required=field.required)
5959

6060

6161
@convert_mongoengine_field.register(mongoengine.ListField)
@@ -77,7 +77,7 @@ def convert_field_to_list(field, registry=None):
7777
and not isinstance(field.field, relations):
7878
base_type = type(base_type)
7979

80-
return List(base_type, description=field.db_field, required=not field.null)
80+
return List(base_type, description=field.db_field, required=field.required)
8181

8282

8383
@convert_mongoengine_field.register(mongoengine.EmbeddedDocumentField)

graphene_mongo/fields.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
from graphql_relay.connection.arrayconnection import connection_from_list_slice
1010
from graphql_relay.node.node import from_global_id
1111
from graphene.types.argument import to_arguments
12+
from graphene.types.dynamic import Dynamic
13+
from graphene.types.structures import Structure
1214

1315
from .utils import get_model_reference_fields
1416

@@ -72,15 +74,16 @@ def args(self, args):
7274

7375
@property
7476
def field_args(self):
75-
def is_filterable(kv):
76-
return hasattr(kv[1], '_type') \
77-
and callable(getattr(kv[1]._type, '_of_type', None))
78-
79-
return reduce(
80-
lambda r, kv: r.update(
81-
{kv[0]: kv[1]._type._of_type()}) or r if is_filterable(kv) else r,
82-
self.fields.items(), {}
83-
)
77+
def is_filterable(v):
78+
return not isinstance(v, (ConnectionField, Dynamic))
79+
80+
def get_type(v):
81+
if isinstance(v.type, Structure):
82+
return v.type.of_type()
83+
return v.type()
84+
85+
return {k: get_type(v) for k, v in self.fields.items()
86+
if is_filterable(v)}
8487

8588
@property
8689
def reference_args(self):

0 commit comments

Comments
 (0)