上下文构建并非复杂任务, 移除缓存

This commit is contained in:
Attente
2025-05-05 14:08:41 +08:00
parent fdc79033ce
commit ae154489e1
+5 -84
View File
@@ -1,5 +1,4 @@
import ast, json, re import ast, json, re
from functools import wraps
from typing import Any, Literal, Optional, List, Dict, Union from typing import Any, Literal, Optional, List, Dict, Union
from cachetools import TTLCache from cachetools import TTLCache
@@ -14,79 +13,6 @@ from app.utils.string import StringUtils
from app.log import logger from app.log import logger
# 缓存键字段白名单
CACHE_KEY_FIELDS = ["title", "tmdb_id", "bangumi_id", "douban_id", "type", "name",\
"subtitle", "description", "overview", "site_name", "file_list"]
def extract_cache_key_values(obj: Any, field_names: List[str]) -> Dict[str, Any]:
"""
提取对象中指定字段的值(只保留存在的非空字段)
:param obj: 目标对象
:param field_names: 字段名列表(按优先级顺序)
:return: 包含有效字段值的字典
"""
result = {}
for field in field_names:
if hasattr(obj, field):
value = getattr(obj, field)
if value is not None and value != "":
if isinstance(value, (str, int, float)):
result[field] = str(value)
elif isinstance(value, list):
result[field] = ",".join(map(str, value))
return result
def build_cache_key(*args, **kwargs) -> str:
"""
缓存键构建
"""
key_dict = {}
for i, arg in enumerate(args):
if hasattr(arg, "__dict__"):
key_dict[f"arg_{i}"] = extract_cache_key_values(arg, CACHE_KEY_FIELDS)
elif isinstance(arg, list):
key_dict[f"arg_{i}"] = {"list": [extract_cache_key_values(item, CACHE_KEY_FIELDS) for item in arg]}
for k, v in kwargs.items():
if hasattr(v, "__dict__"):
key_dict[k] = extract_cache_key_values(v, CACHE_KEY_FIELDS)
key_str = json.dumps(key_dict, sort_keys=True, ensure_ascii=False)
return StringUtils.md5_hash(key_str)
def build_context_cache(cache_name: str = 'cache'):
"""
上下文缓存装饰器
"""
def decorator(func):
@wraps(func)
def wrapper(self, *args, **kwargs):
# 获取缓存键
cache_key = build_cache_key(*args, **kwargs)
# 获取缓存实例
cache = getattr(self, cache_name)
if cache_key in cache:
# 命中缓存,更新上下文
self._context.update(cache[cache_key])
return
# 执行原方法
result = func(self, *args, **kwargs)
if isinstance(result, dict):
cache[cache_key] = result
self._context.update(result)
return result
return wrapper
return decorator
class TemplateHelper(metaclass=SingletonClass): class TemplateHelper(metaclass=SingletonClass):
""" """
模板格式渲染帮助类 模板格式渲染帮助类
@@ -294,7 +220,6 @@ class TemplateContextBuilder:
return self._context return self._context
@build_context_cache(cache_name='cache')
def _add_media_info(self, mediainfo: MediaInfo): def _add_media_info(self, mediainfo: MediaInfo):
""" """
增加媒体信息 增加媒体信息
@@ -339,9 +264,8 @@ class TemplateContextBuilder:
# 豆瓣ID # 豆瓣ID
"doubanid": mediainfo.douban_id, "doubanid": mediainfo.douban_id,
} }
return {**base_info, **media_info} self._context.update({**base_info, **media_info})
@build_context_cache(cache_name='cache')
def _add_episode_details(self, meta: Optional[MetaBase], episodes: Optional[List[TmdbEpisode]]): def _add_episode_details(self, meta: Optional[MetaBase], episodes: Optional[List[TmdbEpisode]]):
"""添加剧集详细信息""" """添加剧集详细信息"""
if not meta: if not meta:
@@ -398,9 +322,8 @@ class TemplateContextBuilder:
# 音频编码 # 音频编码
"audioCodec": meta.audio_encode, "audioCodec": meta.audio_encode,
} }
return {**meta_info, **tech_metadata, **episode_data} self._context.update({**meta_info, **tech_metadata, **episode_data})
@build_context_cache(cache_name='cache')
def _add_torrent_info(self, torrentinfo: Optional[TorrentInfo]): def _add_torrent_info(self, torrentinfo: Optional[TorrentInfo]):
if not torrentinfo: return if not torrentinfo: return
if torrentinfo.size: if torrentinfo.size:
@@ -436,9 +359,8 @@ class TemplateContextBuilder:
# 种子大小 # 种子大小
"size": size, "size": size,
} }
return torrent_info self._context.update(torrent_info)
@build_context_cache(cache_name='cache')
def _add_transfer_info(self, transferinfo: Optional[TransferInfo]) -> Optional[Dict]: def _add_transfer_info(self, transferinfo: Optional[TransferInfo]) -> Optional[Dict]:
"""添加文件转移上下文""" """添加文件转移上下文"""
if not transferinfo: return if not transferinfo: return
@@ -457,9 +379,8 @@ class TemplateContextBuilder:
# 文件后缀 # 文件后缀
"fileExt": file_extension, "fileExt": file_extension,
} }
return file_info self._context.update(file_info)
@build_context_cache(cache_name='cache')
def _add_raw_objects( def _add_raw_objects(
self, self,
meta: Optional[MetaBase], meta: Optional[MetaBase],
@@ -481,7 +402,7 @@ class TemplateContextBuilder:
# 当前季的全部集信息 # 当前季的全部集信息
"__episodes_info__": episodes_info, "__episodes_info__": episodes_info,
} }
return {k: v for k, v in raw_objects.items() if v is not None} self._context.update({k: v for k, v in raw_objects.items() if v is not None})
@staticmethod @staticmethod
def __convert_invalid_characters(filename: str): def __convert_invalid_characters(filename: str):