88import threading
99import time
1010from pathlib import Path
11- from typing import Tuple , List , Optional , Union , Dict
11+ from typing import Tuple , List , Optional , Union , Dict , Callable
1212
1313import fuse
1414
@@ -49,6 +49,10 @@ class _DbHelper:
4949 __QUERY_BACKUP_THRESHOLD = 2
5050 __QUERY_BACKUP_DIR_FILES_THRESHOLD = 3
5151
52+ __parse_backup_id : Callable [[str ], Optional [int ]]
53+ __query_all_backups : Callable [[], Dict [int , BackupInfo ]]
54+ __query_backup_files : Callable [[int ], Optional [_NiceBackupFiles ]]
55+
5256 def __init__ (self ):
5357 self .logger : logging .Logger = get_logger ()
5458 self .__file_query_counter : TTLLRUCounter [int ] = TTLLRUCounter (capacity = 128 , ttl = 1 )
@@ -63,11 +67,12 @@ def __init__(self):
6367 if FuseConfig .get ().no_cache :
6468 self .__parse_backup_id = self .__parse_backup_id_no_cache
6569 self .__query_all_backups = self .__query_all_backups_no_cache
66- self .__query_backup_files = self .__parse_backup_id_no_cache
70+ self .__query_backup_files = self .__query_backup_files_no_cache
6771 else :
6872 self .__parse_backup_id = ttl_lru_cache (ttl = 1 , capacity = 128 )(self .__parse_backup_id_no_cache )
6973 self .__query_all_backups = ttl_lru_cache (ttl = 3 , capacity = 4 )(self .__query_all_backups_no_cache )
7074 self .__query_backup_files = ttl_lru_cache (ttl = 1 , capacity = 4 )(self .__query_backup_files_no_cache )
75+ # noinspection PyUnresolvedReferences
7176 self .__ttl_lru_caches .extend ([
7277 self .__parse_backup_id .cache ,
7378 self .__query_all_backups .cache ,
@@ -103,7 +108,8 @@ def __query_backup_files_no_cache(backup_id: int) -> Optional[_NiceBackupFiles]:
103108 return _NiceBackupFiles (files , dict (by_parent ))
104109
105110 def query_backup_file (self , backup_id : int , path : str ) -> FileInfo :
106- if (nbf := self .__query_backup_files (backup_id )) is None :
111+ nbf : Optional [_NiceBackupFiles ] = self .__query_backup_files (backup_id )
112+ if nbf is None :
107113 raise FuseErrnoReturnError (errno .ENOENT )
108114 if (file := nbf .by_path .get (path )) is None :
109115 raise FuseErrnoReturnError (errno .ENOENT )
@@ -119,7 +125,7 @@ def split_path(self, fuse_path: str, *, allow_alternative: bool) -> _SplitPathRe
119125 raise FuseErrnoReturnError (errno .ENOENT )
120126
121127 if allow_alternative :
122- backup_id = self .__parse_backup_id (parts [1 ])
128+ backup_id : Optional [ int ] = self .__parse_backup_id (parts [1 ])
123129 if backup_id is None :
124130 raise FuseErrnoReturnError (errno .ENOENT )
125131 else :
@@ -153,7 +159,7 @@ def get_backup_file(self, fuse_path_or_spr: Union[str, _SplitPathResult]) -> Tup
153159 raise FuseErrnoReturnError (errno .ENOENT )
154160
155161 if not FuseConfig .get ().no_cache and self .__file_query_counter .inc (spr .backup_id ) >= self .__FILE_BATCH_QUERY_THRESHOLD :
156- nbf = self .__query_backup_files (spr .backup_id )
162+ nbf : Optional [ _NiceBackupFiles ] = self .__query_backup_files (spr .backup_id )
157163 if nbf is None :
158164 raise FuseErrnoReturnError (errno .ENOENT )
159165
@@ -170,7 +176,7 @@ def get_backup_file(self, fuse_path_or_spr: Union[str, _SplitPathResult]) -> Tup
170176
171177 def query_backup (self , backup_id : int ) -> BackupInfo :
172178 if not FuseConfig .get ().no_cache and self .__backup_query_counter .inc (backup_id ) >= self .__QUERY_BACKUP_THRESHOLD :
173- backups = self .__query_all_backups ()
179+ backups : Dict [ int , BackupInfo ] = self .__query_all_backups ()
174180 if (backup := backups .get (backup_id )) is None :
175181 raise FuseErrnoReturnError (errno .ENOENT )
176182 return backup
@@ -180,9 +186,9 @@ def query_backup(self, backup_id: int) -> BackupInfo:
180186 except BackupNotFound :
181187 raise FuseErrnoReturnError (errno .ENOENT )
182188
183- def query_backup_dir_files (self , backup_id : int , path : str ):
189+ def query_backup_dir_files (self , backup_id : int , path : str ) -> List [ FileInfo ] :
184190 if not FuseConfig .get ().no_cache and self .__backup_dir_query_files_counter .inc (backup_id ) >= self .__QUERY_BACKUP_DIR_FILES_THRESHOLD :
185- nbf = self .__query_backup_files (backup_id )
191+ nbf : Optional [ _NiceBackupFiles ] = self .__query_backup_files (backup_id )
186192 if nbf is None :
187193 raise FuseErrnoReturnError (errno .ENOENT )
188194 return nbf .by_parent .get (path , [])
0 commit comments