55from django .db .models import QuerySet , Subquery
66
77from django .forms .widgets import Media
8- from django .http .response import HttpResponse , HttpResponseBadRequest , HttpResponseNotFound , JsonResponse
8+ from django .http .response import HttpResponse , HttpResponseNotAllowed , HttpResponseNotFound , JsonResponse
99from django .templatetags .static import static
1010from django .urls import path , reverse
1111from django .utils .translation import gettext
@@ -175,8 +175,12 @@ def get_model_admin(self, mime_type):
175175 return self ._model_admin_cache [mime_type ]
176176
177177 def fetch_inodes (self , request , folder_id ):
178- if not (current_folder := self .get_object (request , folder_id )):
179- return HttpResponseNotFound (f"Folder { folder_id } not found." )
178+ if request .method != 'GET' :
179+ return HttpResponseNotAllowed (f"Method { request .method } not allowed. Only GET requests are allowed." )
180+ try :
181+ current_folder = self .get_object (request , folder_id )
182+ except ObjectDoesNotExist :
183+ return HttpResponseNotFound (f"FolderModel<{ folder_id } > not found." )
180184 if search_query := request .GET .get ('q' ):
181185 inode_qs = self .search_for_inodes (request , current_folder , search_query )
182186 else :
@@ -204,11 +208,13 @@ def search_for_inodes(self, request, current_folder, search_query, **lookup):
204208
205209 def upload_file (self , request , folder_id ):
206210 if request .method != 'POST' :
207- return HttpResponseBadRequest (f"Method { request .method } not allowed. Only POST requests are allowed." )
208- if not (folder := self .get_object (request , folder_id )):
209- return HttpResponseNotFound (f"Folder { folder_id } not found." )
211+ return HttpResponseNotAllowed (f"Method { request .method } not allowed. Only POST requests are allowed." )
212+ try :
213+ folder = self .get_object (request , folder_id )
214+ except ObjectDoesNotExist :
215+ return HttpResponseNotFound (f"FolderModel<{ folder_id } > not found." )
210216 if request .content_type != 'multipart/form-data' or 'upload_file' not in request .FILES :
211- return HttpResponseBadRequest ("Bad encoding type or missing payload." )
217+ return HttpResponse ("Bad encoding type or missing payload." , status = 415 )
212218 model = FileModel .objects .get_model_for (request .FILES ['upload_file' ].content_type )
213219 new_file = model .objects .create_from_upload (
214220 request .FILES ['upload_file' ],
@@ -223,33 +229,27 @@ def update_inode(self, request, folder_id):
223229 body = json .loads (request .body )
224230 try :
225231 obj = self .get_object (request , body ['id' ])
226- except (InodeModel . DoesNotExist , KeyError ):
227- return HttpResponseNotFound (f"Inode( id={ body .get ('id' , '<missing>' )} ) not found." )
232+ except (ObjectDoesNotExist , KeyError ):
233+ return HttpResponseNotFound (f"InodeModel< id={ body .get ('id' , '<missing>' )} > not found." )
228234 current_folder = self .get_object (request , folder_id )
229235 inode_name = body ['name' ]
230236 try :
231237 filename_validator (inode_name )
232238 except ValidationError as exc :
233- return HttpResponseBadRequest (exc .messages [0 ], status = 409 )
239+ return HttpResponse (exc .messages [0 ], status = 409 )
234240 if current_folder .listdir (name = inode_name , is_folder = True ).exists ():
235241 msg = gettext ("A folder named “{name}” already exists." )
236- return HttpResponseBadRequest (msg .format (name = inode_name ), status = 409 )
242+ return HttpResponse (msg .format (name = inode_name ), status = 409 )
237243 update_values = {}
238244 for field in self .get_fields (request , obj ):
239245 if field in body and body [field ] != getattr (obj , field ):
240246 setattr (obj , field , body [field ])
241247 update_values [field ] = body [field ]
242248 if update_values :
243249 obj .save (update_fields = list (update_values .keys ()))
244- favorite_folders = self .get_favorite_folders (request , current_folder )
245- if update_values :
246- for folder in favorite_folders :
247- if folder ['id' ] == obj .id :
248- folder .update (update_values )
249- break
250250 return JsonResponse ({
251251 'new_inode' : self .serialize_inode (obj ),
252- 'favorite_folders' : favorite_folders ,
252+ 'favorite_folders' : self . get_favorite_folders ( request , current_folder ) ,
253253 })
254254
255255 def copy_inodes (self , request , folder_id ):
@@ -263,7 +263,7 @@ def copy_inodes(self, request, folder_id):
263263 try :
264264 inode .copy_to (current_folder , owner = request .user )
265265 except RecursionError as exc :
266- return HttpResponseBadRequest (str (exc ), status = 409 )
266+ return HttpResponse (str (exc ), status = 409 )
267267 return JsonResponse ({
268268 'inodes' : list (self .get_inodes (request , parent = current_folder )),
269269 })
@@ -291,7 +291,7 @@ def move_inodes(self, request, folder_id):
291291 proxy_obj .validate_constraints ()
292292 proxy_obj ._meta .model .objects .filter (id = entry ['id' ]).update (parent = target_folder )
293293 except ValidationError as exc :
294- return HttpResponseBadRequest (exc .messages [0 ], status = 409 )
294+ return HttpResponse (exc .messages [0 ], status = 409 )
295295 return JsonResponse ({
296296 'inodes' : list (self .get_inodes (request , parent = target_folder )),
297297 })
@@ -303,7 +303,7 @@ def delete_inodes(self, request, folder_id):
303303 current_folder = self .get_object (request , folder_id )
304304 trash_folder = self .get_trash_folder (request )
305305 if current_folder .id == trash_folder .id :
306- return HttpResponseBadRequest ("Cannot move inodes from trash folder into itself." )
306+ return HttpResponse ("Cannot move inodes from trash folder into itself." , status = 409 )
307307 inode_ids = body .get ('inode_ids' , [])
308308 for entry in FolderModel .objects .filter_unified (id__in = inode_ids ):
309309 inode = FolderModel .objects .get_inode (id = entry ['id' ])
@@ -324,7 +324,7 @@ def delete_inodes(self, request, folder_id):
324324
325325 def undo_discarded_inodes (self , request ):
326326 if request .method != 'POST' :
327- return HttpResponseBadRequest (f"Method { request .method } not allowed. Only POST requests are allowed." )
327+ return HttpResponseNotAllowed (f"Method { request .method } not allowed. Only POST requests are allowed." )
328328 body = json .loads (request .body )
329329 trash_folder = self .get_trash_folder (request )
330330 discarded_inodes = DiscardedInode .objects .filter (inode__in = body .get ('inode_ids' , []))
@@ -337,7 +337,7 @@ def undo_discarded_inodes(self, request):
337337
338338 def erase_trash_folder (self , request ):
339339 if request .method != 'DELETE' :
340- return HttpResponseBadRequest (f"Method { request .method } not allowed. Only DELETE requests are allowed." )
340+ return HttpResponseNotAllowed (f"Method { request .method } not allowed. Only DELETE requests are allowed." )
341341 trash_folder_entries = self .get_trash_folder (request ).listdir ()
342342 DiscardedInode .objects .filter (inode__in = list (trash_folder_entries .values_list ('id' , flat = True ))).delete ()
343343 for entry in trash_folder_entries :
@@ -360,7 +360,7 @@ def add_folder(self, request, folder_id):
360360 body = json .loads (request .body )
361361 if parent_folder .listdir (name = body ['name' ], is_folder = True ).exists ():
362362 msg = gettext ("A folder named “{name}” already exists." )
363- return HttpResponseBadRequest (msg .format (name = body ['name' ]), status = 409 )
363+ return HttpResponse (msg .format (name = body ['name' ]), status = 409 )
364364 new_folder = FolderModel .objects .create (
365365 name = body ['name' ],
366366 parent = parent_folder ,
0 commit comments