mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 07:27:15 +08:00
Merge pull request #3840 from InfinityPacer/feature/cache
This commit is contained in:
+16
-1
@@ -500,6 +500,21 @@ def cached(region: Optional[str] = None, maxsize: int = 1000, ttl: int = 1800,
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def is_valid_cache_value(cache_key: str, cached_value: Any, cache_region: str) -> bool:
|
||||||
|
"""
|
||||||
|
判断指定的值是否为一个有效的缓存值
|
||||||
|
|
||||||
|
:param cache_key: 缓存的键
|
||||||
|
:param cached_value: 缓存的值
|
||||||
|
:param cache_region: 缓存的区
|
||||||
|
:return: 若值是有效的缓存值返回 True,否则返回 False
|
||||||
|
"""
|
||||||
|
# 如果 skip_none 为 False,且 value 为 None,需要判断缓存实际是否存在
|
||||||
|
if not skip_none and cached_value is None:
|
||||||
|
if not cache_backend.exists(key=cache_key, region=cache_region):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
|
|
||||||
# 获取缓存区
|
# 获取缓存区
|
||||||
@@ -511,7 +526,7 @@ def cached(region: Optional[str] = None, maxsize: int = 1000, ttl: int = 1800,
|
|||||||
cache_key = cache_backend.get_cache_key(func, args, kwargs)
|
cache_key = cache_backend.get_cache_key(func, args, kwargs)
|
||||||
# 尝试获取缓存
|
# 尝试获取缓存
|
||||||
cached_value = cache_backend.get(cache_key, region=cache_region)
|
cached_value = cache_backend.get(cache_key, region=cache_region)
|
||||||
if should_cache(cached_value):
|
if should_cache(cached_value) and is_valid_cache_value(cache_key, cached_value, cache_region):
|
||||||
return cached_value
|
return cached_value
|
||||||
# 执行函数并缓存结果
|
# 执行函数并缓存结果
|
||||||
result = func(*args, **kwargs)
|
result = func(*args, **kwargs)
|
||||||
|
|||||||
@@ -420,16 +420,19 @@ class FanartModule(_ModuleBase):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@cached(maxsize=settings.CACHE_CONF["fanart"], ttl=settings.CACHE_CONF["meta"], skip_none=False)
|
@cached(maxsize=settings.CACHE_CONF["fanart"], ttl=settings.CACHE_CONF["meta"])
|
||||||
def __request_fanart(cls, media_type: MediaType, queryid: Union[str, int]) -> Optional[dict]:
|
def __request_fanart(cls, media_type: MediaType, queryid: Union[str, int]) -> Optional[dict]:
|
||||||
if media_type == MediaType.MOVIE:
|
if media_type == MediaType.MOVIE:
|
||||||
image_url = cls._movie_url % queryid
|
image_url = cls._movie_url % queryid
|
||||||
else:
|
else:
|
||||||
image_url = cls._tv_url % queryid
|
image_url = cls._tv_url % queryid
|
||||||
try:
|
try:
|
||||||
ret = RequestUtils(proxies=cls._proxies, timeout=10).get_res(image_url)
|
ret = RequestUtils(proxies=cls._proxies, timeout=10).get_res(image_url, raise_exception=True)
|
||||||
if ret:
|
if ret:
|
||||||
return ret.json()
|
return ret.json()
|
||||||
|
else:
|
||||||
|
logger.debug(f"未能获取到 {queryid} 的Fanart图片")
|
||||||
|
return {}
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error(f"获取{queryid}的Fanart图片失败:{str(err)}")
|
logger.error(f"获取{queryid}的Fanart图片失败:{str(err)}")
|
||||||
return None
|
return None
|
||||||
|
|||||||
Reference in New Issue
Block a user