feat(cache): 引入 fresh 和 async_fresh 以控制缓存行为

- 新增 `fresh` 和 `async_fresh` 用于在同步和异步函数中
临时禁用缓存。
- 通过 `_fresh` 这一 contextvars 变量实现上下文感知的
缓存刷新机制
- 修改了 `cached` 装饰器逻辑,在 `is_fresh()` 为 True
时跳过缓存读取。

- 修复 download 模块中路径处理问题,使用 `Path.as_posix()` 确保跨平台兼容性。
This commit is contained in:
Attente
2025-10-19 22:31:50 +08:00
parent 784024fb5d
commit b609567c38
4 changed files with 80 additions and 44 deletions

View File

@@ -18,14 +18,13 @@ logger = logging.getLogger(__name__)
class TMDb(object):
def __init__(self, obj_cached=True, session=None, language=None):
def __init__(self, session=None, language=None):
self._api_key = settings.TMDB_API_KEY
self._language = language or settings.TMDB_LOCALE or "en-US"
self._session_id = None
self._session = session
self._wait_on_rate_limit = True
self._debug_enabled = False
self._cache_enabled = obj_cached
self._proxies = settings.PROXY
self._domain = settings.TMDB_API_DOMAIN
self._page = None
@@ -41,7 +40,6 @@ class TMDb(object):
self._remaining = 40
self._reset = None
self._timeout = 15
self.obj_cached = obj_cached
self.__clear_async_cache__ = False
@@ -119,14 +117,6 @@ class TMDb(object):
def debug(self, debug):
self._debug_enabled = bool(debug)
@property
def cache(self):
return self._cache_enabled
@cache.setter
def cache(self, cache):
self._cache_enabled = bool(cache)
@cached(maxsize=settings.CONF.tmdb, ttl=settings.CONF.meta, skip_none=True)
def cached_request(self, method, url, data, json,
_ts=datetime.strftime(datetime.now(), '%Y%m%d')):
@@ -224,8 +214,9 @@ class TMDb(object):
self._validate_api_key()
url = self._build_url(action, params)
if self.cache and self.obj_cached and call_cached and method != "POST":
req = self.cached_request(method, url, data, json)
if call_cached and method != "POST":
req = self.cached_request(method, url, data, json,
_ts=datetime.strftime(datetime.now(), '%Y%m%d'))
else:
req = self.request(method, url, data, json)
@@ -253,8 +244,9 @@ class TMDb(object):
self._validate_api_key()
url = self._build_url(action, params)
if self.cache and self.obj_cached and call_cached and method != "POST":
req = await self.async_cached_request(method, url, data, json)
if call_cached and method != "POST":
req = await self.async_cached_request(method, url, data, json,
_ts=datetime.strftime(datetime.now(), '%Y%m%d'))
else:
req = await self.async_request(method, url, data, json)