Skip to content

Commit 23a8146

Browse files
committed
neg max age means cached values are considered stale
1 parent 3087d97 commit 23a8146

1 file changed

Lines changed: 18 additions & 6 deletions

File tree

src/cachier/core.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
MAX_WORKERS_ENVAR_NAME = "CACHIER_MAX_WORKERS"
3333
DEFAULT_MAX_WORKERS = 8
34+
ZERO_TIMEDELTA = timedelta(seconds=0)
3435

3536

3637
def _max_workers():
@@ -294,12 +295,23 @@ def _call(*args, max_age: Optional[timedelta] = None, **kwds):
294295
if _allow_none or entry.value is not None:
295296
_print("Cached result found.")
296297
now = datetime.now()
297-
max_allowed_age = (
298-
min(_stale_after, max_age)
299-
if max_age is not None
300-
else _stale_after
301-
)
302-
if now - entry.time < max_allowed_age:
298+
max_allowed_age = _stale_after
299+
nonneg_max_age = True
300+
if max_age is not None:
301+
if max_age < ZERO_TIMEDELTA:
302+
_print(
303+
"max_age is negative. "
304+
"Cached result considered stale."
305+
)
306+
nonneg_max_age = False
307+
else:
308+
max_allowed_age = (
309+
min(_stale_after, max_age)
310+
if max_age is not None
311+
else _stale_after
312+
)
313+
# note: if max_age < 0, we always consider a value stale
314+
if nonneg_max_age and (now - entry.time < max_allowed_age):
303315
_print("And it is fresh!")
304316
return entry.value
305317
_print("But it is stale... :(")

0 commit comments

Comments
 (0)