4949from django .db .models .signals import pre_delete
5050from django .db .models .fields .files import FieldFile
5151from django .core .exceptions import SuspiciousFileOperation
52+ from django .core .files .base import ContentFile
5253# Local Imports
5354from yaksh .code_server import (
5455 submit , get_result as get_result_from_code_server
@@ -167,9 +168,9 @@ def dict_to_yaml(dictionary):
167168
168169def get_file_dir (instance , filename ):
169170 if isinstance (instance , LessonFile ):
170- upload_dir = instance .lesson .name . replace ( " " , "_" )
171+ upload_dir = f"Lesson_ { instance .lesson .id } "
171172 else :
172- upload_dir = instance .name . replace ( " " , "_" )
173+ upload_dir = f"Lesson_ { instance .id } "
173174 return os .sep .join ((upload_dir , filename ))
174175
175176
@@ -337,7 +338,7 @@ def __str__(self):
337338 return "{0}" .format (self .name )
338339
339340 def get_files (self ):
340- return LessonFile .objects .filter (lesson = self )
341+ return LessonFile .objects .filter (lesson_id = self . id )
341342
342343 def _create_lesson_copy (self , user ):
343344 lesson_files = self .get_files ()
@@ -346,20 +347,19 @@ def _create_lesson_copy(self, user):
346347 new_lesson .creator = user
347348 new_lesson .save ()
348349 for _file in lesson_files :
349- file_name = os .path .basename (_file .file .name )
350- if os .path .exists (_file .file .path ):
351- lesson_file = open (_file .file .path , "rb" )
352- django_file = File (lesson_file )
353- lesson_file_obj = LessonFile ()
354- lesson_file_obj .lesson = new_lesson
355- lesson_file_obj .file .save (file_name , django_file , save = True )
350+ try :
351+ file_name = os .path .basename (_file .file .name )
352+ lesson_file = ContentFile (_file .file .read ())
353+ new_lesson_file = LessonFile ()
354+ new_lesson_file .lesson_id = self .id
355+ new_lesson_file .file .save (file_name , lesson_file , save = True )
356+ new_lesson_file .save ()
357+ except FileNotFoundError :
358+ pass
356359 return new_lesson
357360
358361 def remove_file (self ):
359- if self .video_file :
360- file_path = self .video_file .path
361- if os .path .exists (file_path ):
362- os .remove (file_path )
362+ self .video_file .delete ()
363363
364364 def _add_lesson_to_zip (self , next_unit , module , course , zip_file , path ):
365365 lesson_name = self .name .replace (" " , "_" )
@@ -388,21 +388,16 @@ def _add_lesson_to_zip(self, next_unit, module, course, zip_file, path):
388388 write_templates_to_zip (zip_file , unit_file_path , lesson_data ,
389389 lesson_name , sub_folder_name )
390390
391+ pre_delete .connect (file_cleanup , sender = Lesson )
391392
392393#############################################################################
393394class LessonFile (models .Model ):
394395 lesson = models .ForeignKey (Lesson , related_name = "lesson" ,
395396 on_delete = models .CASCADE )
396397 file = models .FileField (upload_to = get_file_dir , default = None )
397398
398- def remove (self ):
399- if os .path .exists (self .file .path ):
400- os .remove (self .file .path )
401- if os .listdir (os .path .dirname (self .file .path )) == []:
402- os .rmdir (os .path .dirname (self .file .path ))
403- self .delete ()
404-
405399pre_delete .connect (file_cleanup , sender = LessonFile )
400+
406401###############################################################################
407402class QuizManager (models .Manager ):
408403 def get_active_quizzes (self ):
@@ -1584,11 +1579,10 @@ def _add_and_get_files(self, zip_file):
15841579 files_list = []
15851580 for f in files :
15861581 zip_file .writestr (
1587- os .path .join ("additional_files" ,
1588- os .path .basename (f .file .url )),
1582+ os .path .join ("additional_files" , os .path .basename (f .file .name )),
15891583 f .file .read ()
15901584 )
1591- files_list .append (((os .path .basename (f .file .url )), f .extract ))
1585+ files_list .append (((os .path .basename (f .file .name )), f .extract ))
15921586 return files_list
15931587
15941588 def _add_files_to_db (self , file_names , path ):
@@ -1681,13 +1675,6 @@ class FileUpload(models.Model):
16811675 extract = models .BooleanField (default = False )
16821676 hide = models .BooleanField (default = False )
16831677
1684- def remove (self ):
1685- if os .path .exists (self .file .path ):
1686- os .remove (self .file .path )
1687- if os .listdir (os .path .dirname (self .file .path )) == []:
1688- os .rmdir (os .path .dirname (self .file .path ))
1689- self .delete ()
1690-
16911678 def set_extract_status (self ):
16921679 if self .extract :
16931680 self .extract = False
0 commit comments