|
1 | 1 | import base64
|
2 |
| -import mongoengine |
3 | 2 | import graphene
|
4 | 3 |
|
5 |
| -from .types import MongoengineObjectType |
6 |
| - |
7 | 4 |
|
8 | 5 | def _resolve_type_coordinates(self, info):
|
9 | 6 | return self['coordinates']
|
10 | 7 |
|
11 | 8 |
|
12 |
| -def _resolve_data(self, info): |
13 |
| - v = getattr(self.instance, self.key) |
14 |
| - return base64.b64encode(v.read()) |
| 9 | +def _resolve_fs_field(field, name, default_value=None): |
| 10 | + v = getattr(field.instance, field.key) |
| 11 | + return getattr(v, name, default_value) |
15 | 12 |
|
16 | 13 |
|
17 |
| -class FsFile(mongoengine.Document): |
| 14 | +def _resolve_content_type(self, info): |
| 15 | + return _resolve_fs_field(self, 'content_type') |
18 | 16 |
|
19 |
| - # TODO: Need to take care collection name instead of hard-code |
20 |
| - meta = {'collection': 'fs.files'} |
21 |
| - content_type = mongoengine.StringField(name='contentType') |
22 |
| - chunk_size = mongoengine.IntField(name='chunkSize') |
23 |
| - length = mongoengine.IntField() |
24 |
| - md5 = mongoengine.StringField() |
25 | 17 |
|
| 18 | +def _resolve_md5(self, info): |
| 19 | + return _resolve_fs_field(self, 'md5') |
26 | 20 |
|
27 |
| -class FsFileType(MongoengineObjectType): |
28 | 21 |
|
29 |
| - class Meta: |
30 |
| - model = FsFile |
| 22 | +def _resolve_chunk_size(self, info): |
| 23 | + return _resolve_fs_field(self, 'chunk_size', 0) |
31 | 24 |
|
32 |
| - # data = graphene.String( |
33 |
| - # resolver=lambda self, *args, **kwargs: self.resolve_data()) |
34 | 25 |
|
35 |
| - data = graphene.String( |
36 |
| - resolver=_resolve_data) |
| 26 | +def _resolve_length(self, info): |
| 27 | + return _resolve_fs_field(self, 'length', 0) |
37 | 28 |
|
38 |
| - def resolve_data(self): |
39 |
| - v = getattr(self.instance, self.key) |
40 |
| - data = v.read() |
41 |
| - print(type(data)) |
| 29 | + |
| 30 | +def _resolve_data(self, info): |
| 31 | + v = getattr(self.instance, self.key) |
| 32 | + data = v.read() |
| 33 | + if data is not None: |
42 | 34 | return base64.b64encode(data)
|
| 35 | + return None |
| 36 | + |
| 37 | + |
| 38 | +class FileFieldType(graphene.ObjectType): |
| 39 | + |
| 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) |
43 | 45 |
|
44 | 46 |
|
45 | 47 | class _TypeField(graphene.ObjectType):
|
|
0 commit comments