mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-10-29 11:27:43 +08:00
fix(music): keep shared search signatures compatible
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, List, Optional, Tuple, Union, cast
|
||||
from typing import Any, Iterable, List, Optional, Tuple, Union, cast
|
||||
|
||||
import cn2an
|
||||
|
||||
@@ -35,6 +35,7 @@ from app.schemas.types import (
|
||||
MediaSourceSelection,
|
||||
MediaType,
|
||||
ModuleType,
|
||||
MusicEntityType,
|
||||
)
|
||||
|
||||
|
||||
@@ -154,8 +155,10 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
meta: MetaMusic,
|
||||
limit: int = 20,
|
||||
media_source: Optional[MediaSourceSelection] = None,
|
||||
music_types: Optional[Iterable[MusicEntityType]] = None,
|
||||
) -> Optional[List[MusicInfo]]:
|
||||
"""按请求来源搜索豆瓣音乐专辑,并转换为统一音乐候选。"""
|
||||
"""按请求来源搜索豆瓣音乐专辑,并兼容统一音乐搜索的实体过滤参数。"""
|
||||
del music_types
|
||||
if not is_media_source_selected(media_source, self._music_source):
|
||||
return None
|
||||
keyword = meta.album or meta.title
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Optional, Tuple, Union
|
||||
from typing import Any, Iterable, Optional, Tuple, Union
|
||||
|
||||
from app.adapters.network.http import AsyncRequestUtils, RequestUtils
|
||||
from app.domain.context import (
|
||||
@@ -23,6 +23,7 @@ from app.schemas.types import (
|
||||
MediaSourceSelection,
|
||||
MediaType,
|
||||
ModuleType,
|
||||
MusicEntityType,
|
||||
)
|
||||
|
||||
|
||||
@@ -117,8 +118,10 @@ class TheAudioDbModule(_ModuleBase):
|
||||
meta: MetaMusic,
|
||||
limit: int = 20,
|
||||
media_source: Optional[MediaSourceSelection] = None,
|
||||
music_types: Optional[Iterable[MusicEntityType]] = None,
|
||||
) -> Optional[list[MusicInfo]]:
|
||||
"""按请求来源搜索 TheAudioDB 单曲、专辑和艺术家。"""
|
||||
"""按请求来源搜索 TheAudioDB 单曲、专辑和艺术家,并兼容实体过滤参数。"""
|
||||
del music_types
|
||||
if not is_media_source_selected(media_source, self._source):
|
||||
return None
|
||||
normalized_limit = max(1, min(limit, 100))
|
||||
|
||||
@@ -219,6 +219,18 @@ def test_theaudiodb_module_ignores_other_sources(monkeypatch):
|
||||
request.assert_not_called()
|
||||
|
||||
|
||||
@pytest.mark.parametrize("module_class", [DoubanModule, TheAudioDbModule])
|
||||
def test_music_search_modules_accept_entity_filter_from_shared_dispatch(module_class):
|
||||
"""共享模块调度器广播实体过滤参数时,各内置音乐来源都必须保持签名兼容。"""
|
||||
module = module_class()
|
||||
|
||||
assert module.search_music(
|
||||
MetaMusic(title="Yellow"),
|
||||
media_source=MediaSource.MusicBrainz,
|
||||
music_types=("recording", "album"),
|
||||
) is None
|
||||
|
||||
|
||||
def test_theaudiodb_title_only_search_skips_incomplete_track_and_album_requests(monkeypatch):
|
||||
"""缺少艺术家时只搜索艺术家,避免请求会返回空正文的曲目和专辑接口。"""
|
||||
module = TheAudioDbModule()
|
||||
|
||||
Reference in New Issue
Block a user