From 00b26c8cbc50b92c283970393fa67af16d5994bc Mon Sep 17 00:00:00 2001 From: Lukas Date: Sat, 30 May 2026 11:42:19 +0200 Subject: [PATCH] fix: validate generated keys before creating Serie objects - Add is_valid_key check in SerieScanner._read_data_from_file() to prevent passing invalid keys to Serie constructor (caused ValueError) - Improve error message for key generation failures - Add warning log before removing duplicate source folders in rename service --- src/core/SerieScanner.py | 14 ++++++++++++-- src/server/services/folder_rename_service.py | 5 +++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/core/SerieScanner.py b/src/core/SerieScanner.py index 2380cb8..f7f6625 100644 --- a/src/core/SerieScanner.py +++ b/src/core/SerieScanner.py @@ -24,7 +24,7 @@ from src.config.settings import settings from src.core.entities.series import Serie from src.core.exceptions.Exceptions import MatchNotFoundError, NoKeyFoundException from src.core.providers.base_provider import Loader -from src.core.utils.key_utils import generate_key_from_folder +from src.core.utils.key_utils import generate_key_from_folder, is_valid_key from src.server.database.connection import get_sync_session from src.server.database.service import AnimeSeriesService, EpisodeService @@ -726,6 +726,16 @@ class SerieScanner: try: generated_key = generate_key_from_folder(folder_name) year_from_folder = self._extract_year_from_folder_name(folder_name) + + # Validate that the generated key is usable + if not generated_key or not is_valid_key(generated_key): + logger.warning( + "Serie key is invalid for folder '%s' (key='%s') - skipping", + folder_name, + generated_key + ) + return None + logger.info( "Generated key for folder '%s' -> key='%s'", folder_name, @@ -741,7 +751,7 @@ class SerieScanner: ) except Exception as exc: logger.warning( - "Failed to generate key for folder '%s': %s", + "Unexpected error generating key for folder '%s': %s", folder_name, exc ) diff --git a/src/server/services/folder_rename_service.py b/src/server/services/folder_rename_service.py index c24901f..cb8c0e9 100644 --- a/src/server/services/folder_rename_service.py +++ b/src/server/services/folder_rename_service.py @@ -602,6 +602,11 @@ async def validate_and_rename_series_folders(dry_run: bool = False) -> Dict[str, try: import shutil + logger.warning( + "Removing source duplicate folder '%s' — target '%s' already exists", + current_name, + expected_name, + ) shutil.rmtree(series_dir) logger.info( "Removed source folder '%s' — series already exists at target",