- Add optional fsk field to TVShowNFO model - Implement TMDB content ratings API integration - Add FSK extraction and mapping (FSK 0/6/12/16/18) - Update XML generation to prefer FSK over MPAA - Add nfo_prefer_fsk_rating config setting - Add 31 comprehensive tests for FSK functionality - All 112 NFO tests passing
9.0 KiB
Aniworld Web Application Development Instructions
This document provides detailed tasks for AI agents to implement a modern web application for the Aniworld anime download manager. All tasks should follow the coding guidelines specified in the project's copilot instructions.
Project Overview
The goal is to create a FastAPI-based web application that provides a modern interface for the existing Aniworld anime download functionality. The core anime logic should remain in SeriesApp.py while the web layer provides REST API endpoints and a responsive UI.
Architecture Principles
- Single Responsibility: Each file/class has one clear purpose
- Dependency Injection: Use FastAPI's dependency system
- Clean Separation: Web layer calls core logic, never the reverse
- File Size Limit: Maximum 500 lines per file
- Type Hints: Use comprehensive type annotations
- Error Handling: Proper exception handling and logging
Additional Implementation Guidelines
Code Style and Standards
- Type Hints: Use comprehensive type annotations throughout all modules
- Docstrings: Follow PEP 257 for function and class documentation
- Error Handling: Implement custom exception classes with meaningful messages
- Logging: Use structured logging with appropriate log levels
- Security: Validate all inputs and sanitize outputs
- Performance: Use async/await patterns for I/O operations
📞 Escalation
If you encounter:
- Architecture issues requiring design decisions
- Tests that conflict with documented requirements
- Breaking changes needed
- Unclear requirements or expectations
Document the issue and escalate rather than guessing.
📚 Helpful Commands
# Run all tests
conda run -n AniWorld python -m pytest tests/ -v --tb=short
# Run specific test file
conda run -n AniWorld python -m pytest tests/unit/test_websocket_service.py -v
# Run specific test class
conda run -n AniWorld python -m pytest tests/unit/test_websocket_service.py::TestWebSocketService -v
# Run specific test
conda run -n AniWorld python -m pytest tests/unit/test_websocket_service.py::TestWebSocketService::test_broadcast_download_progress -v
# Run with extra verbosity
conda run -n AniWorld python -m pytest tests/ -vv
# Run with full traceback
conda run -n AniWorld python -m pytest tests/ -v --tb=long
# Run and stop at first failure
conda run -n AniWorld python -m pytest tests/ -v -x
# Run tests matching pattern
conda run -n AniWorld python -m pytest tests/ -v -k "auth"
# Show all print statements
conda run -n AniWorld python -m pytest tests/ -v -s
#Run app
conda run -n AniWorld python -m uvicorn src.server.fastapi_app:app --host 127.0.0.1 --port 8000 --reload
Implementation Notes
- Incremental Development: Implement features incrementally, testing each component thoroughly before moving to the next
- Code Review: Review all generated code for adherence to project standards
- Documentation: Document all public APIs and complex logic
- Testing: Maintain test coverage above 80% for all new code
- Performance: Profile and optimize critical paths, especially download and streaming operations
- Security: Regular security audits and dependency updates
- Monitoring: Implement comprehensive monitoring and alerting
- Maintenance: Plan for regular maintenance and updates
Task Completion Checklist
For each task completed:
- Implementation follows coding standards
- Unit tests written and passing
- Integration tests passing
- Documentation updated
- Error handling implemented
- Logging added
- Security considerations addressed
- Performance validated
- Code reviewed
- Task marked as complete in instructions.md
- Infrastructure.md updated and other docs
- Changes committed to git; keep your messages in git short and clear
- Take the next task
TODO List:
🎯 Priority: NFO FSK Rating Implementation ✅ COMPLETED
Task: Implement German FSK Rating Support in NFO Files
Status: COMPLETED ✅
Implementation Summary:
All requirements have been successfully implemented and tested:
- ✅ TMDB API Integration: Added
get_tv_show_content_ratings()method to TMDBClient - ✅ Data Model: Added optional
fskfield toTVShowNFOmodel - ✅ FSK Extraction: Implemented
_extract_fsk_rating()method in NFOService with comprehensive mapping:- Maps TMDB German ratings (0, 6, 12, 16, 18) to FSK format
- Handles already formatted FSK strings
- Supports partial matches (e.g., "Ab 16 Jahren" → "FSK 16")
- Fallback to None when German rating unavailable
- ✅ XML Generation: Updated
generate_tvshow_nfo()to prefer FSK over MPAA when available - ✅ Configuration: Added
nfo_prefer_fsk_ratingsetting (default: True) - ✅ Comprehensive Testing: Added 31 new tests across test_nfo_service.py and test_nfo_generator.py
- All 112 NFO-related tests passing
- Test coverage includes FSK extraction, XML generation, edge cases, and integration
Files Modified:
src/core/entities/nfo_models.py- Addedfskfieldsrc/core/services/nfo_service.py- Added FSK extraction and TMDB API callsrc/core/services/tmdb_client.py- Added content ratings endpointsrc/core/utils/nfo_generator.py- Updated XML generation to prefer FSKsrc/config/settings.py- Addednfo_prefer_fsk_ratingsetting
Files Created:
tests/unit/test_nfo_service.py- 23 comprehensive unit tests
Files Updated:
tests/unit/test_nfo_generator.py- Added 5 FSK-specific tests
Acceptance Criteria Met:
- ✅ NFO files contain FSK rating when available from TMDB
- ✅ Fallback to MPAA rating if FSK not available
- ✅ Configuration setting to prefer FSK over MPAA
- ✅ Unit tests cover all FSK values and fallback scenarios
- ✅ Existing NFO functionality remains unchanged
- ✅ Documentation updated with FSK support details
🧪 Priority: Comprehensive NFO and Image Download Tests
Task: Add Comprehensive Tests for NFO Creation and Media Downloads
Expand test coverage for NFO creation, updates, and media file (poster/logo/fanart) downloads.
Requirements:
-
Unit Tests for NFO Service (
tests/unit/test_nfo_service.py):- Test auto-create NFO before download with all settings combinations
- Test NFO update on scan (enabled/disabled)
- Test poster download (enabled/disabled, various sizes)
- Test logo download (enabled/disabled, English/local languages)
- Test fanart download (enabled/disabled, various sizes)
- Test concurrent media downloads
- Test media download failures and retries
- Test NFO creation without media downloads
- Test image size configurations (original, w780, w500, w342)
- Mock TMDB API responses for all scenarios
-
Integration Tests for NFO Flow (
tests/integration/test_nfo_integration.py):- Test complete NFO creation flow before episode download
- Test NFO update during series scan
- Test media file existence after NFO creation
- Test media file updates when NFO is updated
- Test NFO creation failure doesn't block download
- Test NFO and media files in correct folder structure
- Test cleanup of orphaned media files
-
API Endpoint Tests (
tests/api/test_nfo_endpoints.py):- Test
/api/nfo/series/{series_id}/checkendpoint - Test
/api/nfo/series/{series_id}/createendpoint - Test
/api/nfo/series/{series_id}/updateendpoint - Test
/api/nfo/series/{series_id}/mediaendpoint (media files status) - Test
/api/nfo/series/{series_id}/media/downloadendpoint - Test error responses (404, 400, 500)
- Test authentication and authorization
- Test
-
Performance Tests (
tests/performance/test_nfo_performance.py):- Test NFO creation performance (< 2 seconds)
- Test concurrent NFO creation for multiple series
- Test media download performance for large images
- Test bulk NFO scan performance (100+ series)
Files to create/modify:
tests/unit/test_nfo_service.py- Comprehensive unit teststests/unit/test_nfo_generator.py- XML generation teststests/integration/test_nfo_integration.py- End-to-end NFO teststests/integration/test_nfo_media_download.py- Media download integrationtests/api/test_nfo_endpoints.py- API endpoint teststests/performance/test_nfo_performance.py- Performance benchmarks
Acceptance Criteria:
- Test coverage for NFO service > 90%
- All media download scenarios tested
- Integration tests verify file system state
- API tests cover all endpoints and error cases
- Performance tests validate acceptable speeds
- All tests pass without mocking filesystem
- Mock TMDB API calls appropriately
- Test documentation includes setup and teardown details
Test Data Requirements:
- Mock TMDB responses for various anime series
- Sample poster/logo/fanart images for testing
- Test fixtures for NFO XML validation
- Edge cases: missing images, API failures, timeouts