- Deleted the `renamer.decorators` package, including `caching.py` and `__init__.py`, to streamline the codebase. - Updated tests to reflect changes in import paths for caching decorators. - Added a comprehensive changelog to document major refactoring efforts and future plans. - Introduced an engineering guide detailing architecture, core components, and development setup.
7.8 KiB
7.8 KiB
Changelog
All notable changes to the Renamer project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Future Plans
See REFACTORING_PROGRESS.md and ToDo.md for upcoming features and improvements.
[0.7.0-dev] - 2026-01-01
Major Refactoring (Phases 1-3)
This development version represents a significant refactoring effort focused on code quality, architecture, and maintainability.
Phase 3: Code Quality (COMPLETED)
Added
- Type Hints: Complete type coverage for
DefaultExtractor(21 methods) - Mypy Integration: Added mypy>=1.0.0 as dev dependency for type checking
- Comprehensive Docstrings: Added module + class + method docstrings to 5 key files:
default_extractor.py- 22 docstringsextractor.py- Enhanced with examplesfileinfo_extractor.py- Enhanced with Args/Returnsmetadata_extractor.py- Enhanced with examplesformatter.py- Enhanced FormatterApplier
Changed
- Constants Reorganization: Split monolithic
constants.pyinto 8 logical modules:media_constants.py- Media typessource_constants.py- Video sourcesframe_constants.py- Frame classes and quality indicatorsmoviedb_constants.py- Database identifiersedition_constants.py- Special editionslang_constants.py- Skip words for language detectionyear_constants.py- Dynamic year validationcyrillic_constants.py- Character mappings
- Dynamic Year Validation: Replaced hardcoded year values with
is_valid_year()function - Language Extraction: Simplified using
langcodes.Language.get()for dynamic validation (~80 lines removed)
Removed
- Code Duplication: Eliminated ~95 lines of duplicated code:
- ~80 lines of hardcoded language lists
- ~15 lines of duplicated movie DB pattern matching
- Hardcoded Values: Removed hardcoded quality indicators, year values, Cyrillic mappings
Phase 2: Architecture Foundation (COMPLETED)
Added
- Base Classes and Protocols (409 lines):
DataExtractorProtocol defining extractor interface (23 methods)FormatterABCs:DataFormatter,TextFormatter,MarkupFormatter,CompositeFormatter
- Service Layer (935 lines):
FileTreeService: Directory scanning and validationMetadataService: Thread-pooled metadata extraction with cancellation supportRenameService: Filename validation, sanitization, and atomic renaming
- Utility Modules (953 lines):
PatternExtractor: Centralized regex pattern matchingLanguageCodeExtractor: Language code processingFrameClassMatcher: Resolution/frame class matching
- Command Palette Integration:
AppCommandProvider: 8 main app commandsCacheCommandProvider: 7 cache management commands- Access via Ctrl+P
Improved
- Thread Safety: MetadataService uses ThreadPoolExecutor with Lock for concurrent operations
- Testability: Services can be tested independently of UI
- Reusability: Clear interfaces and separation of concerns
Phase 1: Critical Bug Fixes (COMPLETED)
Fixed
- Cache Key Generation Bug: Fixed critical variable scoping issue in cache system
- Resource Leaks: Fixed file handle leaks in tests (proper context managers)
- Exception Handling: Replaced bare
except:clauses with specific exceptions
Added
- Thread Safety: Added
threading.RLockto cache for concurrent access - Logging: Comprehensive logging throughout extractors and formatters:
- Debug: Language code conversions, metadata reads
- Warning: Network failures, API errors, MediaInfo parse failures
- Error: Formatter application failures
Changed
- Unified Cache Subsystem (500 lines):
- Modular architecture:
core.py,types.py,strategies.py,managers.py,decorators.py - 4 cache key strategies:
FilepathMethodStrategy,APIRequestStrategy,SimpleKeyStrategy,CustomStrategy - Enhanced decorators:
@cached_method(),@cached_api(),@cached_property() - Cache manager operations:
clear_all(),clear_by_prefix(),clear_expired(),compact_cache()
- Modular architecture:
Phase 5: Test Coverage (PARTIALLY COMPLETED - 4/6)
Added
- Service Tests (30+ tests): FileTreeService, MetadataService, RenameService
- Utility Tests (70+ tests): PatternExtractor, LanguageCodeExtractor, FrameClassMatcher
- Formatter Tests (40+ tests): All formatter classes and FormatterApplier
- Cache Tests (18 tests): Cache subsystem functionality
- Dataset Organization:
filename_patterns.json: 46 comprehensive test casesframe_class_tests.json: 25 frame class test cases- Sample file generator:
fill_sample_mediafiles.py - Dataset loaders in
conftest.py
Changed
- Test Organization: Consolidated test data into
renamer/test/datasets/ - Total Tests: 560 tests (1 skipped), all passing
Documentation Improvements
Added
- ENGINEERING_GUIDE.md: Comprehensive 900+ line technical reference
- CHANGELOG.md: This file
Changed
- CLAUDE.md: Streamlined to pointer to ENGINEERING_GUIDE.md
- AI_AGENT.md: Marked as deprecated, points to ENGINEERING_GUIDE.md
- DEVELOP.md: Streamlined with references to ENGINEERING_GUIDE.md
- README.md: Streamlined user guide with references
Removed
- Outdated version information from documentation files
- Duplicated content now in ENGINEERING_GUIDE.md
Breaking Changes
Cache System
- Cache key format changed: Old cache files are invalid
- Migration: Users should clear cache:
rm -rf ~/.cache/renamer/ - Impact: No data loss, just cache miss on first run after upgrade
Dependencies
- Added: mypy>=1.0.0 as dev dependency
Statistics
Code Quality Metrics
- Lines Added: ~3,497 lines
- Phase 1: ~500 lines (cache subsystem)
- Phase 2: ~2,297 lines (base classes + services + utilities)
- Phase 3: ~200 lines (docstrings)
- Phase 5: ~500 lines (new tests)
- Lines Removed: ~290 lines through code duplication elimination
- Net Gain: ~3,207 lines of quality code
Test Coverage
- Total Tests: 560 (was 518)
- New Tests: +42 tests (+8%)
- Pass Rate: 100% (559 passed, 1 skipped)
Architecture Improvements
- ✅ Protocols and ABCs for consistent interfaces
- ✅ Service layer with dependency injection
- ✅ Thread pool for concurrent operations
- ✅ Utility modules for shared logic
- ✅ Command palette for unified access
- ✅ Type hints and mypy integration
- ✅ Comprehensive docstrings
[0.6.0] - 2025-12-31
Added
- Initial cache subsystem implementation
- Basic service layer structure
- Protocol definitions for extractors
Changed
- Refactored cache key generation
- Improved error handling
[0.5.10] - Previous Release
Features
- Dual display modes (technical/catalog)
- TMDB integration with poster display
- Settings configuration UI
- Persistent caching with TTL
- Intelligent file renaming
- Color-coded information display
- Keyboard and mouse navigation
- Help screen with key bindings
Version History Summary
- 0.7.0-dev (2026-01-01): Major refactoring - code quality, architecture, testing
- 0.6.0 (2025-12-31): Cache improvements, service layer foundation
- 0.5.x: Settings, caching, catalog mode, poster display
- 0.4.x: TMDB integration
- 0.3.x: Enhanced extractors and formatters
- 0.2.x: Initial TUI with basic metadata
Links
- ENGINEERING_GUIDE.md - Complete technical documentation
- REFACTORING_PROGRESS.md - Future refactoring plans
- ToDo.md - Current task list
Last Updated: 2026-01-01