Task 2: guard SeriesApp NFOService init on NFOServiceFactory fallback and document config-only TMDB API key support

This commit is contained in:
2026-04-19 18:46:30 +02:00
parent 2aa184c870
commit b10cce0489
4 changed files with 46 additions and 13 deletions

View File

@@ -217,6 +217,7 @@ Source: [src/server/models/config.py](../src/server/models/config.py#L15-L24)
- `auto_create` creates NFO files during the download process
- `update_on_scan` refreshes metadata when scanning existing anime
- Image downloads require valid `tmdb_api_key`
- `TMDB_API_KEY` environment variable is optional when `nfo.tmdb_api_key` is configured in `data/config.json`
- Larger image sizes (`w780`, `original`) consume more storage space
Source: [src/server/models/config.py](../src/server/models/config.py#L109-L132)

View File

@@ -54,6 +54,8 @@ Up to 5 background workers share one `NFOService`/`TMDBClient` instance. The `as
## Task 2 — Guard NFOService init in SeriesApp on factory fallback, not just env var
- [x] Completed
### Where
`src/core/SeriesApp.py``__init__` method (~line 175)

View File

@@ -171,23 +171,26 @@ class SeriesApp:
# Initialize empty list - series loaded later via load_series_from_list()
# No need to call _init_list_sync() anymore
# Initialize NFO service if TMDB API key is configured
# Initialize NFO service if a TMDB API key is configured
self.nfo_service: Optional[NFOService] = None
if settings.tmdb_api_key:
try:
from src.core.services.nfo_factory import get_nfo_factory
factory = get_nfo_factory()
self.nfo_service = factory.create()
logger.info("NFO service initialized successfully")
except (ValueError, Exception) as e: # pylint: disable=broad-except
logger.warning(
"Failed to initialize NFO service: %s", str(e)
)
self.nfo_service = None
try:
from src.core.services.nfo_factory import get_nfo_factory
factory = get_nfo_factory()
self.nfo_service = factory.create()
logger.info("NFO service initialized successfully")
except ValueError:
logger.info(
"NFO service not available — TMDB API key not configured"
)
self.nfo_service = None
except Exception as e: # pylint: disable=broad-except
logger.warning("Failed to initialize NFO service: %s", str(e))
self.nfo_service = None
logger.info(
"SeriesApp initialized for directory: %s",
directory_to_search
directory_to_search,
)
@property

View File

@@ -49,6 +49,33 @@ class TestSeriesAppInitialization:
with pytest.raises(RuntimeError):
SeriesApp(test_dir)
@patch('src.core.SeriesApp.Loaders')
@patch('src.core.SeriesApp.SerieScanner')
@patch('src.core.SeriesApp.SerieList')
@patch('src.core.services.nfo_factory.get_nfo_factory')
@patch('src.core.SeriesApp.settings')
def test_init_uses_config_fallback_for_nfo_service(
self,
mock_settings,
mock_get_factory,
mock_serie_list,
mock_scanner,
mock_loaders,
):
"""SeriesApp should initialize NFO via config.json even when TMDB_API_KEY is unset."""
test_dir = "/test/anime"
mock_settings.tmdb_api_key = None
mock_factory = Mock()
mock_service = Mock()
mock_factory.create.return_value = mock_service
mock_get_factory.return_value = mock_factory
app = SeriesApp(test_dir)
assert app.nfo_service is mock_service
mock_get_factory.assert_called_once()
class TestSeriesAppSearch:
"""Test search functionality."""