20
20
import io
21
21
from PIL import Image
22
22
23
+ from bosscore .renderer_helper import check_for_403
23
24
24
25
class BloscPythonRenderer (renderers .BaseRenderer ):
25
26
""" A DRF renderer for a blosc encoded cube of data using the numpy interface
@@ -31,6 +32,7 @@ class BloscPythonRenderer(renderers.BaseRenderer):
31
32
charset = None
32
33
render_style = 'binary'
33
34
35
+ @check_for_403
34
36
def render (self , data , media_type = None , renderer_context = None ):
35
37
36
38
if not data ["data" ].data .flags ['C_CONTIGUOUS' ]:
@@ -52,8 +54,18 @@ class BloscRenderer(renderers.BaseRenderer):
52
54
charset = None
53
55
render_style = 'binary'
54
56
57
+ @check_for_403
55
58
def render (self , data , media_type = None , renderer_context = None ):
56
59
60
+ if renderer_context ['response' ].status_code == 403 :
61
+ renderer_context ["accepted_media_type" ] = 'application/json'
62
+ self .media_type = 'application/json'
63
+ self .format = 'json'
64
+ err_msg = {"status" : 403 , "message" : "Access denied, are you logged in?" ,
65
+ "code" : 2005 }
66
+ jr = JSONRenderer ()
67
+ return jr .render (err_msg , 'application/json' , renderer_context )
68
+
57
69
if not data ["data" ].data .flags ['C_CONTIGUOUS' ]:
58
70
data ["data" ].data = np .ascontiguousarray (data ["data" ].data , dtype = data ["data" ].data .dtype )
59
71
@@ -75,6 +87,7 @@ class NpygzRenderer(renderers.BaseRenderer):
75
87
charset = None
76
88
render_style = 'binary'
77
89
90
+ @check_for_403
78
91
def render (self , data , media_type = None , renderer_context = None ):
79
92
80
93
if not data ["data" ].data .flags ['C_CONTIGUOUS' ]:
@@ -106,6 +119,7 @@ class JpegRenderer(renderers.BaseRenderer):
106
119
charset = None
107
120
render_style = 'binary'
108
121
122
+ @check_for_403
109
123
def render (self , data , media_type = None , renderer_context = None ):
110
124
111
125
# Return data, squeezing time dimension as this only works with 3D data
@@ -115,6 +129,7 @@ def render(self, data, media_type=None, renderer_context=None):
115
129
else :
116
130
# This appears to contain time data. Error out
117
131
renderer_context ["response" ].status_code = 400
132
+ renderer_context ['response' ]['Content-Type' ] = 'application/json'
118
133
renderer_context ["accepted_media_type" ] = 'application/json'
119
134
self .media_type = 'application/json'
120
135
self .format = 'json'
@@ -126,6 +141,7 @@ def render(self, data, media_type=None, renderer_context=None):
126
141
if renderer_context ['view' ].bit_depth != 8 :
127
142
# This renderer only works on uint8 data
128
143
renderer_context ["response" ].status_code = 400
144
+ renderer_context ['response' ]['Content-Type' ] = 'application/json'
129
145
renderer_context ["accepted_media_type" ] = 'application/json'
130
146
self .media_type = 'application/json'
131
147
self .format = 'json'
0 commit comments