Skip to content

Commit

Permalink
Merge pull request #53 from crunk1/master
Browse files Browse the repository at this point in the history
Fix: #49 All fields were being set as non-nullable. Allow nullable filter.
  • Loading branch information
abawchen committed Sep 6, 2018
2 parents 3d16589 + 29d366c commit fe51fc6
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 17 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
.coverage
.cache/
.eggs/
.idea/
_build/
build/
dist/
Expand Down
16 changes: 8 additions & 8 deletions graphene_mongo/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,41 +21,41 @@ def convert_mongoengine_field(field, registry=None):
@convert_mongoengine_field.register(mongoengine.StringField)
@convert_mongoengine_field.register(mongoengine.URLField)
def convert_field_to_string(field, registry=None):
return String(description=field.db_field, required=not field.null)
return String(description=field.db_field, required=field.required)


@convert_mongoengine_field.register(mongoengine.UUIDField)
@convert_mongoengine_field.register(mongoengine.ObjectIdField)
def convert_field_to_id(field, registry=None):
return ID(description=field.db_field, required=not field.null)
return ID(description=field.db_field, required=field.required)


@convert_mongoengine_field.register(mongoengine.IntField)
@convert_mongoengine_field.register(mongoengine.LongField)
def convert_field_to_int(field, registry=None):
return Int(description=field.db_field, required=not field.null)
return Int(description=field.db_field, required=field.required)


@convert_mongoengine_field.register(mongoengine.BooleanField)
def convert_field_to_boolean(field, registry=None):
return Boolean(description=field.db_field, required=not field.null)
return Boolean(description=field.db_field, required=field.required)


@convert_mongoengine_field.register(mongoengine.DecimalField)
@convert_mongoengine_field.register(mongoengine.FloatField)
def convert_field_to_float(field, registry=None):
return Float(description=field.db_field, required=not field.null)
return Float(description=field.db_field, required=field.required)


@convert_mongoengine_field.register(mongoengine.DictField)
@convert_mongoengine_field.register(mongoengine.MapField)
def convert_dict_to_jsonstring(field, registry=None):
return JSONString(description=field.db_field, required=not field.null)
return JSONString(description=field.db_field, required=field.required)


@convert_mongoengine_field.register(mongoengine.DateTimeField)
def convert_date_to_string(field, registry=None):
return String(description=field.db_field, required=not field.null)
return String(description=field.db_field, required=field.required)


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

return List(base_type, description=field.db_field, required=not field.null)
return List(base_type, description=field.db_field, required=field.required)


@convert_mongoengine_field.register(mongoengine.EmbeddedDocumentField)
Expand Down
21 changes: 12 additions & 9 deletions graphene_mongo/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
from graphql_relay.connection.arrayconnection import connection_from_list_slice
from graphql_relay.node.node import from_global_id
from graphene.types.argument import to_arguments
from graphene.types.dynamic import Dynamic
from graphene.types.structures import Structure

from .utils import get_model_reference_fields

Expand Down Expand Up @@ -72,15 +74,16 @@ def args(self, args):

@property
def field_args(self):
def is_filterable(kv):
return hasattr(kv[1], '_type') \
and callable(getattr(kv[1]._type, '_of_type', None))

return reduce(
lambda r, kv: r.update(
{kv[0]: kv[1]._type._of_type()}) or r if is_filterable(kv) else r,
self.fields.items(), {}
)
def is_filterable(v):
return not isinstance(v, (ConnectionField, Dynamic))

def get_type(v):
if isinstance(v.type, Structure):
return v.type.of_type()
return v.type()

return {k: get_type(v) for k, v in self.fields.items()
if is_filterable(v)}

@property
def reference_args(self):
Expand Down

0 comments on commit fe51fc6

Please sign in to comment.