Skip to content

Commit 970478b

Browse files
committed
add refetch releases in sync_metadata()
1 parent aa6e86f commit 970478b

File tree

4 files changed

+30
-34
lines changed

4 files changed

+30
-34
lines changed

src/app/models.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ def generate_manual_id(cls, media_type):
179179

180180
return str(int(latest_item.media_id) + 1)
181181

182-
def fetch_releases(self):
182+
def fetch_releases(self, delay):
183183
"""Fetch releases for the item."""
184184
if not self._disable_calendar_triggers:
185185
if self.media_type == MediaTypes.SEASON.value:
@@ -189,8 +189,6 @@ def fetch_releases(self):
189189
media_id=self.media_id,
190190
source=self.source,
191191
media_type=MediaTypes.TV.value,
192-
season_number__isnull=True,
193-
episode_number__isnull=True,
194192
)
195193
except Item.DoesNotExist:
196194
# Get metadata for the TV show
@@ -213,7 +211,10 @@ def fetch_releases(self):
213211
else:
214212
items_to_process = [self]
215213

216-
events.tasks.reload_calendar.delay(items_to_process=items_to_process)
214+
if delay:
215+
events.tasks.reload_calendar.delay(items_to_process=items_to_process)
216+
else:
217+
events.tasks.reload_calendar(items_to_process=items_to_process)
217218

218219

219220
class MediaManager(models.Manager):
@@ -768,7 +769,7 @@ def process_status(self):
768769
if self.tracker.previous("status") == self.Status.REPEATING.value:
769770
self.repeats += 1
770771

771-
self.item.fetch_releases()
772+
self.item.fetch_releases(delay=True)
772773

773774
@property
774775
def formatted_progress(self):
@@ -808,7 +809,7 @@ def save(self, *args, **kwargs):
808809
if self.tracker.has_changed("status"):
809810
if self.status == self.Status.COMPLETED.value:
810811
self.completed()
811-
self.item.fetch_releases()
812+
self.item.fetch_releases(delay=True)
812813

813814
@property
814815
def progress(self):
@@ -992,7 +993,7 @@ def save(self, *args, **kwargs):
992993
self.get_remaining_eps(season_metadata),
993994
Episode,
994995
)
995-
self.item.fetch_releases()
996+
self.item.fetch_releases(delay=True)
996997

997998
@property
998999
def progress(self):

src/app/tests/test_views.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1430,7 +1430,7 @@ def setUp(self):
14301430

14311431
# Create some manual TV shows and seasons for testing
14321432
tv_item1 = Item.objects.create(
1433-
media_id="tv1",
1433+
media_id="111",
14341434
source=Sources.MANUAL.value,
14351435
media_type=MediaTypes.TV.value,
14361436
title="Test TV Show",
@@ -1442,7 +1442,7 @@ def setUp(self):
14421442
)
14431443

14441444
tv_item2 = Item.objects.create(
1445-
media_id="tv2",
1445+
media_id="222",
14461446
source=Sources.MANUAL.value,
14471447
media_type=MediaTypes.TV.value,
14481448
title="Another TV Show",
@@ -1454,7 +1454,7 @@ def setUp(self):
14541454
)
14551455

14561456
season_item1 = Item.objects.create(
1457-
media_id="season1",
1457+
media_id="111",
14581458
source=Sources.MANUAL.value,
14591459
media_type=MediaTypes.SEASON.value,
14601460
title="Test Season",
@@ -1468,7 +1468,7 @@ def setUp(self):
14681468
)
14691469

14701470
season_item2 = Item.objects.create(
1471-
media_id="season2",
1471+
media_id="222",
14721472
source=Sources.MANUAL.value,
14731473
media_type=MediaTypes.SEASON.value,
14741474
title="Another Season",

src/app/views.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -303,9 +303,11 @@ def sync_metadata(request, source, media_type, media_id, season_number=None):
303303

304304
ttl = cache.ttl(cache_key)
305305
logger.debug("%s - Cache TTL for: %s", cache_key, ttl)
306-
if ttl is not None and ttl > (settings.CACHE_TIMEOUT - 300):
306+
307+
if ttl is not None and ttl > (settings.CACHE_TIMEOUT - 30):
307308
msg = "The data was recently synced, please wait a few minutes."
308309
messages.error(request, msg)
310+
logger.error(msg)
309311
else:
310312
deleted = cache.delete(cache_key)
311313
logger.debug("%s - Old cache deleted: %s", cache_key, deleted)
@@ -316,7 +318,7 @@ def sync_metadata(request, source, media_type, media_id, season_number=None):
316318
source,
317319
[season_number],
318320
)
319-
Item.objects.update_or_create(
321+
item, _ = Item.objects.update_or_create(
320322
media_id=media_id,
321323
source=source,
322324
media_type=media_type,
@@ -373,14 +375,14 @@ def sync_metadata(request, source, media_type, media_id, season_number=None):
373375
["title", "image"],
374376
batch_size=100,
375377
)
376-
377-
# Log results
378378
logger.info(
379379
"Successfully updated %s episodes for %s",
380380
updated_count,
381381
title,
382382
)
383383

384+
item.fetch_releases(delay=False)
385+
384386
msg = f"{title} was synced to {Sources(source).label} successfully."
385387
messages.success(request, msg)
386388

src/events/tests/test_calendar.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
Season,
2121
Sources,
2222
)
23+
from app.providers import services
2324
from events.calendar import (
2425
anilist_date_parser,
2526
date_parser,
@@ -782,19 +783,20 @@ def test_process_anime_bulk_no_matching_anime(self, mock_api_request):
782783
# Verify no events were added
783784
self.assertEqual(len(events_bulk), 0)
784785

785-
@patch("events.calendar.services.get_media_metadata")
786-
def test_http_error_handling(self, mock_get_media_metadata):
787-
"""Test handling of HTTP errors in process_other."""
788-
# Setup mock to raise 404 error
789-
import requests
790-
786+
@patch("app.providers.tmdb.movie")
787+
def test_http_error_handling(self, mock_tmdb_movie):
788+
"""Test handling of ProviderAPIError in process_other."""
789+
# Create a mock response for the error
791790
response_mock = MagicMock()
792791
response_mock.status_code = 404
793-
response_mock.json.return_value = {"error": "Not found"}
792+
response_mock.text = "Not found"
794793

795-
http_error = requests.exceptions.HTTPError("404 Client Error")
796-
http_error.response = response_mock
797-
mock_get_media_metadata.side_effect = http_error
794+
# Create and raise the ProviderAPIError
795+
mock_tmdb_movie.side_effect = services.ProviderAPIError(
796+
provider=Sources.TMDB.value,
797+
error=response_mock,
798+
details="Movie not found",
799+
)
798800

799801
# Process the item - should not raise exception
800802
events_bulk = []
@@ -803,15 +805,6 @@ def test_http_error_handling(self, mock_get_media_metadata):
803805
# Verify no events were added
804806
self.assertEqual(len(events_bulk), 0)
805807

806-
# Setup mock to raise 500 error
807-
response_mock.status_code = 500
808-
http_error = requests.exceptions.HTTPError("500 Server Error")
809-
http_error.response = response_mock
810-
mock_get_media_metadata.side_effect = http_error
811-
812-
# Process the item - should raise exception
813-
with self.assertRaises(requests.exceptions.HTTPError):
814-
process_other(self.movie_item, events_bulk)
815808

816809
@patch("events.calendar.services.get_media_metadata")
817810
@patch("events.calendar.comicvine.issue")

0 commit comments

Comments
 (0)