@@ -192,20 +192,34 @@ def __hash__(self) -> int:
192192 return hash (self .key )
193193
194194
195- class FileBasedCache ( UtilCache [ ConnectionInfo ]) :
195+ class FileBasedCache :
196196 """
197197 File-based cache that persists to disk with encryption.
198- Extends UtilCache to provide persistent storage using encrypted files.
198+ Uses composition to combine in-memory caching with persistent storage
199+ using encrypted files.
199200 """
200201
201- def __init__ (self , cache_name : str = "" ):
202- super (). __init__ ( cache_name )
202+ def __init__ (self , memory_cache : UtilCache [ ConnectionInfo ], cache_name : str = "" ):
203+ self . memory_cache = memory_cache
203204 self ._data_dir = user_data_dir (appname = APPNAME ) # TODO: change to new dir
204205 makedirs (self ._data_dir , exist_ok = True )
206+ # FileBasedCache has its own disabled state, independent of memory cache
207+ cache_env_var = f"FIREBOLT_SDK_DISABLE_CACHE_${ cache_name } "
208+ self .disabled = os .getenv ("FIREBOLT_SDK_DISABLE_CACHE" , False ) or os .getenv (
209+ cache_env_var , False
210+ )
211+
212+ def disable (self ) -> None :
213+ """Disable the file-based cache."""
214+ self .disabled = True
215+
216+ def enable (self ) -> None :
217+ """Enable the file-based cache."""
218+ self .disabled = False
205219
206220 def _get_file_path (self , key : SecureCacheKey ) -> str :
207221 """Get the file path for a cache key."""
208- cache_key = self .create_key (key )
222+ cache_key = self .memory_cache . create_key (key )
209223 encrypted_filename = generate_encrypted_file_name (cache_key , key .encryption_key )
210224 return path .join (self ._data_dir , encrypted_filename )
211225
@@ -250,7 +264,7 @@ def get(self, key: SecureCacheKey) -> Optional[ConnectionInfo]:
250264 return None
251265
252266 # First try memory cache
253- memory_result = super () .get (key )
267+ memory_result = self . memory_cache .get (key )
254268 if memory_result is not None :
255269 logger .debug ("Cache hit in memory" )
256270 return memory_result
@@ -265,7 +279,7 @@ def get(self, key: SecureCacheKey) -> Optional[ConnectionInfo]:
265279 data = ConnectionInfo (** raw_data )
266280
267281 # Add to memory cache and return
268- super () .set (key , data )
282+ self . memory_cache .set (key , data )
269283 return data
270284
271285 def set (self , key : SecureCacheKey , value : ConnectionInfo ) -> None :
@@ -275,7 +289,7 @@ def set(self, key: SecureCacheKey, value: ConnectionInfo) -> None:
275289
276290 logger .debug ("Setting value in cache" )
277291 # First set in memory
278- super () .set (key , value )
292+ self . memory_cache .set (key , value )
279293
280294 file_path = self ._get_file_path (key )
281295 encrypter = FernetEncrypter (generate_salt (), key .encryption_key )
@@ -289,7 +303,7 @@ def delete(self, key: SecureCacheKey) -> None:
289303 return
290304
291305 # Delete from memory
292- super () .delete (key )
306+ self . memory_cache .delete (key )
293307
294308 # Delete from disk
295309 file_path = self ._get_file_path (key )
@@ -303,7 +317,9 @@ def delete(self, key: SecureCacheKey) -> None:
303317 def clear (self ) -> None :
304318 # Clear memory only, as deleting every file is not safe
305319 logger .debug ("Clearing memory cache" )
306- super () .clear ()
320+ self . memory_cache .clear ()
307321
308322
309- _firebolt_cache = FileBasedCache (cache_name = "connection_info" )
323+ _firebolt_cache = FileBasedCache (
324+ UtilCache [ConnectionInfo ](cache_name = "memory_cache" ), cache_name = "file_cache"
325+ )
0 commit comments