api / cache.py
jamelloverz-sketch
PopCorn API v3.5 - Media metadata, people, images, open CORS
c18e004
Raw
History Blame Contribute Delete
864 Bytes
import time
import threading
_cache = {}
_ttl = {}
_lock = threading.Lock()
DEFAULT_TTL = 60
def get(key: str):
with _lock:
entry = _cache.get(key)
expiry = _ttl.get(key, 0)
if entry and time.time() < expiry:
return entry
if entry:
del _cache[key]
del _ttl[key]
return None
def set(key: str, data, ttl: int = DEFAULT_TTL):
with _lock:
_cache[key] = data
_ttl[key] = time.time() + ttl
def invalidate(pattern: str = None):
with _lock:
if pattern:
keys = [k for k in _cache if pattern in k]
for k in keys:
del _cache[k]
del _ttl[k]
else:
_cache.clear()
_ttl.clear()
def stats():
with _lock:
return {"items": len(_cache), "keys": list(_cache.keys())}