diff --git a/catalog/sites/imdb.py b/catalog/sites/imdb.py index e6b8da25..34491ed7 100644 --- a/catalog/sites/imdb.py +++ b/catalog/sites/imdb.py @@ -150,8 +150,7 @@ class IMDB(AbstractSite): return episodes @staticmethod - def fetch_episodes_for_season(season_uuid): - season = TVSeason.get_by_url(season_uuid) + def fetch_episodes_for_season(season): if not season.season_number or not season.imdb: _logger.warning(f"season {season} is missing season number or imdb id") return diff --git a/catalog/tv/tests.py b/catalog/tv/tests.py index 24341130..08cf8dc2 100644 --- a/catalog/tv/tests.py +++ b/catalog/tv/tests.py @@ -190,25 +190,25 @@ class IMDBTestCase(TestCase): season = SiteManager.get_site_by_url(t_url).get_resource_ready().item self.assertIsNotNone(season) self.assertIsNone(season.season_number) - IMDB.fetch_episodes_for_season(season.uuid) + IMDB.fetch_episodes_for_season(season) # no episodes fetch bc no season number episodes = list(season.episodes.all().order_by("episode_number")) self.assertEqual(len(episodes), 0) # set season number and fetch again season.season_number = 1 season.save() - IMDB.fetch_episodes_for_season(season.uuid) + IMDB.fetch_episodes_for_season(season) episodes = list(season.episodes.all().order_by("episode_number")) self.assertEqual(len(episodes), 2) # fetch again, no duplicated episodes - IMDB.fetch_episodes_for_season(season.uuid) + IMDB.fetch_episodes_for_season(season) episodes2 = list(season.episodes.all().order_by("episode_number")) self.assertEqual(episodes, episodes2) # delete one episode and fetch again episodes[0].delete() episodes3 = list(season.episodes.all().order_by("episode_number")) self.assertEqual(len(episodes3), 1) - IMDB.fetch_episodes_for_season(season.uuid) + IMDB.fetch_episodes_for_season(season) episodes4 = list(season.episodes.all().order_by("episode_number")) self.assertEqual(len(episodes4), 2) self.assertEqual(episodes[1], episodes4[1]) diff --git a/catalog/views_edit.py b/catalog/views_edit.py index a56b2c07..3468b10c 100644 --- a/catalog/views_edit.py +++ b/catalog/views_edit.py @@ -13,6 +13,7 @@ from .forms import * from .search.views import * from journal.models import update_journal_for_merged_item from common.utils import get_uuid_or_404 +from auditlog.context import set_actor _logger = logging.getLogger(__name__) @@ -219,11 +220,21 @@ def fetch_tvepisodes(request, item_path, item_uuid): if item.class_name != "tvseason" or not item.imdb or item.season_number is None: raise BadRequest() item.log_action({"!fetch_tvepisodes": ["", ""]}) - django_rq.get_queue("crawl").enqueue(IMDB.fetch_episodes_for_season, item.uuid) + django_rq.get_queue("crawl").enqueue( + fetch_episodes_for_season_task, item.uuid, request.user + ) messages.add_message(request, messages.INFO, _("已开始更新单集信息")) return redirect(item.url) +def fetch_episodes_for_season_task(item_uuid, user): + with set_actor(user): + season = Item.get_by_url(item_uuid) + episodes = season.episode_uuids + IMDB.fetch_episodes_for_season(season) + season.log_action({"!fetch_tvepisodes": [episodes, season.episode_uuids]}) + + @login_required def merge(request, item_path, item_uuid): if request.method != "POST":