@@ -312,6 +312,21 @@ def refresh(self, *args, **kwargs):
312312 self .store (self .key (* args , ** kwargs ), self .expiry (* args , ** kwargs ), result )
313313 return result
314314
315+ def should_refresh (self , * args , ** kwargs ):
316+ """
317+ Verify if the cache should be refreshed
318+ """
319+ expiry , data = self .cache .get (self .key (* args , ** kwargs ), (None , None ))
320+
321+ if data is None :
322+ return True
323+
324+ delta = expiry - time .time ()
325+ if delta > 0 :
326+ return False
327+
328+ return True
329+
315330 def async_refresh (self , * args , ** kwargs ):
316331 """
317332 Trigger an asynchronous job to refresh the cache
@@ -479,10 +494,16 @@ def perform_async_refresh(cls, klass_str, obj_args, obj_kwargs, call_args, call_
479494 logger .info (
480495 "Using %s with constructor args %r and kwargs %r" , klass_str , obj_args , obj_kwargs
481496 )
497+
498+ job = klass (* obj_args , ** obj_kwargs )
499+ if not job .should_refresh (* call_args , ** call_kwargs ):
500+ logger .info ('Refresh escaped, cache is already fresh.' )
501+ return
502+
482503 logger .info ("Calling refresh with args %r and kwargs %r" , call_args , call_kwargs )
483504 start = time .time ()
484505 try :
485- klass ( * obj_args , ** obj_kwargs ) .refresh (* call_args , ** call_kwargs )
506+ job .refresh (* call_args , ** call_kwargs )
486507 except Exception as e :
487508 logger .exception ("Error running job: '%s'" , e )
488509 else :
0 commit comments