|
29 | 29 | from app.utils import remove_blank_and_none |
30 | 30 |
|
31 | 31 | logger = get_root_logger() |
32 | | - |
| 32 | + |
| 33 | +BYTES_PER_MB = 1024*1024 |
33 | 34 |
|
34 | 35 | class DBManager: |
35 | | - def __new__(cls, max_size=20000): # max_size only on first creation |
| 36 | + def __new__(cls, max_size=20000): # max_size only on first creation, in MB |
36 | 37 | if not hasattr(cls, 'init_done'): |
37 | 38 | cls.instance = super(DBManager, cls).__new__(cls) |
38 | 39 | connect(Config.c.mongodb.url + Config.c.mongodb.database_name) |
39 | 40 | cls.instance.storage = GridFSStorage(GridFSBucket(_get_db())) |
40 | | - cls.instance.max_size = max_size |
| 41 | + cls.instance.max_size = max_size * BYTES_PER_MB |
41 | 42 | cls.init_done = True |
42 | 43 | return cls.instance |
43 | 44 |
|
44 | | - # returns id of saved file and None if storage limit exceeded |
45 | 45 | def add_file(self, file, filename=uuid.uuid4()): |
46 | 46 | try: |
47 | 47 | file.seek(0, os.SEEK_END) |
48 | 48 | size = file.tell() |
49 | 49 | file.seek(0) |
50 | 50 | except: |
51 | 51 | size = len(file) |
52 | | - cur_size = self.check_storage_limit(size) |
53 | | - if cur_size > self.max_size: |
54 | | - logger.error(f"Could not save file {filename}: Storage limit exceeded") |
55 | | - return None # storage limit exceeded, can't add file |
56 | 52 | _id = self.storage.save(name=filename, content=file) |
57 | 53 | self.update_storage_size(size) |
58 | 54 | return _id |
@@ -100,17 +96,21 @@ def update_storage_size(self, deltasize): |
100 | 96 | meta = self._get_or_create_storage_meta() |
101 | 97 | meta.used_size += deltasize |
102 | 98 | meta.save() |
| 99 | + |
| 100 | + def get_max_size(self): |
| 101 | + return self.max_size |
103 | 102 |
|
| 103 | + # returns Bool variable - True if file can be stored else False |
104 | 104 | def check_storage_limit(self, new_file_size): |
105 | 105 | current_size = self.get_used_storage_size() |
106 | 106 | inf_msg = ( |
107 | 107 | f"Check for ability to add file: " |
108 | | - f"Current: {current_size/(1024*1024):.2f} MB, " |
109 | | - f"New file: {new_file_size/(1024*1024):.2f} MB, " |
110 | | - f"Storage size: {self.max_size} MB" |
| 108 | + f"Current: {current_size/BYTES_PER_MB:.2f} MB, " |
| 109 | + f"New file: {new_file_size/BYTES_PER_MB:.2f} MB, " |
| 110 | + f"Storage size: {self.max_size/BYTES_PER_MB} MB" |
111 | 111 | ) |
112 | 112 | logger.info(inf_msg) |
113 | | - return current_size + new_file_size |
| 113 | + return False if current_size + new_file_size > self.max_size else True |
114 | 114 |
|
115 | 115 |
|
116 | 116 | class TrainingsDBManager: |
|
0 commit comments