Task 2: guard SeriesApp NFOService init on NFOServiceFactory fallback and document config-only TMDB API key support
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user