Spaces:
Build error
Build error
from functools import wraps | |
import json | |
from starlette.responses import Response | |
from core.db import redis_cache_client | |
from fastapi import HTTPException | |
from fastapi.encoders import jsonable_encoder | |
from typing import Callable | |
def cache(timeout: int = 600) -> Callable: | |
def outer_wrapper(func): | |
async def inner_wrapper(*args, **kwargs): | |
identifier = f"ec_{func.__name__}_{func.__module__}" | |
value = await redis_cache_client.client.get(identifier) | |
if value: | |
return json.loads(value) | |
else: | |
ret_val = await func(*args, **kwargs) | |
ret_val = jsonable_encoder(ret_val) | |
await redis_cache_client.client.set(identifier, json.dumps(ret_val)) | |
await redis_cache_client.client.expire(identifier, timeout) | |
return ret_val | |
return inner_wrapper | |
return outer_wrapper | |
# TODO: Response Cache Headers | |
# def cache_headers(timeout: int = 600, no_cache=False, ) -> Callable: | |
# def outer_wrapper(func): | |
# @wraps(func) | |
# async def inner_wrapper(*args, **kwargs): | |
# print(func.__module__) | |
# identifier = f"ec_{func.__name__}_{func.__module__}" | |
# value = await redis_cache_client.client.get(identifier) | |
# if value: | |
# return json.loads(value) | |
# else: | |
# ret_val = await func(*args, **kwargs) | |
# ret_val = jsonable_encoder(ret_val) | |
# await redis_cache_client.client.set(identifier, json.dumps(ret_val)) | |
# await redis_cache_client.client.expire(identifier, timeout) | |
# return ret_val | |
# return inner_wrapper | |
# return outer_wrapper | |