@@ -312,6 +312,21 @@ def refresh(self, *args, **kwargs):
312
312
self .store (self .key (* args , ** kwargs ), self .expiry (* args , ** kwargs ), result )
313
313
return result
314
314
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
+
315
330
def async_refresh (self , * args , ** kwargs ):
316
331
"""
317
332
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_
479
494
logger .info (
480
495
"Using %s with constructor args %r and kwargs %r" , klass_str , obj_args , obj_kwargs
481
496
)
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
+
482
503
logger .info ("Calling refresh with args %r and kwargs %r" , call_args , call_kwargs )
483
504
start = time .time ()
484
505
try :
485
- klass ( * obj_args , ** obj_kwargs ) .refresh (* call_args , ** call_kwargs )
506
+ job .refresh (* call_args , ** call_kwargs )
486
507
except Exception as e :
487
508
logger .exception ("Error running job: '%s'" , e )
488
509
else :
0 commit comments