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
|
- `auto_create` creates NFO files during the download process
|
||||||
- `update_on_scan` refreshes metadata when scanning existing anime
|
- `update_on_scan` refreshes metadata when scanning existing anime
|
||||||
- Image downloads require valid `tmdb_api_key`
|
- 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
|
- Larger image sizes (`w780`, `original`) consume more storage space
|
||||||
|
|
||||||
Source: [src/server/models/config.py](../src/server/models/config.py#L109-L132)
|
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
|
## Task 2 — Guard NFOService init in SeriesApp on factory fallback, not just env var
|
||||||
|
|
||||||
|
- [x] Completed
|
||||||
|
|
||||||
### Where
|
### Where
|
||||||
`src/core/SeriesApp.py` — `__init__` method (~line 175)
|
`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()
|
# Initialize empty list - series loaded later via load_series_from_list()
|
||||||
# No need to call _init_list_sync() anymore
|
# 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
|
self.nfo_service: Optional[NFOService] = None
|
||||||
if settings.tmdb_api_key:
|
try:
|
||||||
try:
|
from src.core.services.nfo_factory import get_nfo_factory
|
||||||
from src.core.services.nfo_factory import get_nfo_factory
|
|
||||||
factory = get_nfo_factory()
|
factory = get_nfo_factory()
|
||||||
self.nfo_service = factory.create()
|
self.nfo_service = factory.create()
|
||||||
logger.info("NFO service initialized successfully")
|
logger.info("NFO service initialized successfully")
|
||||||
except (ValueError, Exception) as e: # pylint: disable=broad-except
|
except ValueError:
|
||||||
logger.warning(
|
logger.info(
|
||||||
"Failed to initialize NFO service: %s", str(e)
|
"NFO service not available — TMDB API key not configured"
|
||||||
)
|
)
|
||||||
self.nfo_service = None
|
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(
|
logger.info(
|
||||||
"SeriesApp initialized for directory: %s",
|
"SeriesApp initialized for directory: %s",
|
||||||
directory_to_search
|
directory_to_search,
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|||||||
@@ -49,6 +49,33 @@ class TestSeriesAppInitialization:
|
|||||||
with pytest.raises(RuntimeError):
|
with pytest.raises(RuntimeError):
|
||||||
SeriesApp(test_dir)
|
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:
|
class TestSeriesAppSearch:
|
||||||
"""Test search functionality."""
|
"""Test search functionality."""
|
||||||
|
|||||||
Reference in New Issue
Block a user