Skip to content

Commit 8924257

Browse files
committed
feat: Take care list of EmbeddedDocument.
1 parent fd6bf48 commit 8924257

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

graphene_mongo/converter.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,22 @@ def convert_date_to_string(field, registry=None):
6060
@convert_mongoengine_field.register(mongoengine.ListField)
6161
def convert_field_to_list(field, registry=None):
6262
base_type = convert_mongoengine_field(field.field, registry=registry)
63+
6364
if isinstance(base_type, (Dynamic)):
64-
base_type = base_type.get_type()._type
65+
base_type = base_type.get_type()
66+
if base_type is None:
67+
return
68+
base_type = base_type._type
69+
6570
if is_node(base_type):
6671
return MongoengineConnectionField(base_type)
67-
elif not isinstance(base_type, (List, NonNull)) \
68-
and not isinstance(field.field, mongoengine.ReferenceField):
72+
73+
# Non-relationship field
74+
relations = (mongoengine.ReferenceField, mongoengine.EmbeddedDocumentField)
75+
if not isinstance(base_type, (List, NonNull)) \
76+
and not isinstance(field.field, relations):
6977
base_type = type(base_type)
78+
7079
return List(base_type, description=field.db_field, required=not field.null)
7180

7281

graphene_mongo/tests/models.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ class Reporter(Document):
4949
last_name = StringField(required=True)
5050
email = EmailField()
5151
articles = ListField(ReferenceField(Article))
52-
# FIXME
53-
# embedded_articles = ListField(EmbeddedDocumentField(EmbeddedArticle))
52+
embedded_articles = ListField(EmbeddedDocumentField(EmbeddedArticle))
5453
# FIXME
5554
# custom_map = MapField(field=StringField())
5655
awards = ListField(StringField())

graphene_mongo/tests/test_converter.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def test_should_field_convert_list():
7575
assert_conversion(mongoengine.ListField, graphene.List, field=mongoengine.StringField())
7676

7777

78-
def test_should_reference_convert_dynamic():
78+
def test_should_embedded_convert_dynamic():
7979

8080
class E(MongoengineObjectType):
8181

@@ -90,7 +90,7 @@ class Meta:
9090
assert graphene_type.type == E
9191

9292

93-
def test_should_one2many_convert_list():
93+
def test_should_list_of_reference_convert_list():
9494

9595
class A(MongoengineObjectType):
9696

@@ -102,8 +102,21 @@ class Meta:
102102
dynamic_field = graphene_field.get_type()
103103
assert dynamic_field._of_type == A
104104

105+
106+
def test_should_list_of_embedded_convert_list():
107+
108+
class E(MongoengineObjectType):
109+
110+
class Meta:
111+
model = EmbeddedArticle
112+
113+
graphene_field = convert_mongoengine_field(Reporter._fields['embedded_articles'], E._meta.registry)
114+
assert isinstance(graphene_field, graphene.List)
115+
dynamic_field = graphene_field.get_type()
116+
assert dynamic_field._of_type == E
117+
118+
105119
def test_should_self_reference_convert_dynamic():
106-
# pass
107120
class P(MongoengineObjectType):
108121

109122
class Meta:

0 commit comments

Comments
 (0)