- 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.
226 lines
7.8 KiB
Markdown
226 lines
7.8 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to the Renamer project are documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
---
|
|
|
|
## [Unreleased]
|
|
|
|
### Future Plans
|
|
See [REFACTORING_PROGRESS.md](REFACTORING_PROGRESS.md) and [ToDo.md](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 docstrings
|
|
- `extractor.py` - Enhanced with examples
|
|
- `fileinfo_extractor.py` - Enhanced with Args/Returns
|
|
- `metadata_extractor.py` - Enhanced with examples
|
|
- `formatter.py` - Enhanced FormatterApplier
|
|
|
|
#### Changed
|
|
- **Constants Reorganization**: Split monolithic `constants.py` into 8 logical modules:
|
|
- `media_constants.py` - Media types
|
|
- `source_constants.py` - Video sources
|
|
- `frame_constants.py` - Frame classes and quality indicators
|
|
- `moviedb_constants.py` - Database identifiers
|
|
- `edition_constants.py` - Special editions
|
|
- `lang_constants.py` - Skip words for language detection
|
|
- `year_constants.py` - Dynamic year validation
|
|
- `cyrillic_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):
|
|
- `DataExtractor` Protocol defining extractor interface (23 methods)
|
|
- `Formatter` ABCs: `DataFormatter`, `TextFormatter`, `MarkupFormatter`, `CompositeFormatter`
|
|
- **Service Layer** (935 lines):
|
|
- `FileTreeService`: Directory scanning and validation
|
|
- `MetadataService`: Thread-pooled metadata extraction with cancellation support
|
|
- `RenameService`: Filename validation, sanitization, and atomic renaming
|
|
- **Utility Modules** (953 lines):
|
|
- `PatternExtractor`: Centralized regex pattern matching
|
|
- `LanguageCodeExtractor`: Language code processing
|
|
- `FrameClassMatcher`: Resolution/frame class matching
|
|
- **Command Palette Integration**:
|
|
- `AppCommandProvider`: 8 main app commands
|
|
- `CacheCommandProvider`: 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.RLock` to 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()`
|
|
|
|
---
|
|
|
|
### 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 cases
|
|
- `frame_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](ENGINEERING_GUIDE.md) - Complete technical documentation
|
|
- [REFACTORING_PROGRESS.md](REFACTORING_PROGRESS.md) - Future refactoring plans
|
|
- [ToDo.md](ToDo.md) - Current task list
|
|
|
|
---
|
|
|
|
**Last Updated**: 2026-01-01
|