Spaces:
Running
Running
from functools import lru_cache | |
from typing import Callable, Optional, TypeVar | |
T = TypeVar("T") | |
def lru_cache_wrapper( | |
maxsize: Optional[int] = None, | |
) -> Callable[[Callable[..., T]], Callable[..., T]]: | |
""" | |
Wrapper for lru_cache that caches success and exceptions | |
""" | |
def decorator(f: Callable[..., T]) -> Callable[..., T]: | |
def wrapper(*args, **kwargs): | |
try: | |
return ("success", f(*args, **kwargs)) | |
except Exception as e: | |
return ("error", e) | |
def wrapped(*args, **kwargs): | |
result = wrapper(*args, **kwargs) | |
if result[0] == "error": | |
raise result[1] | |
return result[1] | |
return wrapped | |
return decorator | |