mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-01-23 02:35:14 +00:00
Fix episode processing issues in VOD tasks
- Ensure season and episode numbers are properly converted to integers with error handling - Remove zero-padding from debug log format for season/episode numbers - Add validation to filter out relations with unsaved episodes that have no primary key - Add proper logging for skipped relations when episode is not saved to database These changes address potential crashes when API returns string values instead of integers and prevent database errors when bulk creation operations fail silently due to conflicts. Fixes issue #770
This commit is contained in:
parent
57a6a842b2
commit
c57f9fd7e7
1 changed files with 25 additions and 3 deletions
|
|
@ -1292,8 +1292,15 @@ def batch_process_episodes(account, series, episodes_data, scan_start_time=None)
|
|||
try:
|
||||
episode_id = str(episode_data.get('id'))
|
||||
episode_name = episode_data.get('title', 'Unknown Episode')
|
||||
season_number = episode_data['_season_number']
|
||||
episode_number = episode_data.get('episode_num', 0)
|
||||
# Ensure season and episode numbers are integers (API may return strings)
|
||||
try:
|
||||
season_number = int(episode_data['_season_number'])
|
||||
except (ValueError, TypeError):
|
||||
season_number = 0
|
||||
try:
|
||||
episode_number = int(episode_data.get('episode_num', 0))
|
||||
except (ValueError, TypeError):
|
||||
episode_number = 0
|
||||
info = episode_data.get('info', {})
|
||||
|
||||
# Extract episode metadata
|
||||
|
|
@ -1324,7 +1331,7 @@ def batch_process_episodes(account, series, episodes_data, scan_start_time=None)
|
|||
# Check if we already have this episode pending creation (multiple streams for same episode)
|
||||
if not episode and episode_key in episodes_pending_creation:
|
||||
episode = episodes_pending_creation[episode_key]
|
||||
logger.debug(f"Reusing pending episode for S{season_number:02d}E{episode_number:02d} (stream_id: {episode_id})")
|
||||
logger.debug(f"Reusing pending episode for S{season_number}E{episode_number} (stream_id: {episode_id})")
|
||||
|
||||
if episode:
|
||||
# Update existing episode
|
||||
|
|
@ -1432,6 +1439,21 @@ def batch_process_episodes(account, series, episodes_data, scan_start_time=None)
|
|||
if key in episode_pk_map:
|
||||
relation.episode = episode_pk_map[key]
|
||||
|
||||
# Filter out relations with unsaved episodes (no PK)
|
||||
# This can happen if bulk_create had a conflict and ignore_conflicts=True didn't save the episode
|
||||
valid_relations_to_create = []
|
||||
for relation in relations_to_create:
|
||||
if relation.episode.pk is not None:
|
||||
valid_relations_to_create.append(relation)
|
||||
else:
|
||||
season_num = relation.episode.season_number
|
||||
episode_num = relation.episode.episode_number
|
||||
logger.warning(
|
||||
f"Skipping relation for episode S{season_num}E{episode_num} "
|
||||
f"- episode not saved to database"
|
||||
)
|
||||
relations_to_create = valid_relations_to_create
|
||||
|
||||
# Update existing episodes
|
||||
if episodes_to_update:
|
||||
Episode.objects.bulk_update(episodes_to_update, [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue