fb8f0bdbd2
Fix Issue 5: Create NFOServiceFactory for centralized initialization
...
- Created NFOServiceFactory in src/core/services/nfo_factory.py
- Enforces configuration precedence: explicit params > ENV > config.json
- Provides create() and create_optional() methods
- Singleton factory instance via get_nfo_factory()
- Updated 4 files to use factory (nfo.py, SeriesApp.py, series_manager_service.py, nfo_cli.py)
- Fixed test mocks: added ensure_folder_with_year(), corrected dependency test
- Tests: 17/18 NFO passing, 15/16 anime passing
- Resolves Code Duplication 2 (NFO initialization)
2026-01-24 21:52:54 +01:00
1c476003d6
feat: Add 'update' command to NFO CLI tool
...
- New command: python -m src.cli.nfo_cli update
- Updates all existing NFO files with fresh TMDB data
- Optionally re-downloads media files
- Shows progress with success/error count
- Updates task3_status.md to mark update_tvshow_nfo() as complete
2026-01-11 21:11:49 +01:00
36e663c556
feat: Integrate NFO service with series management
...
- Created SeriesManagerService to orchestrate SerieList and NFOService
- Follows clean architecture (core entities stay independent)
- Supports auto-create and update-on-scan based on configuration
- Created CLI tool (src/cli/nfo_cli.py) for NFO management
- Commands: 'scan' (create/update NFOs) and 'status' (check NFO coverage)
- Batch processing with rate limiting to respect TMDB API limits
- Comprehensive error handling and logging
Usage:
python -m src.cli.nfo_cli scan # Create missing NFOs
python -m src.cli.nfo_cli status # Check NFO statistics
2026-01-11 21:02:28 +01:00
3d2ef53463
Remove db, config, and log files from git tracking
2026-01-09 19:21:05 +01:00
ab7d78261e
Replace asyncio.to_thread with ThreadPoolExecutor.run_in_executor
...
- Add ThreadPoolExecutor with 3 max workers to SeriesApp
- Replace all asyncio.to_thread calls with loop.run_in_executor
- Add shutdown() method to properly cleanup executor
- Integrate SeriesApp.shutdown() into FastAPI shutdown sequence
- Ensures proper resource cleanup on Ctrl+C (SIGINT/SIGTERM)
2026-01-03 21:04:52 +01:00
27108aacda
Fix architecture issues from todolist
...
- Add documentation warnings for in-memory rate limiting and failed login attempts
- Consolidate duplicate health endpoints into api/health.py
- Fix CLI to use correct async rescan method names
- Update download.py and anime.py to use custom exception classes
- Add WebSocket room validation and rate limiting
2025-12-15 14:23:41 +01:00
6db850c2ad
cleanup
2025-10-22 15:54:36 +02:00
92795cf9b3
Improve docs and security defaults
2025-10-22 15:22:58 +02:00
947a8ff51f
cleanup
2025-10-22 13:49:32 +02:00
04799633b4
cleanup
2025-10-22 13:38:46 +02:00
f64ba74d93
refactor: Apply PEP8 naming conventions - convert PascalCase methods to snake_case
...
This comprehensive refactoring applies PEP8 naming conventions across the codebase:
## Core Changes:
### src/cli/Main.py
- Renamed __InitList__() to __init_list__()
- Renamed print_Download_Progress() to print_download_progress()
- Fixed variable naming: task3 -> download_progress_task
- Fixed parameter spacing: words :str -> words: str
- Updated all method calls to use snake_case
- Added comprehensive docstrings
### src/core/SerieScanner.py
- Renamed Scan() to scan()
- Renamed GetTotalToScan() to get_total_to_scan()
- Renamed Reinit() to reinit()
- Renamed private methods to snake_case:
- __ReadDataFromFile() -> __read_data_from_file()
- __GetMissingEpisodesAndSeason() -> __get_missing_episodes_and_season()
- __GetEpisodeAndSeason() -> __get_episode_and_season()
- __GetEpisodesAndSeasons() -> __get_episodes_and_seasons()
- Added comprehensive docstrings to all methods
- Fixed long line issues
### src/core/providers/base_provider.py
- Refactored abstract base class with proper naming:
- Search() -> search()
- IsLanguage() -> is_language()
- Download() -> download()
- GetSiteKey() -> get_site_key()
- GetTitle() -> get_title()
- Added proper type hints (Dict, List, etc.)
- Added comprehensive docstrings explaining contracts
- Fixed newline at end of file
### src/core/providers/aniworld_provider.py
- Renamed public methods to snake_case:
- Search() -> search()
- IsLanguage() -> is_language()
- Download() -> download()
- GetSiteKey() -> get_site_key()
- GetTitle() -> get_title()
- ClearCache() -> clear_cache()
- RemoveFromCache() -> remove_from_cache()
- Renamed private methods to snake_case:
- _GetLanguageKey() -> _get_language_key()
- _GetKeyHTML() -> _get_key_html()
- _GetEpisodeHTML() -> _get_episode_html()
- Fixed import organization
- Improved code formatting and line lengths
- Added docstrings to all methods
### src/core/SeriesApp.py
- Updated all calls to use new snake_case method names
- Updated loader calls: loader.Search() -> loader.search()
- Updated loader calls: loader.Download() -> loader.download()
- Updated scanner calls: SerieScanner.GetTotalToScan() -> SerieScanner.get_total_to_scan()
- Updated scanner calls: SerieScanner.Reinit() -> SerieScanner.reinit()
- Updated scanner calls: SerieScanner.Scan() -> SerieScanner.scan()
### tests/unit/test_series_app.py
- Updated mock calls to use new snake_case method names:
- get_total_to_scan() instead of GetTotalToScan()
- reinit() instead of Reinit()
- scan() instead of Scan()
## Verification:
- All unit tests pass ✅
- All integration tests pass ✅
- All tests pass ✅
- No breaking changes to functionality
## Standards Applied:
- PEP 8: Function/method names use lowercase with underscores (snake_case)
- PEP 257: Added comprehensive docstrings
- Type hints: Proper type annotations where applicable
- Code formatting: Fixed line lengths and spacing
2025-10-22 12:44:42 +02:00
80507119b7
fix: resolve line length violations (80+ characters)
...
- refactor src/cli/Main.py: split long logging config, user prompts, and method calls
- refactor src/config/settings.py: break long Field definitions into multiple lines
- refactor src/core/providers/enhanced_provider.py: split provider lists, headers, and long f-strings
- refactor src/core/providers/streaming/voe.py: format HTTP header setup
- update QualityTODO.md: mark all line length violations as completed
All files now comply with 88-character line limit. Code readability improved with
better-structured multi-line statements and intermediate variables for complex expressions.
2025-10-22 12:16:41 +02:00
7a71715183
backup
2025-10-12 18:05:31 +02:00
85f2d2c6f7
cleanup 2
2025-10-05 22:22:04 +02:00
e477780ed6
refactoring
2025-09-29 21:18:42 +02:00
78fc6068fb
new folder structure
2025-09-29 09:17:13 +02:00