init
This commit is contained in:
30
app/services/cache.py
Normal file
30
app/services/cache.py
Normal file
@@ -0,0 +1,30 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import time
|
||||
from dataclasses import dataclass
|
||||
from typing import Generic, TypeVar
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
@dataclass
|
||||
class CacheItem(Generic[T]):
|
||||
value: T
|
||||
expires_at: float
|
||||
|
||||
|
||||
class TTLCache(Generic[T]):
|
||||
def __init__(self) -> None:
|
||||
self._store: dict[str, CacheItem[T]] = {}
|
||||
|
||||
def get(self, key: str) -> T | None:
|
||||
item = self._store.get(key)
|
||||
if item is None:
|
||||
return None
|
||||
if item.expires_at < time.time():
|
||||
self._store.pop(key, None)
|
||||
return None
|
||||
return item.value
|
||||
|
||||
def set(self, key: str, value: T, ttl_seconds: int) -> None:
|
||||
self._store[key] = CacheItem(value=value, expires_at=time.time() + ttl_seconds)
|
||||
Reference in New Issue
Block a user