- Add showtitle and namedseason to mapper output
- Add multi-language fallback (en-US, ja-JP) for empty overview
- Use search result overview as last resort fallback
- Add tests for new NFO creation behavior
When TMDB returns an empty German (de-DE) overview for anime (e.g.
Basilisk), the NFO plot tag was missing. Now both create and update
paths call _enrich_details_with_fallback() which fetches the English
(en-US) overview as a fallback.
Additionally, the <plot> XML element is always written (even when
empty) via the always_write parameter on _add_element(), ensuring
consistent NFO structure regardless of creation path.
Changes:
- nfo_service.py: add _enrich_details_with_fallback() method, call it
in create_tvshow_nfo and update_tvshow_nfo
- nfo_generator.py: add always_write param to _add_element(), use it
for <plot> tag
- test_nfo_service.py: add TestEnrichDetailsWithFallback with 4 tests
- Refactored ImageDownloader to use persistent session pattern
- Changed default timeout from 60s to 30s to match test expectations
- Added session management with context manager protocol
- Fixed _get_session() to handle both real and mock sessions
- Fixed download_all_media() to return None for missing URLs
Test fixes:
- Updated all test mocks to use proper async context manager protocol
- Fixed validate_image tests to use public API instead of non-existent private method
- Updated test fixture to use smaller min_file_size for test images
- Fixed retry tests to use proper aiohttp.ClientResponseError with RequestInfo
- Corrected test assertions to match actual behavior (404 returns False, not exception)
All 20 ImageDownloader unit tests now passing (100%)
- Add __aenter__ and __aexit__ methods
- Add close() method for session cleanup
- Add retry_delay parameter for testability
- Add session attribute (currently unused, for future optimization)
Note: Current implementation still creates per-request sessions.
Tests that mock session attribute will need updating to match
actual session-per-request pattern or implementation needs
refactoring to use persistent session.
- Created TMDB API client with async requests, caching, and retry logic
- Implemented NFO XML generator for Kodi/XBMC format
- Created image downloader for poster/logo/fanart with validation
- Added NFO service to orchestrate metadata creation
- Added NFO-related configuration settings
- Updated requirements.txt with aiohttp, lxml, pillow
- Created unit tests (need refinement due to implementation mismatch)
Components created:
- src/core/services/tmdb_client.py (270 lines)
- src/core/services/nfo_service.py (390 lines)
- src/core/utils/nfo_generator.py (180 lines)
- src/core/utils/image_downloader.py (296 lines)
- tests/unit/test_tmdb_client.py
- tests/unit/test_nfo_generator.py
- tests/unit/test_image_downloader.py
Note: Tests need to be updated to match actual implementation APIs.
Dependencies installed: aiohttp, lxml, pillow