Skip to content

Commit c94e024

Browse files
authored
Merge pull request #90 from graphql-python/refactor-advanced-type-resolver
Refactor advanced type resolver
2 parents 20a50d2 + 6ba2db3 commit c94e024

File tree

1 file changed

+35
-43
lines changed

1 file changed

+35
-43
lines changed

graphene_mongo/advanced_types.py

Lines changed: 35 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,75 +2,67 @@
22
import graphene
33

44

5-
def _resolve_type_coordinates(self, info):
6-
return self['coordinates']
7-
8-
9-
def _resolve_fs_field(field, name, default_value=None):
10-
v = getattr(field.instance, field.key)
11-
return getattr(v, name, default_value)
12-
13-
14-
def _resolve_content_type(self, info):
15-
return _resolve_fs_field(self, 'content_type')
16-
17-
18-
def _resolve_md5(self, info):
19-
return _resolve_fs_field(self, 'md5')
20-
21-
22-
def _resolve_chunk_size(self, info):
23-
return _resolve_fs_field(self, 'chunk_size', 0)
5+
class FileFieldType(graphene.ObjectType):
246

7+
content_type = graphene.String()
8+
md5 = graphene.String()
9+
chunk_size = graphene.Int()
10+
length = graphene.Int()
11+
data = graphene.String()
2512

26-
def _resolve_length(self, info):
27-
return _resolve_fs_field(self, 'length', 0)
13+
@classmethod
14+
def _resolve_fs_field(cls, field, name, default_value=None):
15+
v = getattr(field.instance, field.key)
16+
return getattr(v, name, default_value)
2817

18+
def resolve_content_type(self, info):
19+
return FileFieldType._resolve_fs_field(self, 'content_type')
2920

30-
def _resolve_data(self, info):
31-
v = getattr(self.instance, self.key)
32-
data = v.read()
33-
if data is not None:
34-
return base64.b64encode(data)
35-
return None
21+
def resolve_md5(self, info):
22+
return FileFieldType._resolve_fs_field(self, 'md5')
3623

24+
def resolve_chunk_size(self, info):
25+
return FileFieldType._resolve_fs_field(self, 'chunk_size', 0)
3726

38-
class FileFieldType(graphene.ObjectType):
27+
def resolve_length(self, info):
28+
return FileFieldType._resolve_fs_field(self, 'length', 0)
3929

40-
content_type = graphene.String(resolver=_resolve_content_type)
41-
md5 = graphene.String(resolver=_resolve_md5)
42-
chunk_size = graphene.Int(resolver=_resolve_chunk_size)
43-
length = graphene.Int(resolver=_resolve_length)
44-
data = graphene.String(resolver=_resolve_data)
30+
def resolve_data(self, info):
31+
v = getattr(self.instance, self.key)
32+
data = v.read()
33+
if data is not None:
34+
return base64.b64encode(data)
35+
return None
4536

4637

47-
class _TypeField(graphene.ObjectType):
38+
class _CoordinatesTypeField(graphene.ObjectType):
4839

4940
type = graphene.String()
5041

5142
def resolve_type(self, info):
5243
return self['type']
5344

45+
def resolve_coordinates(self, info):
46+
return self['coordinates']
5447

55-
class PointFieldType(_TypeField):
5648

57-
coordinates = graphene.List(
58-
graphene.Float, resolver=_resolve_type_coordinates)
49+
class PointFieldType(_CoordinatesTypeField):
50+
51+
coordinates = graphene.List(graphene.Float)
5952

6053

61-
class PolygonFieldType(_TypeField):
54+
class PolygonFieldType(_CoordinatesTypeField):
6255

6356
coordinates = graphene.List(
6457
graphene.List(
65-
graphene.List(graphene.Float)),
66-
resolver=_resolve_type_coordinates
58+
graphene.List(graphene.Float))
6759
)
6860

6961

70-
class MultiPolygonFieldType(_TypeField):
62+
class MultiPolygonFieldType(_CoordinatesTypeField):
7163

7264
coordinates = graphene.List(
7365
graphene.List(
7466
graphene.List(
75-
graphene.List(graphene.Float))),
76-
resolver=_resolve_type_coordinates)
67+
graphene.List(graphene.Float)))
68+
)

0 commit comments

Comments
 (0)