2323 RecognizedAudioToProcess ,
2424 RecognizedPresentationsToProcess , Sessions ,
2525 TaskAttempts , TaskAttemptsToPassBack , Tasks ,
26- Trainings , TrainingsToProcess )
26+ Trainings , TrainingsToProcess , StorageMeta )
2727from app .status import (AudioStatus , PassBackStatus , PresentationStatus ,
2828 TrainingStatus )
2929from app .utils import remove_blank_and_none
@@ -42,7 +42,17 @@ def __new__(cls):
4242 return cls .instance
4343
4444 def add_file (self , file , filename = uuid .uuid4 ()):
45- return self .storage .save (name = filename , content = file )
45+ try :
46+ file .seek (0 , os .SEEK_END )
47+ size = file .tell ()
48+ file .seek (0 )
49+ except :
50+ if (isinstance (file , str )):
51+ size = len (file )
52+ self .check_storage_limit (size )
53+ _id = self .storage .save (name = filename , content = file )
54+ self .update_storage_size (size )
55+ return _id
4656
4757 def read_and_add_file (self , path , filename = None ):
4858 if filename is None :
@@ -67,6 +77,33 @@ def get_file(self, file_id):
6777 except (NoFile , ValidationError , InvalidId ) as e :
6878 logger .warning ('file_id = {}, {}.' .format (file_id , e ))
6979 return None
80+
81+ def _get_or_create_storage_meta (self ):
82+ try :
83+ return StorageMeta .objects .get ({})
84+ except StorageMeta .DoesNotExist :
85+ meta = StorageMeta (used_size = 0 ).save ()
86+ return meta
87+
88+ def get_used_storage_size (self ):
89+ return self ._get_or_create_storage_meta ().used_size
90+
91+ def set_used_storage_size (self , size ):
92+ meta = self ._get_or_create_storage_meta ()
93+ meta .used_size = size
94+ meta .save ()
95+
96+ def update_storage_size (self , deltasize ):
97+ meta = self ._get_or_create_storage_meta ()
98+ meta .used_size += deltasize
99+ meta .save ()
100+
101+ def check_storage_limit (self , new_file_size ):
102+ max_size = int (Config .c .constants .storage_max_size_bytes )* 1024 * 1024
103+ current_size = self .get_used_storage_size ()
104+ if current_size + new_file_size > max_size :
105+ logger .warning ('current_size = {}, new file size = {}' .format (current_size , new_file_size ))
106+
70107
71108
72109class TrainingsDBManager :
0 commit comments