Skip to content

Commit e92fb72

Browse files
committed
baseapp-files: initial package
1 parent 3159974 commit e92fb72

3 files changed

Lines changed: 37 additions & 9 deletions

File tree

baseapp_core/graphql/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from .connections import CountedConnection # noqa
22
from .decorators import login_required, user_passes_test # noqa
33
from .errors import Errors, ErrorType # noqa
4-
from .fields import File, ThumbnailField # noqa
4+
from .fields import get_file_object_type, ThumbnailField # noqa
55
from .middlewares import ( # noqa
66
JWTAuthentication,
77
LogExceptionMiddleware,

baseapp_core/graphql/fields.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import graphene
2+
from django.apps import apps
23
from django.conf import settings
34
from django.core.cache import InvalidCacheBackendError, caches
45
from easy_thumbnails.files import get_thumbnailer
@@ -8,15 +9,23 @@
89
except InvalidCacheBackendError:
910
cache = None
1011

12+
def get_file_object_type():
13+
if apps.is_installed("baseapp_files"):
14+
from baseapp_files.graphql.object_types import FileObjectType
15+
else:
16+
class FileObjectType(graphene.ObjectType):
17+
url = graphene.String(required=True)
18+
# contentType = graphene.String()
19+
# bytes = graphene.Int()
1120

12-
class File(graphene.ObjectType):
13-
url = graphene.String(required=True)
14-
# contentType = graphene.String()
15-
# bytes = graphene.Int()
21+
class Meta:
22+
name = "File"
23+
24+
return FileObjectType
1625

1726

1827
class ThumbnailField(graphene.Field):
19-
def __init__(self, type=File, **kwargs):
28+
def __init__(self, type=get_file_object_type, **kwargs):
2029
kwargs.update(
2130
{
2231
"args": {
@@ -29,6 +38,7 @@ def __init__(self, type=File, **kwargs):
2938

3039
def get_resolver(self, parent_resolver):
3140
resolver = self.resolver or parent_resolver
41+
FileObjectType = get_file_object_type()
3242

3343
def built_thumbnail(instance, info, width, height, **kwargs):
3444
instance = resolver(instance, info, **kwargs)
@@ -40,7 +50,7 @@ def built_thumbnail(instance, info, width, height, **kwargs):
4050
cache_key = self._get_cache_key(instance, width, height)
4151
value_from_cache = cache.get(cache_key)
4252
if value_from_cache:
43-
return File(url=value_from_cache)
53+
return FileObjectType(url=value_from_cache)
4454

4555
thumbnailer = get_thumbnailer(instance)
4656
url = thumbnailer.get_thumbnail({"size": (width, height)}).url
@@ -49,7 +59,7 @@ def built_thumbnail(instance, info, width, height, **kwargs):
4959
if cache:
5060
cache.set(cache_key, absolute_url, timeout=None)
5161

52-
return File(url=absolute_url)
62+
return FileObjectType(url=absolute_url)
5363

5464
return built_thumbnail
5565

baseapp_core/graphql/views.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import logging
1+
import json, logging
22
from contextlib import contextmanager
33

44
import pghistory
@@ -7,6 +7,8 @@
77
from graphene_django.views import HttpError
88
from graphql import get_operation_ast, parse
99
from graphql.execution import ExecutionResult
10+
# from graphene_file_upload.utils import place_files_in_operations
11+
1012

1113
try:
1214
import sentry_sdk
@@ -60,3 +62,19 @@ def execute_graphql_request(
6062
return super().execute_graphql_request(
6163
request, data, query, variables, operation_name, show_graphiql
6264
)
65+
66+
def parse_body(self, request):
67+
"""Handle multipart request spec for multipart/form-data"""
68+
content_type = self.get_content_type(request)
69+
# logging.info('content_type: %s' % content_type)
70+
# import pdb; pdb.set_trace()
71+
if content_type == 'multipart/form-data' and 'operations' in request.POST:
72+
operations = json.loads(request.POST.get('operations', '{}'))
73+
# import pdb; pdb.set_trace()
74+
files_map = json.loads(request.POST.get('map', '{}'))
75+
return place_files_in_operations(
76+
operations,
77+
files_map,
78+
request.FILES
79+
)
80+
return super(GraphQLView, self).parse_body(request)

0 commit comments

Comments
 (0)