in src/aws_encryption_sdk/caches/local.py [0:0]
def _try_to_evict_one_entry(self):
"""Checks the least recently evaluated entry and evicts it from the cache if it is expired."""
with self._cache_lock:
try:
entry_ref = self._lre_deque.pop()
except IndexError:
# LRE deque is empty
return
actual_entry = entry_ref()
if actual_entry is None:
# actual entry has already been removed
return
if not actual_entry.valid or actual_entry.is_too_old():
# remove from cache
actual_entry.invalidate()
try:
del self._cache[actual_entry.cache_key]
except KeyError:
# Catches a race condition where entries removed by _prune
# may not be garbage collected as quickly as manually removed
# entries
pass
return
# entry is still active and valid: add back to start of LRE
self._lre_deque.appendleft(entry_ref)