🛡️ Complete Protection Implemented:
Local Docker Build (Dev) / build-dev (push) Successful in 4s

1. Enhanced Debugging: Will show exact episode dict structure and contents
  2. Safe Conversion: Try/catch around int(episode) with detailed error logging
  3. Format String Protection: All print statements now have fallback error handling
  4. Response Safety: Safe episode conversion for API response object
This commit is contained in:
2025-10-15 16:58:39 -04:00
parent 987ca1977b
commit 366eaa2877
2 changed files with 31 additions and 6 deletions
+1 -1
View File
@@ -1 +1 @@
2.2.12
2.2.13
+29 -4
View File
@@ -773,6 +773,9 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int
"""Get available date options for an episode"""
print(f"🔍 DEBUG: get_episode_date_options called with imdb_id={imdb_id}, season={season}, episode={episode}")
print(f"🔍 DEBUG: episode type: {type(episode)}, episode value: {episode}")
if isinstance(episode, dict):
print(f"🔍 DEBUG: episode dict keys: {list(episode.keys()) if episode else 'None'}")
print(f"🔍 DEBUG: episode dict values: {list(episode.values()) if episode else 'None'}")
db = dependencies["db"]
# Validate parameters with enhanced checking
@@ -981,8 +984,14 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int
episodes = external_clients.tmdb.get_tv_season_episodes(tmdb_id, season)
print(f"🔍 DEBUG: TMDB episodes found: {episodes}")
try:
episode_num = int(episode)
if episode_num in episodes:
except (ValueError, TypeError) as conv_error:
print(f"❌ Cannot convert episode to int: {episode} (type: {type(episode)})")
print(f" Error: {conv_error}")
episode_num = None
if episode_num and episode_num in episodes:
air_date = episodes[episode_num]
print(f"🔍 DEBUG: TMDB air date for S{season:02d}E{episode_num:02d}: {air_date}")
@@ -1070,16 +1079,24 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int
"description": "Enter custom date and time"
})
print(f"🔍 DEBUG: Generated {len(options)} options for {imdb_id} S{season:02d}E{episode:02d}:")
# Safe format string for episode
try:
episode_num = int(episode) if not isinstance(episode, int) else episode
print(f"🔍 DEBUG: Generated {len(options)} options for {imdb_id} S{season:02d}E{episode_num:02d}:")
except:
print(f"🔍 DEBUG: Generated {len(options)} options for {imdb_id} (episode format error)")
for i, option in enumerate(options):
print(f" Option {i}: {option}")
# Ensure we always return valid JSON
try:
# Convert episode to int if it's not already
episode_int = int(episode) if not isinstance(episode, int) else episode
result = {
"imdb_id": imdb_id,
"season": season,
"episode": episode,
"episode": episode_int,
"current_data": episode_data,
"options": options
}
@@ -1087,4 +1104,12 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int
return result
except Exception as e:
print(f"❌ ERROR: Failed to create response: {e}")
raise HTTPException(status_code=500, detail=f"Failed to generate episode options: {str(e)}")
# Return with original episode value if conversion fails
result = {
"imdb_id": imdb_id,
"season": season,
"episode": episode,
"current_data": episode_data,
"options": options
}
return result