Files
Aether/backend/app/utils/cache.py
T

33 lines
978 B
Python
Executable File

import json
import logging
from functools import wraps
from fastapi import Request
from fastapi.encoders import jsonable_encoder
from app.core.redis import get_redis
log = logging.getLogger(__name__)
def cache(ttl: int = 10):
if ttl <= 0:
raise ValueError("TTL must be greater than zero.")
def decorator(func):
@wraps(func)
async def wrapper(*args, **kwargs):
redis = await get_redis()
request: Request = kwargs.get("request")
response_cache = await redis.get(str(request.url))
if response_cache is not None:
log.debug("Getting from cache")
return json.loads(response_cache)
response_cache = await func(*args, **kwargs)
serializable_data = jsonable_encoder(response_cache)
await redis.setex(str(request.url), ttl, json.dumps(serializable_data))
return response_cache
return wrapper
return decorator