feat(nfo): add minimal NFO fallback when TMDB fails
- Add create_minimal_nfo() method to NFOService for fallback when TMDB lookup fails - Update API endpoints (single and batch) to use minimal NFO fallback on TMDBAPIError - Document fallback behavior in NFO_GUIDE.md section 3.6 - Add unit tests for minimal NFO creation (11 tests passing) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -144,6 +144,27 @@ async def batch_create_nfo(
|
||||
nfo_path=str(nfo_path)
|
||||
)
|
||||
|
||||
except TMDBAPIError as e:
|
||||
logger.warning("TMDB API error for %s, creating minimal fallback: %s", serie_id, e)
|
||||
# TMDB failed, create minimal NFO
|
||||
try:
|
||||
serie_folder = serie.ensure_folder_with_year()
|
||||
except Exception:
|
||||
serie_folder = serie_folder
|
||||
|
||||
serie_name = serie.name or serie_folder
|
||||
nfo_path = await nfo_service.create_minimal_nfo(
|
||||
serie_name=serie_name,
|
||||
serie_folder=serie_folder
|
||||
)
|
||||
|
||||
return NFOBatchResult(
|
||||
serie_id=serie_id,
|
||||
serie_folder=serie_folder,
|
||||
success=True,
|
||||
message="Created minimal NFO (TMDB lookup failed)",
|
||||
nfo_path=str(nfo_path)
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Error creating NFO for {serie_id}: {e}",
|
||||
@@ -429,11 +450,42 @@ async def create_nfo(
|
||||
except HTTPException:
|
||||
raise
|
||||
except TMDBAPIError as e:
|
||||
logger.warning("TMDB API error creating NFO for %s: %s", serie_id, e)
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
||||
detail=f"TMDB API error: {str(e)}"
|
||||
) from e
|
||||
logger.warning("TMDB API error for %s, creating minimal fallback: %s", serie_id, e)
|
||||
# TMDB failed, create minimal NFO with just folder name
|
||||
try:
|
||||
serie_folder = serie.ensure_folder_with_year()
|
||||
except Exception:
|
||||
serie_folder = serie_folder
|
||||
|
||||
folder_path = Path(settings.anime_directory) / serie_folder
|
||||
serie_name_fallback = request.serie_name or serie.name or serie_folder
|
||||
|
||||
nfo_path = await nfo_service.create_minimal_nfo(
|
||||
serie_name=serie_name_fallback,
|
||||
serie_folder=serie_folder,
|
||||
year=year
|
||||
)
|
||||
|
||||
# Check media files (will likely be empty)
|
||||
media_status = check_media_files(folder_path)
|
||||
file_paths = get_media_file_paths(folder_path)
|
||||
|
||||
media_files = MediaFilesStatus(
|
||||
has_poster=media_status.get("poster", False),
|
||||
has_logo=media_status.get("logo", False),
|
||||
has_fanart=media_status.get("fanart", False),
|
||||
poster_path=str(file_paths["poster"]) if file_paths.get("poster") else None,
|
||||
logo_path=str(file_paths["logo"]) if file_paths.get("logo") else None,
|
||||
fanart_path=str(file_paths["fanart"]) if file_paths.get("fanart") else None
|
||||
)
|
||||
|
||||
return NFOCreateResponse(
|
||||
serie_id=serie_id,
|
||||
serie_folder=serie_folder,
|
||||
nfo_path=str(nfo_path),
|
||||
media_files=media_files,
|
||||
message="Created minimal NFO (TMDB lookup failed)"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Error creating NFO for {serie_id}: {e}",
|
||||
|
||||
Reference in New Issue
Block a user