Spaces:
Paused
Paused
| 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 | |