Skip to content

Commit 2b2926d

Browse files
Merge pull request #205 from strollby/master
Fix UnionType To Support Graphene Federation
2 parents 10fbf73 + 0b7cab7 commit 2b2926d

File tree

6 files changed

+22
-11
lines changed

6 files changed

+22
-11
lines changed

graphene_mongo/converter.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import uuid
66

77
from graphene.types.json import JSONString
8-
from graphene.utils.str_converters import to_snake_case
8+
from graphene.utils.str_converters import to_snake_case, to_camel_case
99
from mongoengine.base import get_document, LazyReference
1010
from . import advanced_types
1111
from .utils import import_single_dispatch, get_field_description, get_query_fields
@@ -67,6 +67,13 @@ def convert_field_to_float(field, registry=None):
6767
)
6868

6969

70+
@convert_mongoengine_field.register(mongoengine.Decimal128Field)
71+
def convert_field_to_decimal(field, registry=None):
72+
return graphene.Decimal(
73+
description=get_field_description(field, registry), required=field.required
74+
)
75+
76+
7077
@convert_mongoengine_field.register(mongoengine.DateTimeField)
7178
def convert_field_to_datetime(field, registry=None):
7279
return graphene.DateTime(
@@ -233,12 +240,10 @@ def convert_field_to_union(field, registry=None):
233240
if len(_types) == 0:
234241
return None
235242

236-
# XXX: Use uuid to avoid duplicate name
237-
name = "{}_{}_union_{}".format(
243+
name = to_camel_case("{}_{}".format(
238244
field._owner_document.__name__,
239-
field.db_field,
240-
str(uuid.uuid1()).replace("-", ""),
241-
)
245+
field.db_field
246+
)) + "UnionType"
242247
Meta = type("Meta", (object,), {"types": tuple(_types)})
243248
_union = type(name, (graphene.Union,), {"Meta": Meta})
244249

graphene_mongo/tests/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import mongoengine
22
from datetime import datetime
3+
import mongomock
34
from mongomock import gridfs
45

56
gridfs.enable_gridfs_integration()
67
mongoengine.connect(
7-
"graphene-mongo-test", host="mongomock://localhost", alias="default"
8+
"graphene-mongo-test", mongo_client_class=mongomock.MongoClient, alias="default"
89
)
910

1011

graphene_mongo/tests/test_converter.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ def test_should_float_convert_float():
7878
assert_conversion(mongoengine.FloatField, graphene.Float)
7979

8080

81+
def test_should_decimal128_convert_decimal():
82+
assert_conversion(mongoengine.Decimal128Field, graphene.Decimal)
83+
84+
8185
def test_should_datetime_convert_datetime():
8286
assert_conversion(mongoengine.DateTimeField, graphene.DateTime)
8387

graphene_mongo/tests/test_query.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ def resolve_editors(self, *args, **kwargs):
3131
contentType,
3232
chunkSize,
3333
length,
34-
md5,
3534
data
3635
}
3736
}
@@ -54,7 +53,6 @@ def resolve_editors(self, *args, **kwargs):
5453
"contentType": "image/jpeg",
5554
"chunkSize": 261120,
5655
"length": 46928,
57-
"md5": "f3c657fd472fdc4bc2ca9056a1ae6106",
5856
"data": data.decode("utf-8"),
5957
},
6058
},

graphene_mongo/types.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,10 @@ def get_node(cls, info, id):
232232
for field in cls._meta.required_fields:
233233
if field in cls._meta.model._fields_ordered:
234234
required_fields.append(field)
235-
for field in get_query_fields(info):
235+
queried_fields = get_query_fields(info)
236+
if cls._meta.name in queried_fields:
237+
queried_fields = queried_fields[cls._meta.name]
238+
for field in queried_fields:
236239
if to_snake_case(field) in cls._meta.model._fields_ordered:
237240
required_fields.append(to_snake_case(field))
238241
required_fields = list(set(required_fields))

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ future==0.18.2
66
graphene==3.1.1
77
promise==2.3
88
mongoengine==0.19.1; python_version <= '3.5'
9-
mongoengine==0.24.2; python_version > '3.5'
9+
mongoengine==0.27; python_version > '3.5'
1010
mongomock==4.1.2
1111
pytest==4.6.11; python_version <= '3.5'
1212
pytest==7.1.3; python_version > '3.5'

0 commit comments

Comments
 (0)