Merge remote-tracking branch 'origin/v2' into v2

This commit is contained in:
jxxghp
2024-12-23 12:40:42 +08:00
2 changed files with 37 additions and 2 deletions

View File

@@ -1,3 +1,4 @@
import inspect
from functools import wraps
from typing import Any, Callable
@@ -29,8 +30,18 @@ def cached_with_empty_check(func: Callable):
@wraps(func)
def wrapper(*args, **kwargs):
signature = inspect.signature(func)
resolved_kwargs = {}
# 获取默认值并结合传递的参数(如果有)
for param, value in signature.parameters.items():
if param in kwargs:
# 使用显式传递的参数
resolved_kwargs[param] = kwargs[param]
elif value.default is not inspect.Parameter.empty:
# 没有传递参数时使用默认值
resolved_kwargs[param] = value.default
# 使用 cachetools 缓存,构造缓存键
cache_key = hashkey(*args, **kwargs)
cache_key = f"{func.__name__}_{hashkey(*args, **resolved_kwargs)}"
if cache_key in recommend_cache:
return recommend_cache[cache_key]
result = func(*args, **kwargs)
@@ -58,10 +69,14 @@ class RecommendChain(ChainBase, metaclass=Singleton):
"""
刷新推荐
"""
logger.debug("Starting to refresh Recommend data.")
recommend_cache.clear()
logger.debug("Recommend Cache has been cleared.")
self.tmdb_movies()
self.tmdb_tvs()
self.tmdb_trending()
self.bangumi_calendar()
self.douban_movie_showing()
self.douban_movies()
self.douban_tvs()
self.douban_movie_top250()
@@ -70,6 +85,7 @@ class RecommendChain(ChainBase, metaclass=Singleton):
self.douban_tv_animation()
self.douban_movie_hot()
self.douban_tv_hot()
logger.debug("Recommend data refresh completed.")
@log_execution_time(logger=logger)
@cached_with_empty_check
@@ -88,7 +104,7 @@ class RecommendChain(ChainBase, metaclass=Singleton):
@log_execution_time(logger=logger)
@cached_with_empty_check
def tmdb_tvs(self, sort_by: str = "popularity.desc", with_genres: str = "",
with_original_language: str = "", page: int = 1) -> Any:
with_original_language: str = "zh|en|ja|ko", page: int = 1) -> Any:
"""
TMDB热门电视剧
"""

View File

@@ -11,6 +11,7 @@ from apscheduler.schedulers.background import BackgroundScheduler
from app import schemas
from app.chain import ChainBase
from app.chain.mediaserver import MediaServerChain
from app.chain.recommend import RecommendChain
from app.chain.site import SiteChain
from app.chain.subscribe import SubscribeChain
from app.chain.tmdb import TmdbChain
@@ -121,6 +122,11 @@ class Scheduler(metaclass=Singleton):
"name": "站点数据刷新",
"func": SiteChain().refresh_userdatas,
"running": False,
},
"recommend_refresh": {
"name": "推荐缓存",
"func": RecommendChain().refresh_recommend,
"running": False,
}
}
@@ -310,6 +316,19 @@ class Scheduler(metaclass=Singleton):
}
)
# 推荐缓存
self._scheduler.add_job(
self.start,
"interval",
id="recommend_refresh",
name="推荐缓存",
hours=6,
next_run_time=datetime.now(pytz.timezone(settings.TZ)) + timedelta(seconds=3),
kwargs={
'job_id': 'recommend_refresh'
}
)
self.init_plugin_jobs()
# 打印服务