diff --git a/app/modules/acoustid/__init__.py b/app/modules/acoustid/__init__.py index c4862682b..44689c37e 100644 --- a/app/modules/acoustid/__init__.py +++ b/app/modules/acoustid/__init__.py @@ -9,7 +9,9 @@ from pathlib import Path from typing import Any, Optional, Tuple, Union from uuid import UUID -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.runtime.log import logger from app.modules import _ModuleBase from app.schemas.types import ModuleType, OtherModulesType diff --git a/app/modules/anilist/__init__.py b/app/modules/anilist/__init__.py index 0cf9e419d..c74062667 100644 --- a/app/modules/anilist/__init__.py +++ b/app/modules/anilist/__init__.py @@ -1,7 +1,9 @@ from typing import List, Optional, Tuple, Union from app.schemas.context import MediaPerson as _SchemaMediaPerson -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.domain.context import MediaInfo from app.domain.meta.metabase import MetaBase from app.domain.scraper import MediaScraperHelper diff --git a/app/modules/anilist/anilist.py b/app/modules/anilist/anilist.py index 7399343ad..f4d2195c8 100644 --- a/app/modules/anilist/anilist.py +++ b/app/modules/anilist/anilist.py @@ -2,7 +2,9 @@ from datetime import date from typing import Optional from app.runtime.cache import cached -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.runtime.log import logger from app.adapters.network.http import AsyncRequestUtils, RequestUtils diff --git a/app/modules/bangumi/__init__.py b/app/modules/bangumi/__init__.py index 5a1348b9b..efe61921b 100644 --- a/app/modules/bangumi/__init__.py +++ b/app/modules/bangumi/__init__.py @@ -2,7 +2,9 @@ from dataclasses import dataclass from typing import Any, List, Optional, Tuple, Union from app.schemas.context import MediaPerson as _SchemaMediaPerson -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.domain.context import MediaInfo from app.domain.meta.metabase import MetaBase from app.domain.scraper import MediaScraperHelper diff --git a/app/modules/bangumi/bangumi.py b/app/modules/bangumi/bangumi.py index 7862bc23f..8e2511f9a 100644 --- a/app/modules/bangumi/bangumi.py +++ b/app/modules/bangumi/bangumi.py @@ -4,7 +4,9 @@ from typing import Optional import requests from app.runtime.cache import cached -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.adapters.network.http import RequestUtils, AsyncRequestUtils diff --git a/app/modules/douban/__init__.py b/app/modules/douban/__init__.py index cdb8854f0..2f92d9661 100644 --- a/app/modules/douban/__init__.py +++ b/app/modules/douban/__init__.py @@ -4,7 +4,9 @@ from typing import Any, List, Optional, Tuple, Union import cn2an from app.schemas.context import MediaPerson as _SchemaMediaPerson -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.domain.context import ( MediaInfo, MusicAlbumInfo, diff --git a/app/modules/douban/apiv2.py b/app/modules/douban/apiv2.py index 49ddeb46d..36c8a64c8 100644 --- a/app/modules/douban/apiv2.py +++ b/app/modules/douban/apiv2.py @@ -13,7 +13,9 @@ import requests from bs4 import BeautifulSoup from app.runtime.cache import cached -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.adapters.network.http import RequestUtils, AsyncRequestUtils from app.foundation.singleton import WeakSingleton diff --git a/app/modules/fanart/__init__.py b/app/modules/fanart/__init__.py index c1fe73ceb..73ff28b50 100644 --- a/app/modules/fanart/__init__.py +++ b/app/modules/fanart/__init__.py @@ -4,7 +4,9 @@ from typing import Optional, Tuple, Union from app.runtime.cache import cached from app.domain.context import MediaInfo -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.runtime.log import logger from app.modules import _ModuleBase from app.schemas.types import MediaType, ModuleType, OtherModulesType diff --git a/app/modules/imdb/__init__.py b/app/modules/imdb/__init__.py index ec196f7fd..7a4077823 100644 --- a/app/modules/imdb/__init__.py +++ b/app/modules/imdb/__init__.py @@ -11,7 +11,9 @@ from app.domain.meta.metabase import MetaBase from app.domain.scraper import MediaScraperHelper from app.foundation.text import convert as zhconv_convert from app.modules import _ModuleBase -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.runtime.log import logger from app.schemas.context import MediaCredit, MediaImageSet from app.schemas.media import normalize_media_source diff --git a/app/modules/imdb/api.py b/app/modules/imdb/api.py index a500cb929..912a31fc7 100644 --- a/app/modules/imdb/api.py +++ b/app/modules/imdb/api.py @@ -9,7 +9,9 @@ from pydantic import BaseModel, ConfigDict, Field, ValidationError from app.adapters.network.http import AsyncRequestUtils, RequestUtils from app.runtime.cache import cached -from app.runtime.config import settings +from app.runtime.settings import RuntimeSettingsCompat + +settings = RuntimeSettingsCompat() from app.runtime.log import logger TModel = TypeVar("TModel", bound=BaseModel) diff --git a/docs/refactor/backend-architecture-next-stage.md b/docs/refactor/backend-architecture-next-stage.md index aa5a09a21..0361e406a 100644 --- a/docs/refactor/backend-architecture-next-stage.md +++ b/docs/refactor/backend-architecture-next-stage.md @@ -1056,6 +1056,8 @@ Agent 能力适配器、记忆和提示词模块改用 `RuntimeSettingsCompat` 配置债务由 89 个文件降至 84 个,插件、模块生命周期与线程安全专项测试通过。 Agent 下载、任务、媒体识别、刮削和 Web 搜索工具也切换到动态运行时端口,保留原工具输入与输出 ABI; 配置债务由 84 个文件降至 77 个,Agent 任务、搜索与识别专项测试通过。 +AcoustID、AniList、Bangumi、Douban、Fanart 和 IMDb 模块族改用动态运行时端口,模块公开类与配置热读保持; +配置债务由 77 个文件降至 67 个,相关识别、浏览与刮削专项测试通过。 同日修正适配器配置下沉边界:OCR、CookieCloud、DoH、Rust 和资源签名等低层实现不再直接依赖 `app.application`,由 `app.runtime.settings` 端口承接组合根注入;未启动装配时仍回退旧 Settings ABI, diff --git a/tests/fixtures/architecture/configuration-debt-baseline.json b/tests/fixtures/architecture/configuration-debt-baseline.json index acdbdd55b..b28d56165 100644 --- a/tests/fixtures/architecture/configuration-debt-baseline.json +++ b/tests/fixtures/architecture/configuration-debt-baseline.json @@ -9,7 +9,7 @@ "root": "app" }, "settings_imports": { - "count": 77, + "count": 67, "files": [ "app/adapters/system/fsproxy.py", "app/cli.py", @@ -20,16 +20,8 @@ "app/doctor/runner.py", "app/factory.py", "app/main.py", - "app/modules/acoustid/__init__.py", - "app/modules/anilist/__init__.py", - "app/modules/anilist/anilist.py", - "app/modules/bangumi/__init__.py", - "app/modules/bangumi/bangumi.py", "app/modules/discord/discord.py", - "app/modules/douban/__init__.py", - "app/modules/douban/apiv2.py", "app/modules/emby/emby.py", - "app/modules/fanart/__init__.py", "app/modules/feishu/feishu.py", "app/modules/filemanager/module.py", "app/modules/filemanager/storages/alipan.py", @@ -39,8 +31,6 @@ "app/modules/filemanager/storages/smb.py", "app/modules/filemanager/storages/u115.py", "app/modules/filemanager/transhandler.py", - "app/modules/imdb/__init__.py", - "app/modules/imdb/api.py", "app/modules/indexer/parser/__init__.py", "app/modules/indexer/parser/rousi.py", "app/modules/indexer/spider/__init__.py", diff --git a/tests/fixtures/architecture/dependency-baseline.json b/tests/fixtures/architecture/dependency-baseline.json index 18b50e627..616efc46f 100644 --- a/tests/fixtures/architecture/dependency-baseline.json +++ b/tests/fixtures/architecture/dependency-baseline.json @@ -14,7 +14,7 @@ "workflow_to_db": [] }, "edge_count": 6421, - "edge_sha256": "18448b750688670f90d17bc46bc5425dc481a12266b01d3e126f0da13fe12fb7", + "edge_sha256": "a5ef71ffebe71367bde1689ab0889db037c83cea53b85ee12ad0a79aa006f231", "edges": [ "app -> app.runtime", "app -> app.runtime.compat", @@ -3881,8 +3881,8 @@ "app.modules.acoustid -> app.adapters.network.http", "app.modules.acoustid -> app.modules", "app.modules.acoustid -> app.runtime", - "app.modules.acoustid -> app.runtime.config", "app.modules.acoustid -> app.runtime.log", + "app.modules.acoustid -> app.runtime.settings", "app.modules.acoustid -> app.schemas", "app.modules.acoustid -> app.schemas.types", "app.modules.anilist -> app.domain", @@ -3894,8 +3894,8 @@ "app.modules.anilist -> app.modules", "app.modules.anilist -> app.modules.anilist.anilist", "app.modules.anilist -> app.runtime", - "app.modules.anilist -> app.runtime.config", "app.modules.anilist -> app.runtime.log", + "app.modules.anilist -> app.runtime.settings", "app.modules.anilist -> app.schemas", "app.modules.anilist -> app.schemas.context", "app.modules.anilist -> app.schemas.types", @@ -3904,8 +3904,8 @@ "app.modules.anilist.anilist -> app.adapters.network.http", "app.modules.anilist.anilist -> app.runtime", "app.modules.anilist.anilist -> app.runtime.cache", - "app.modules.anilist.anilist -> app.runtime.config", "app.modules.anilist.anilist -> app.runtime.log", + "app.modules.anilist.anilist -> app.runtime.settings", "app.modules.bangumi -> app.adapters", "app.modules.bangumi -> app.adapters.network", "app.modules.bangumi -> app.adapters.network.http", @@ -3918,8 +3918,8 @@ "app.modules.bangumi -> app.modules", "app.modules.bangumi -> app.modules.bangumi.bangumi", "app.modules.bangumi -> app.runtime", - "app.modules.bangumi -> app.runtime.config", "app.modules.bangumi -> app.runtime.log", + "app.modules.bangumi -> app.runtime.settings", "app.modules.bangumi -> app.schemas", "app.modules.bangumi -> app.schemas.context", "app.modules.bangumi -> app.schemas.types", @@ -3928,7 +3928,7 @@ "app.modules.bangumi.bangumi -> app.adapters.network.http", "app.modules.bangumi.bangumi -> app.runtime", "app.modules.bangumi.bangumi -> app.runtime.cache", - "app.modules.bangumi.bangumi -> app.runtime.config", + "app.modules.bangumi.bangumi -> app.runtime.settings", "app.modules.dingtalk -> app.domain", "app.modules.dingtalk -> app.domain.context", "app.modules.dingtalk -> app.modules", @@ -3986,10 +3986,10 @@ "app.modules.douban -> app.modules.douban.apiv2", "app.modules.douban -> app.modules.douban.scraper", "app.modules.douban -> app.runtime", - "app.modules.douban -> app.runtime.config", "app.modules.douban -> app.runtime.execution", "app.modules.douban -> app.runtime.log", "app.modules.douban -> app.runtime.rate", + "app.modules.douban -> app.runtime.settings", "app.modules.douban -> app.schemas", "app.modules.douban -> app.schemas.context", "app.modules.douban -> app.schemas.exception", @@ -4001,7 +4001,7 @@ "app.modules.douban.apiv2 -> app.foundation.singleton", "app.modules.douban.apiv2 -> app.runtime", "app.modules.douban.apiv2 -> app.runtime.cache", - "app.modules.douban.apiv2 -> app.runtime.config", + "app.modules.douban.apiv2 -> app.runtime.settings", "app.modules.douban.scraper -> app.domain", "app.modules.douban.scraper -> app.domain.context", "app.modules.douban.scraper -> app.foundation", @@ -4039,8 +4039,8 @@ "app.modules.fanart -> app.modules", "app.modules.fanart -> app.runtime", "app.modules.fanart -> app.runtime.cache", - "app.modules.fanart -> app.runtime.config", "app.modules.fanart -> app.runtime.log", + "app.modules.fanart -> app.runtime.settings", "app.modules.fanart -> app.schemas", "app.modules.fanart -> app.schemas.types", "app.modules.feishu -> app.application", @@ -4273,8 +4273,8 @@ "app.modules.imdb -> app.modules", "app.modules.imdb -> app.modules.imdb.api", "app.modules.imdb -> app.runtime", - "app.modules.imdb -> app.runtime.config", "app.modules.imdb -> app.runtime.log", + "app.modules.imdb -> app.runtime.settings", "app.modules.imdb -> app.schemas", "app.modules.imdb -> app.schemas.context", "app.modules.imdb -> app.schemas.media", @@ -4284,8 +4284,8 @@ "app.modules.imdb.api -> app.adapters.network.http", "app.modules.imdb.api -> app.runtime", "app.modules.imdb.api -> app.runtime.cache", - "app.modules.imdb.api -> app.runtime.config", "app.modules.imdb.api -> app.runtime.log", + "app.modules.imdb.api -> app.runtime.settings", "app.modules.indexer -> app.application", "app.modules.indexer -> app.application.site", "app.modules.indexer -> app.application.site.health",