18267d0165
Mirror the MediaProber / FilesystemScanner pattern for language lookup: - New Protocol `LanguageRepository` in alfred.domain.shared.ports covering from_iso, from_any, all, __contains__, __len__ — the surface previously coupled to the concrete LanguageRegistry. - SubtitleKnowledgeBase types its `language_registry` parameter against the Protocol; the concrete LanguageRegistry stays in infrastructure as the YAML-backed adapter and remains the default when no repository is injected. - New unit tests in tests/infrastructure/test_language_registry.py cover the adapter surface (from_iso, from_any, membership, case-insensitivity, non-string inputs). Behaviour is unchanged for existing callers. The split opens the door to in-memory fakes in future tests without loading the full ISO 639 YAML.
20 lines
625 B
Python
20 lines
625 B
Python
"""Ports — Protocol interfaces the domain depends on.
|
|
|
|
Adapters live in ``alfred/infrastructure/`` and implement these protocols.
|
|
Domain code never imports infrastructure; it accepts a port via constructor
|
|
injection and calls it. Tests can pass in-memory fakes that satisfy the
|
|
Protocol without going through real I/O.
|
|
"""
|
|
|
|
from .filesystem_scanner import FileEntry, FilesystemScanner
|
|
from .language_repository import LanguageRepository
|
|
from .media_prober import MediaProber, SubtitleStreamInfo
|
|
|
|
__all__ = [
|
|
"FileEntry",
|
|
"FilesystemScanner",
|
|
"LanguageRepository",
|
|
"MediaProber",
|
|
"SubtitleStreamInfo",
|
|
]
|