mirror of
https://github.com/long2ice/fastapi-cache.git
synced 2026-03-24 20:47:54 +00:00
Add support for normal def functions
This commit is contained in:
@@ -1,15 +1,21 @@
|
||||
from functools import wraps
|
||||
from typing import Callable, Optional, Type
|
||||
import asyncio
|
||||
from functools import wraps, partial
|
||||
import inspect
|
||||
from typing import TYPE_CHECKING, Callable, Optional, Type
|
||||
|
||||
from fastapi_cache import FastAPICache
|
||||
from fastapi_cache.coder import Coder
|
||||
|
||||
if TYPE_CHECKING:
|
||||
import concurrent.futures
|
||||
|
||||
|
||||
def cache(
|
||||
expire: int = None,
|
||||
coder: Type[Coder] = None,
|
||||
key_builder: Callable = None,
|
||||
namespace: Optional[str] = "",
|
||||
executor: Optional["concurrent.futures.Executor"] = None,
|
||||
):
|
||||
"""
|
||||
cache all function
|
||||
@@ -17,6 +23,8 @@ def cache(
|
||||
:param expire:
|
||||
:param coder:
|
||||
:param key_builder:
|
||||
:param executor:
|
||||
|
||||
:return:
|
||||
"""
|
||||
|
||||
@@ -63,7 +71,12 @@ def cache(
|
||||
response.headers["ETag"] = etag
|
||||
return coder.decode(ret)
|
||||
|
||||
ret = await func(*args, **kwargs)
|
||||
if inspect.iscoroutinefunction(func):
|
||||
ret = await func(*args, **kwargs)
|
||||
else:
|
||||
loop = asyncio.get_event_loop()
|
||||
ret = await loop.run_in_executor(executor, partial(func, *args, **kwargs))
|
||||
|
||||
await backend.set(cache_key, coder.encode(ret), expire or FastAPICache.get_expire())
|
||||
return ret
|
||||
|
||||
|
||||
Reference in New Issue
Block a user