Skip to content

Commit baed65b

Browse files
authored
Merge pull request #98 from graphql-python/feat-support-sequence-field
Feat support sequence field
2 parents 1d6a933 + 0a73b71 commit baed65b

File tree

4 files changed

+30
-36
lines changed

4 files changed

+30
-36
lines changed

graphene_mongo/converter.py

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,7 @@
1+
import graphene
12
import mongoengine
23
import uuid
3-
from graphene import (
4-
ID,
5-
Boolean,
6-
DateTime,
7-
Dynamic,
8-
Field,
9-
Float,
10-
Int,
11-
List,
12-
NonNull,
13-
String,
14-
Union,
15-
is_node
16-
)
4+
175
from graphene.types.json import JSONString
186
from mongoengine.base import get_document
197

@@ -40,35 +28,36 @@ def convert_mongoengine_field(field, registry=None):
4028
@convert_mongoengine_field.register(mongoengine.StringField)
4129
@convert_mongoengine_field.register(mongoengine.URLField)
4230
def convert_field_to_string(field, registry=None):
43-
return String(description=get_field_description(field, registry), required=field.required)
31+
return graphene.String(description=get_field_description(field, registry), required=field.required)
4432

4533

4634
@convert_mongoengine_field.register(mongoengine.UUIDField)
4735
@convert_mongoengine_field.register(mongoengine.ObjectIdField)
4836
def convert_field_to_id(field, registry=None):
49-
return ID(description=get_field_description(field, registry), required=field.required)
37+
return graphene.ID(description=get_field_description(field, registry), required=field.required)
5038

5139

5240
@convert_mongoengine_field.register(mongoengine.IntField)
5341
@convert_mongoengine_field.register(mongoengine.LongField)
42+
@convert_mongoengine_field.register(mongoengine.SequenceField)
5443
def convert_field_to_int(field, registry=None):
55-
return Int(description=get_field_description(field, registry), required=field.required)
44+
return graphene.Int(description=get_field_description(field, registry), required=field.required)
5645

5746

5847
@convert_mongoengine_field.register(mongoengine.BooleanField)
5948
def convert_field_to_boolean(field, registry=None):
60-
return Boolean(description=get_field_description(field, registry), required=field.required)
49+
return graphene.Boolean(description=get_field_description(field, registry), required=field.required)
6150

6251

6352
@convert_mongoengine_field.register(mongoengine.DecimalField)
6453
@convert_mongoengine_field.register(mongoengine.FloatField)
6554
def convert_field_to_float(field, registry=None):
66-
return Float(description=get_field_description(field, registry), required=field.required)
55+
return graphene.Float(description=get_field_description(field, registry), required=field.required)
6756

6857

6958
@convert_mongoengine_field.register(mongoengine.DateTimeField)
7059
def convert_field_to_datetime(field, registry=None):
71-
return DateTime(description=get_field_description(field, registry), required=field.required)
60+
return graphene.DateTime(description=get_field_description(field, registry), required=field.required)
7261

7362

7463
@convert_mongoengine_field.register(mongoengine.DictField)
@@ -79,44 +68,44 @@ def convert_field_to_jsonstring(field, registry=None):
7968

8069
@convert_mongoengine_field.register(mongoengine.PointField)
8170
def convert_point_to_field(field, registry=None):
82-
return Field(advanced_types.PointFieldType)
71+
return graphene.Field(advanced_types.PointFieldType)
8372

8473

8574
@convert_mongoengine_field.register(mongoengine.PolygonField)
8675
def convert_polygon_to_field(field, registry=None):
87-
return Field(advanced_types.PolygonFieldType)
76+
return graphene.Field(advanced_types.PolygonFieldType)
8877

8978

9079
@convert_mongoengine_field.register(mongoengine.MultiPolygonField)
9180
def convert_multipolygon_to_field(field, register=None):
92-
return Field(advanced_types.MultiPolygonFieldType)
81+
return graphene.Field(advanced_types.MultiPolygonFieldType)
9382

9483

9584
@convert_mongoengine_field.register(mongoengine.FileField)
9685
def convert_file_to_field(field, registry=None):
97-
return Field(advanced_types.FileFieldType)
86+
return graphene.Field(advanced_types.FileFieldType)
9887

9988

10089
@convert_mongoengine_field.register(mongoengine.ListField)
10190
@convert_mongoengine_field.register(mongoengine.EmbeddedDocumentListField)
10291
def convert_field_to_list(field, registry=None):
10392
base_type = convert_mongoengine_field(field.field, registry=registry)
104-
if isinstance(base_type, (Dynamic)):
93+
if isinstance(base_type, (graphene.Dynamic)):
10594
base_type = base_type.get_type()
10695
if base_type is None:
10796
return
10897
base_type = base_type._type
10998

110-
if is_node(base_type):
99+
if graphene.is_node(base_type):
111100
return base_type._meta.connection_field_class(base_type)
112101

113102
# Non-relationship field
114103
relations = (mongoengine.ReferenceField, mongoengine.EmbeddedDocumentField)
115-
if not isinstance(base_type, (List, NonNull)) \
104+
if not isinstance(base_type, (graphene.List, graphene.NonNull)) \
116105
and not isinstance(field.field, relations):
117106
base_type = type(base_type)
118107

119-
return List(base_type, description=get_field_description(field, registry), required=field.required)
108+
return graphene.List(base_type, description=get_field_description(field, registry), required=field.required)
120109

121110

122111
@convert_mongoengine_field.register(mongoengine.GenericReferenceField)
@@ -143,8 +132,8 @@ def convert_field_to_union(field, registry=None):
143132
str(uuid.uuid1()).replace('-', '')
144133
)
145134
Meta = type('Meta', (object, ), {'types': tuple(_types)})
146-
_union = type(name, (Union, ), {'Meta': Meta})
147-
return Field(_union)
135+
_union = type(name, (graphene.Union, ), {'Meta': Meta})
136+
return graphene.Field(_union)
148137

149138

150139
@convert_mongoengine_field.register(mongoengine.EmbeddedDocumentField)
@@ -156,9 +145,9 @@ def dynamic_type():
156145
_type = registry.get_type_for_model(model)
157146
if not _type:
158147
return None
159-
return Field(_type, description=get_field_description(field, registry))
148+
return graphene.Field(_type, description=get_field_description(field, registry))
160149

161-
return Dynamic(dynamic_type)
150+
return graphene.Dynamic(dynamic_type)
162151

163152

164153
@convert_mongoengine_field.register(mongoengine.LazyReferenceField)
@@ -173,6 +162,6 @@ def dynamic_type():
173162
_type = registry.get_type_for_model(model)
174163
if not _type:
175164
return None
176-
return Field(_type, resolver=lazy_resolver, description=get_field_description(field, registry))
165+
return graphene.Field(_type, resolver=lazy_resolver, description=get_field_description(field, registry))
177166

178-
return Dynamic(dynamic_type)
167+
return graphene.Dynamic(dynamic_type)

graphene_mongo/tests/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
gridfs.enable_gridfs_integration()
66
mongoengine.connect('graphene-mongo-test', host='mongomock://localhost', alias='default')
7-
# mongoengine.connect('graphene-mongo-test', host='mongodb://192.168.15.91/graphene-mongo-dev')
7+
# mongoengine.connect('graphene-mongo-test', host='mongodb://localhost/graphene-mongo-dev')
88

99

1010
class Publisher(mongoengine.Document):
@@ -32,6 +32,7 @@ class Editor(mongoengine.Document):
3232
metadata = mongoengine.MapField(field=mongoengine.StringField(), help_text="Arbitrary metadata.")
3333
company = mongoengine.LazyReferenceField(Publisher)
3434
avatar = mongoengine.FileField()
35+
seq = mongoengine.SequenceField()
3536

3637

3738
class Article(mongoengine.Document):

graphene_mongo/tests/test_converter.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ def test_sould_long_convert_int():
5050
assert_conversion(mongoengine.LongField, graphene.Int)
5151

5252

53+
def test_sould_sequence_convert_field():
54+
assert_conversion(mongoengine.SequenceField, graphene.Int)
55+
56+
5357
def test_should_object_id_convert_id():
5458
assert_conversion(mongoengine.ObjectIdField, graphene.ID)
5559

graphene_mongo/tests/test_fields.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def test_reporter_field_args():
2727
def test_editor_field_args():
2828
field = MongoengineConnectionField(nodes.EditorNode)
2929

30-
field_args = {'id', 'first_name', 'last_name', 'metadata'}
30+
field_args = {'id', 'first_name', 'last_name', 'metadata', 'seq'}
3131
assert set(field.field_args.keys()) == field_args
3232

3333

0 commit comments

Comments
 (0)