refactor: extract extract_metadata_for_file() domain function, delete PyQt wrapper

domain/metadata_extraction.py gains extract_metadata_for_file() combining
read_text_for_metadata + extract_metadata_from_text. PyQt _extract_metadata_dict
deleted, calls replaced with domain function.

Tests: 1253 passed
This commit is contained in:
Artem Akymenko
2026-07-20 09:49:33 +00:00
parent ccc2cdb166
commit 8a220a936c
2 changed files with 25 additions and 20 deletions
+22
View File
@@ -195,6 +195,28 @@ def read_text_for_metadata(
return "" return ""
def extract_metadata_for_file(
file_path: str,
is_direct_text: bool = False,
) -> Dict[str, Optional[str]]:
"""Extract metadata dict from a file or direct text.
Convenience function combining read_text_for_metadata + extract_metadata_from_text.
Returns empty dict on any error.
"""
try:
text = read_text_for_metadata(
file_path=file_path,
is_direct_text=is_direct_text,
direct_text=file_path if is_direct_text else None,
)
if text:
return extract_metadata_from_text(text) or {}
except Exception:
pass
return {}
def format_metadata_tags( def format_metadata_tags(
metadata: Dict[str, Any], metadata: Dict[str, Any],
filename: str, filename: str,
+3 -20
View File
@@ -55,8 +55,7 @@ from abogen.domain.pronunciation import (
) )
from abogen.domain.metadata_extraction import ( from abogen.domain.metadata_extraction import (
extract_metadata_and_build_args, extract_metadata_and_build_args,
extract_metadata_from_text, extract_metadata_for_file,
read_text_for_metadata,
) )
from abogen.domain.text_chapters import parse_chapters_from_text from abogen.domain.text_chapters import parse_chapters_from_text
from abogen.infrastructure.exporters import ExportService from abogen.infrastructure.exporters import ExportService
@@ -67,22 +66,6 @@ import subprocess
def _extract_metadata_dict(file_name: str, is_direct_text: bool) -> dict:
"""Extract metadata dict from file for intro/outro text building."""
try:
from abogen.domain.metadata_extraction import read_text_for_metadata, extract_metadata_from_text
text = read_text_for_metadata(
file_path=file_name,
is_direct_text=is_direct_text,
direct_text=file_name if is_direct_text else None,
)
if text:
return extract_metadata_from_text(text) or {}
except Exception:
pass
return {}
# Configuration constants # Configuration constants
_USER_RESPONSE_TIMEOUT = ( _USER_RESPONSE_TIMEOUT = (
0.1 # Timeout in seconds for checking user response/cancellation 0.1 # Timeout in seconds for checking user response/cancellation
@@ -776,7 +759,7 @@ class ConversionThread(QThread):
intro_emitted = False intro_emitted = False
if merge_chapters_at_end: if merge_chapters_at_end:
intro_spec = resolve_intro( intro_spec = resolve_intro(
_extract_metadata_dict(self.file_name, self.is_direct_text), extract_metadata_for_file(self.file_name, self.is_direct_text),
os.path.basename(self.file_name) if self.file_name else "", os.path.basename(self.file_name) if self.file_name else "",
getattr(self, "read_title_intro", False), getattr(self, "read_title_intro", False),
self.voice, self.voice, list(self.voice_cache._cache.keys()), self.voice, self.voice, list(self.voice_cache._cache.keys()),
@@ -1101,7 +1084,7 @@ class ConversionThread(QThread):
# --- Outro synthesis --- # --- Outro synthesis ---
if merge_chapters_at_end: if merge_chapters_at_end:
outro_spec = resolve_outro( outro_spec = resolve_outro(
_extract_metadata_dict(self.file_name, self.is_direct_text), extract_metadata_for_file(self.file_name, self.is_direct_text),
os.path.basename(self.file_name) if self.file_name else "", os.path.basename(self.file_name) if self.file_name else "",
getattr(self, "read_closing_outro", True), getattr(self, "read_closing_outro", True),
self.voice, self.voice, list(self.voice_cache._cache.keys()), self.voice, self.voice, list(self.voice_cache._cache.keys()),