@@ -187,7 +187,7 @@ def get_permissions(self):
187
187
permissions .append (auth .TaskAccessPermission )
188
188
elif http_method in ["POST" ]:
189
189
permissions .append (auth .TaskCreatePermission )
190
- elif http_method in ["PATCH" , "PUT" ]:
190
+ elif self . action == 'annotations' or http_method in ["PATCH" , "PUT" ]:
191
191
permissions .append (auth .TaskChangePermission )
192
192
elif http_method in ["DELETE" ]:
193
193
permissions .append (auth .TaskDeletePermission )
@@ -207,9 +207,9 @@ def perform_destroy(self, instance):
207
207
super ().perform_destroy (instance )
208
208
shutil .rmtree (task_dirname , ignore_errors = True )
209
209
210
- @staticmethod
211
210
@action (detail = True , methods = ['GET' ], serializer_class = JobSerializer )
212
- def jobs (request , pk ):
211
+ def jobs (self , request , pk ):
212
+ self .get_object () # force to call check_object_permissions
213
213
queryset = Job .objects .filter (segment__task_id = pk )
214
214
serializer = JobSerializer (queryset , many = True ,
215
215
context = {"request" : request })
@@ -218,7 +218,7 @@ def jobs(request, pk):
218
218
219
219
@action (detail = True , methods = ['POST' ], serializer_class = TaskDataSerializer )
220
220
def data (self , request , pk ):
221
- db_task = self .get_object ()
221
+ db_task = self .get_object () # call check_object_permissions as well
222
222
serializer = TaskDataSerializer (db_task , data = request .data )
223
223
if serializer .is_valid (raise_exception = True ):
224
224
serializer .save ()
@@ -228,6 +228,7 @@ def data(self, request, pk):
228
228
@action (detail = True , methods = ['GET' , 'DELETE' , 'PUT' , 'PATCH' ],
229
229
serializer_class = LabeledDataSerializer )
230
230
def annotations (self , request , pk ):
231
+ self .get_object () # force to call check_object_permissions
231
232
if request .method == 'GET' :
232
233
data = annotation .get_task_data (pk , request .user )
233
234
serializer = LabeledDataSerializer (data = data )
@@ -267,7 +268,7 @@ def annotations(self, request, pk):
267
268
def dump (self , request , pk , filename ):
268
269
filename = re .sub (r'[\\/*?:"<>|]' , '_' , filename )
269
270
username = request .user .username
270
- db_task = self .get_object ()
271
+ db_task = self .get_object () # call check_object_permissions as well
271
272
timestamp = datetime .now ().strftime ("%Y_%m_%d_%H_%M_%S" )
272
273
action = request .query_params .get ("action" )
273
274
if action not in [None , "download" ]:
@@ -325,6 +326,7 @@ def dump(self, request, pk, filename):
325
326
326
327
@action (detail = True , methods = ['GET' ], serializer_class = RqStatusSerializer )
327
328
def status (self , request , pk ):
329
+ self .get_object () # force to call check_object_permissions
328
330
response = self ._get_rq_response (queue = "default" ,
329
331
job_id = "/api/{}/tasks/{}" .format (request .version , pk ))
330
332
serializer = RqStatusSerializer (data = response )
@@ -350,12 +352,11 @@ def _get_rq_response(queue, job_id):
350
352
351
353
return response
352
354
353
- @staticmethod
354
355
@action (detail = True , methods = ['GET' ], serializer_class = ImageMetaSerializer ,
355
356
url_path = 'frames/meta' )
356
- def data_info (request , pk ):
357
+ def data_info (self , request , pk ):
357
358
try :
358
- db_task = models . Task . objects . get ( pk = pk )
359
+ db_task = self . get_object () # call check_object_permissions as well
359
360
meta_cache_file = open (db_task .get_image_meta_cache_path ())
360
361
except OSError :
361
362
task .make_image_meta_cache (db_task )
@@ -404,6 +405,7 @@ def get_permissions(self):
404
405
@action (detail = True , methods = ['GET' , 'DELETE' , 'PUT' , 'PATCH' ],
405
406
serializer_class = LabeledDataSerializer )
406
407
def annotations (self , request , pk ):
408
+ self .get_object () # force to call check_object_permissions
407
409
if request .method == 'GET' :
408
410
data = annotation .get_job_data (pk , request .user )
409
411
return Response (data )
0 commit comments