diff --git a/alfred/application/filesystem/manage_subtitles.py b/alfred/application/filesystem/manage_subtitles.py index e2e307b..f37f923 100644 --- a/alfred/application/filesystem/manage_subtitles.py +++ b/alfred/application/filesystem/manage_subtitles.py @@ -5,8 +5,8 @@ from pathlib import Path from alfred.domain.shared.value_objects import ImdbId from alfred.domain.subtitles.entities import SubtitleCandidate -from alfred.domain.subtitles.knowledge.base import SubtitleKnowledgeBase -from alfred.domain.subtitles.knowledge.loader import KnowledgeLoader +from alfred.infrastructure.knowledge.subtitles.base import SubtitleKnowledgeBase +from alfred.infrastructure.knowledge.subtitles.loader import KnowledgeLoader from alfred.domain.subtitles.services.identifier import SubtitleIdentifier from alfred.domain.subtitles.services.matcher import SubtitleMatcher from alfred.domain.subtitles.services.pattern_detector import PatternDetector diff --git a/alfred/domain/release/services.py b/alfred/domain/release/services.py index 2d0b1f5..5bfd699 100644 --- a/alfred/domain/release/services.py +++ b/alfred/domain/release/services.py @@ -4,7 +4,7 @@ from __future__ import annotations import re -from .knowledge import load_separators +from alfred.infrastructure.knowledge.release import load_separators from .value_objects import ( _AUDIO, _CODECS, diff --git a/alfred/domain/release/value_objects.py b/alfred/domain/release/value_objects.py index b921982..124a693 100644 --- a/alfred/domain/release/value_objects.py +++ b/alfred/domain/release/value_objects.py @@ -6,7 +6,7 @@ from dataclasses import dataclass, field from enum import Enum from ..shared.exceptions import ValidationError -from .knowledge import ( +from alfred.infrastructure.knowledge.release import ( load_audio, load_codecs, load_editions, diff --git a/alfred/domain/shared/knowledge/__init__.py b/alfred/domain/shared/knowledge/__init__.py deleted file mode 100644 index b99800f..0000000 --- a/alfred/domain/shared/knowledge/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""Shared knowledge loaders (cross-domain).""" - -from .language_registry import LanguageRegistry - -__all__ = ["LanguageRegistry"] diff --git a/alfred/domain/subtitles/__init__.py b/alfred/domain/subtitles/__init__.py index 52664b3..8dcc29d 100644 --- a/alfred/domain/subtitles/__init__.py +++ b/alfred/domain/subtitles/__init__.py @@ -3,7 +3,6 @@ from .aggregates import SubtitleRuleSet from .entities import MediaSubtitleMetadata, SubtitleCandidate from .exceptions import SubtitleNotFound -from .knowledge import KnowledgeLoader, SubtitleKnowledgeBase from .services import PatternDetector, SubtitleIdentifier, SubtitleMatcher from .value_objects import ( RuleScope, @@ -20,8 +19,6 @@ __all__ = [ "SubtitleCandidate", "MediaSubtitleMetadata", "SubtitleRuleSet", - "SubtitleKnowledgeBase", - "KnowledgeLoader", "SubtitleIdentifier", "SubtitleMatcher", "PatternDetector", diff --git a/alfred/domain/subtitles/aggregates.py b/alfred/domain/subtitles/aggregates.py index 81e664e..b62a3be 100644 --- a/alfred/domain/subtitles/aggregates.py +++ b/alfred/domain/subtitles/aggregates.py @@ -3,8 +3,9 @@ from dataclasses import dataclass, field from typing import Any +from alfred.infrastructure.knowledge.subtitles.base import SubtitleKnowledgeBase + from ..shared.value_objects import ImdbId -from .knowledge.base import SubtitleKnowledgeBase from .value_objects import RuleScope, SubtitleMatchingRules diff --git a/alfred/domain/subtitles/services/identifier.py b/alfred/domain/subtitles/services/identifier.py index 6118001..f529332 100644 --- a/alfred/domain/subtitles/services/identifier.py +++ b/alfred/domain/subtitles/services/identifier.py @@ -6,9 +6,10 @@ import re import subprocess from pathlib import Path +from alfred.infrastructure.knowledge.subtitles.base import SubtitleKnowledgeBase + from ...shared.value_objects import ImdbId from ..entities import MediaSubtitleMetadata, SubtitleCandidate -from ..knowledge.base import SubtitleKnowledgeBase from ..value_objects import ScanStrategy, SubtitlePattern, SubtitleType logger = logging.getLogger(__name__) diff --git a/alfred/domain/subtitles/services/pattern_detector.py b/alfred/domain/subtitles/services/pattern_detector.py index e8f2bd1..cf96f0f 100644 --- a/alfred/domain/subtitles/services/pattern_detector.py +++ b/alfred/domain/subtitles/services/pattern_detector.py @@ -5,7 +5,8 @@ import logging import subprocess from pathlib import Path -from ..knowledge.base import SubtitleKnowledgeBase +from alfred.infrastructure.knowledge.subtitles.base import SubtitleKnowledgeBase + from ..value_objects import ScanStrategy, SubtitlePattern logger = logging.getLogger(__name__) diff --git a/alfred/infrastructure/knowledge/__init__.py b/alfred/infrastructure/knowledge/__init__.py new file mode 100644 index 0000000..f1ce954 --- /dev/null +++ b/alfred/infrastructure/knowledge/__init__.py @@ -0,0 +1,6 @@ +"""Knowledge loaders — YAML I/O kept out of the domain layer. + +Each submodule reads its YAML files from ``alfred/knowledge/`` (builtin, +versioned) and ``data/knowledge/`` (learned, gitignored), and exposes plain +Python values (sets, dicts, classes) for domain code to consume. +""" diff --git a/alfred/domain/shared/knowledge/language_registry.py b/alfred/infrastructure/knowledge/language_registry.py similarity index 98% rename from alfred/domain/shared/knowledge/language_registry.py rename to alfred/infrastructure/knowledge/language_registry.py index 9911b1d..e3734b3 100644 --- a/alfred/domain/shared/knowledge/language_registry.py +++ b/alfred/infrastructure/knowledge/language_registry.py @@ -13,7 +13,7 @@ import yaml import alfred as _alfred_pkg -from ..value_objects import Language +from alfred.domain.shared.value_objects import Language logger = logging.getLogger(__name__) diff --git a/alfred/domain/release/knowledge.py b/alfred/infrastructure/knowledge/release.py similarity index 100% rename from alfred/domain/release/knowledge.py rename to alfred/infrastructure/knowledge/release.py diff --git a/alfred/domain/subtitles/knowledge/__init__.py b/alfred/infrastructure/knowledge/subtitles/__init__.py similarity index 100% rename from alfred/domain/subtitles/knowledge/__init__.py rename to alfred/infrastructure/knowledge/subtitles/__init__.py diff --git a/alfred/domain/subtitles/knowledge/base.py b/alfred/infrastructure/knowledge/subtitles/base.py similarity index 98% rename from alfred/domain/subtitles/knowledge/base.py rename to alfred/infrastructure/knowledge/subtitles/base.py index 2a5256a..a3d42eb 100644 --- a/alfred/domain/subtitles/knowledge/base.py +++ b/alfred/infrastructure/knowledge/subtitles/base.py @@ -2,8 +2,8 @@ import logging -from ...shared.knowledge.language_registry import LanguageRegistry -from ..value_objects import ( +from alfred.infrastructure.knowledge.language_registry import LanguageRegistry +from alfred.domain.subtitles.value_objects import ( ScanStrategy, SubtitleFormat, SubtitleLanguage, diff --git a/alfred/domain/subtitles/knowledge/loader.py b/alfred/infrastructure/knowledge/subtitles/loader.py similarity index 100% rename from alfred/domain/subtitles/knowledge/loader.py rename to alfred/infrastructure/knowledge/subtitles/loader.py diff --git a/tests/domain/test_subtitle_identifier.py b/tests/domain/test_subtitle_identifier.py index 65333f8..d99a1e2 100644 --- a/tests/domain/test_subtitle_identifier.py +++ b/tests/domain/test_subtitle_identifier.py @@ -23,7 +23,7 @@ from unittest.mock import patch import pytest from alfred.domain.subtitles.entities import SubtitleCandidate -from alfred.domain.subtitles.knowledge.base import SubtitleKnowledgeBase +from alfred.infrastructure.knowledge.subtitles.base import SubtitleKnowledgeBase from alfred.domain.subtitles.services.identifier import ( SubtitleIdentifier, _count_entries, diff --git a/tests/domain/test_subtitle_knowledge.py b/tests/domain/test_subtitle_knowledge.py index 918817b..940c06c 100644 --- a/tests/domain/test_subtitle_knowledge.py +++ b/tests/domain/test_subtitle_knowledge.py @@ -1,4 +1,4 @@ -"""Tests for ``alfred.domain.subtitles.knowledge`` (loader + base). +"""Tests for ``alfred.infrastructure.knowledge.subtitles`` (loader + base). Covers: @@ -19,9 +19,9 @@ from pathlib import Path import pytest -from alfred.domain.subtitles.knowledge import loader as loader_mod -from alfred.domain.subtitles.knowledge.base import SubtitleKnowledgeBase -from alfred.domain.subtitles.knowledge.loader import KnowledgeLoader, _merge +from alfred.infrastructure.knowledge.subtitles import loader as loader_mod +from alfred.infrastructure.knowledge.subtitles.base import SubtitleKnowledgeBase +from alfred.infrastructure.knowledge.subtitles.loader import KnowledgeLoader, _merge from alfred.domain.subtitles.value_objects import ( ScanStrategy, SubtitleType, diff --git a/tests/domain/test_subtitle_pattern_detector.py b/tests/domain/test_subtitle_pattern_detector.py index 12b3275..57c8992 100644 --- a/tests/domain/test_subtitle_pattern_detector.py +++ b/tests/domain/test_subtitle_pattern_detector.py @@ -25,7 +25,7 @@ from unittest.mock import patch import pytest -from alfred.domain.subtitles.knowledge.base import SubtitleKnowledgeBase +from alfred.infrastructure.knowledge.subtitles.base import SubtitleKnowledgeBase from alfred.domain.subtitles.services.pattern_detector import PatternDetector