[docs]defset(self,key:str,value:Any,**kwargs):"""Set item into cache Args: key (str): key value (Any): value """expiry_time=time.time()+self._timeoutself._cache[key]=CacheEntry(name=key,value=value,expiry=expiry_time,extra_params=kwargs)
[docs]defget(self,key:str)->Optional[Any]:"""Get item by specified key Args: key (str): key item Returns: Optional[Any]: item value """entry=self._cache.get(str(key))ifentryisnotNoneandtime.time()<=entry.expiry:returnentry.valueelifentryisnotNoneandtime.time()>entry.expiry:self.invalidate(key)returnNone
[docs]definvalidate(self,key:str):"""Invalidate item by key Args: key (str): item key """ifkeyinself._cache:delself._cache[key]
[docs]defclean_up(self):""" Clean up cache """current_time=time.time()keys_to_delete=[keyforkey,entryinself._cache.items()ifentry.expire<current_time]forkeyinkeys_to_delete:delself._cache[key]
[docs]defclear(self):""" Clears all items """self._cache.clear()
[docs]classCacheable:""" This class describes a Interface for caching. """
[docs]defsave(self,key:str,data:Any):"""Save item in cache Args: key (str): item key data (Any): item data """self.cache.set(key,data)
[docs]defupdate(self,key:str,new_data:Any):"""Update item by key Args: key (str): item key new_data (Any): new item data """self.clear_data(key)self.save(key,new_data)
[docs]defclear_data(self,key:str):"""Clear item data by key Args: key (str): item key """self.cache.invalidate(key)