From 1f87337bb488f50a6b575ae53fbf269697422f74 Mon Sep 17 00:00:00 2001 From: sHa Date: Mon, 13 Apr 2026 14:37:37 +0300 Subject: [PATCH] fix: Update version to 0.9.4 in uv.lock; improve CI checks and code clarity in AGENTS.md, filename_extractor.py, and mediainfo_extractor.py --- AGENTS.md | 7 ++++++- src/extractors/filename_extractor.py | 7 +++---- src/extractors/mediainfo_extractor.py | 10 ++++++++-- src/test/test_mediainfo_frame_class.py | 2 +- uv.lock | 2 +- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 7e2b6c8..7d4e217 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -647,7 +647,12 @@ except (LookupError, ValueError, AttributeError) as e: 1. **Read Before Modify**: Always read files before suggesting modifications 2. **Follow Existing Patterns**: Understand established architecture before changes -3. **Test Everything**: Run `uv run pytest` after all changes +3. **Run CI Checks After Every Code Change**: After any code modification, run the same checks as GitHub CI: + ```bash + uv run pytest # all tests must pass + uv run mypy src/ --ignore-missing-imports # no type errors + ``` + Do NOT consider work complete until both commands succeed. 4. **Simplicity First**: Avoid over-engineering solutions 5. **Document Changes**: Update relevant documentation diff --git a/src/extractors/filename_extractor.py b/src/extractors/filename_extractor.py index 32dfa38..514c651 100644 --- a/src/extractors/filename_extractor.py +++ b/src/extractors/filename_extractor.py @@ -227,10 +227,9 @@ class FilenameExtractor: # Check for bare resolution numbers inside brackets (e.g., [720,ukr,eng]) bare_match = re.search(r'[\[,](\d{3,4})(?=[,\]])', normalized_name, re.IGNORECASE) if bare_match: - height = int(bare_match.group(1)) - frame_class = self._get_frame_class_from_height(height) - if frame_class: - return frame_class + bare_fc = self._get_frame_class_from_height(int(bare_match.group(1))) + if bare_fc: + return bare_fc # If no specific resolution found, check for non-standard quality indicators for indicator in NON_STANDARD_QUALITY_INDICATORS: diff --git a/src/extractors/mediainfo_extractor.py b/src/extractors/mediainfo_extractor.py index 52f3e18..a25daf8 100644 --- a/src/extractors/mediainfo_extractor.py +++ b/src/extractors/mediainfo_extractor.py @@ -195,7 +195,7 @@ class MediaInfoExtractor: resolution = self.extract_resolution() if not resolution: return None - height, width = resolution + width, height = resolution logger.debug( f"[{self.file_path.name}] Frame class detection - Resolution: {width}x{height}" @@ -329,7 +329,10 @@ class MediaInfoExtractor: return None langs = [] for a in tracks: - lang_code = getattr(a, "language", "und") or "und" + lang_code = getattr(a, "language", None) + # Skip tracks with no language tag or 'und' (undetermined) + if not lang_code or lang_code.lower() in ("und", "undefined"): + continue try: # Try to get the 3-letter code lang_obj = langcodes.Language.get(lang_code.lower()) @@ -340,6 +343,9 @@ class MediaInfoExtractor: logger.debug(f"Invalid language code '{lang_code}': {e}") langs.append(lang_code.lower()[:3]) + if not langs: + return None # No meaningful language info — let Filename extractor try + lang_counts = Counter(langs) audio_langs = [ f"{count}{lang}" if count > 1 else lang diff --git a/src/test/test_mediainfo_frame_class.py b/src/test/test_mediainfo_frame_class.py index 7639955..6a41b2f 100644 --- a/src/test/test_mediainfo_frame_class.py +++ b/src/test/test_mediainfo_frame_class.py @@ -39,7 +39,7 @@ def test_frame_class_detection(test_case): extractor.video_tracks = [mock_track] extractor._get_tracks.return_value = [mock_track] # satisfies @requires_tracks_type decorator extractor._get_track.return_value = mock_track - extractor.extract_resolution.return_value = (height, width) + extractor.extract_resolution.return_value = (width, height) extractor.extract_interlaced.return_value = interlaced # Test the method diff --git a/uv.lock b/uv.lock index ffe6e96..0f73e1b 100644 --- a/uv.lock +++ b/uv.lock @@ -208,7 +208,7 @@ wheels = [ [[package]] name = "moma" -version = "0.9.3" +version = "0.9.4" source = { editable = "." } dependencies = [ { name = "langcodes" },