mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-11-24 00:55:07 +08:00
🐛 Bug: inherit_supported_adapters 在展开缩写前取交集 (#2654)
Co-authored-by: Ju4tCode <42488585+yanyongyu@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
b497bb8c83
commit
f5f5d93b64
@ -206,18 +206,17 @@ def inherit_supported_adapters(*names: str) -> Optional[set[str]]:
|
|||||||
meta = plugin.metadata
|
meta = plugin.metadata
|
||||||
if meta is None:
|
if meta is None:
|
||||||
raise ValueError(f'Plugin "{name}" has no metadata!')
|
raise ValueError(f'Plugin "{name}" has no metadata!')
|
||||||
support = meta.supported_adapters
|
|
||||||
if support is None:
|
if (raw := meta.supported_adapters) is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
support = {
|
||||||
|
f"nonebot.adapters.{adapter[1:]}" if adapter.startswith("~") else adapter
|
||||||
|
for adapter in raw
|
||||||
|
}
|
||||||
|
|
||||||
final_supported = (
|
final_supported = (
|
||||||
support if final_supported is None else (final_supported & support)
|
support if final_supported is None else (final_supported & support)
|
||||||
)
|
)
|
||||||
|
|
||||||
return final_supported and {
|
return final_supported
|
||||||
(
|
|
||||||
f"nonebot.adapters.{adapter_name[1:]}"
|
|
||||||
if adapter_name.startswith("~")
|
|
||||||
else adapter_name
|
|
||||||
)
|
|
||||||
for adapter_name in final_supported
|
|
||||||
}
|
|
||||||
|
15
tests/plugins/metadata_3.py
Normal file
15
tests/plugins/metadata_3.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
from nonebot.plugin import PluginMetadata
|
||||||
|
|
||||||
|
__plugin_meta__ = PluginMetadata(
|
||||||
|
name="测试插件3",
|
||||||
|
description="测试继承适配器, 使用内置适配器全名",
|
||||||
|
usage="无法使用",
|
||||||
|
type="application",
|
||||||
|
homepage="https://nonebot.dev",
|
||||||
|
supported_adapters={
|
||||||
|
"nonebot.adapters.onebot.v11",
|
||||||
|
"nonebot.adapters.onebot.v12",
|
||||||
|
"~qq",
|
||||||
|
},
|
||||||
|
extra={"author": "NoneBot"},
|
||||||
|
)
|
@ -149,32 +149,82 @@ async def test_plugin_metadata():
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_inherit_supported_adapters():
|
async def test_inherit_supported_adapters_not_found():
|
||||||
with pytest.raises(RuntimeError):
|
with pytest.raises(RuntimeError):
|
||||||
inherit_supported_adapters("some_plugin_not_exist")
|
inherit_supported_adapters("some_plugin_not_exist")
|
||||||
|
|
||||||
with pytest.raises(ValueError, match="has no metadata!"):
|
with pytest.raises(ValueError, match="has no metadata!"):
|
||||||
inherit_supported_adapters("export")
|
inherit_supported_adapters("export")
|
||||||
|
|
||||||
echo = nonebot.get_plugin("echo")
|
|
||||||
assert echo
|
|
||||||
assert echo.metadata
|
|
||||||
assert inherit_supported_adapters("echo") is None
|
|
||||||
|
|
||||||
plugin_1 = nonebot.get_plugin("metadata")
|
@pytest.mark.asyncio
|
||||||
assert plugin_1
|
@pytest.mark.parametrize(
|
||||||
assert plugin_1.metadata
|
("inherit_plugins", "expected"),
|
||||||
assert inherit_supported_adapters("metadata") == {
|
[
|
||||||
"nonebot.adapters.onebot.v11",
|
(("echo",), None),
|
||||||
"plugins.metadata:FakeAdapter",
|
(
|
||||||
}
|
("metadata",),
|
||||||
|
{
|
||||||
plugin_2 = nonebot.get_plugin("metadata_2")
|
"nonebot.adapters.onebot.v11",
|
||||||
assert plugin_2
|
"plugins.metadata:FakeAdapter",
|
||||||
assert plugin_2.metadata
|
},
|
||||||
assert inherit_supported_adapters("metadata", "metadata_2") == {
|
),
|
||||||
"nonebot.adapters.onebot.v11"
|
(
|
||||||
}
|
("metadata_2",),
|
||||||
assert inherit_supported_adapters("metadata", "echo", "metadata_2") == {
|
{
|
||||||
"nonebot.adapters.onebot.v11"
|
"nonebot.adapters.onebot.v11",
|
||||||
}
|
"nonebot.adapters.onebot.v12",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
("metadata_3",),
|
||||||
|
{
|
||||||
|
"nonebot.adapters.onebot.v11",
|
||||||
|
"nonebot.adapters.onebot.v12",
|
||||||
|
"nonebot.adapters.qq",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
("metadata", "metadata_2"),
|
||||||
|
{
|
||||||
|
"nonebot.adapters.onebot.v11",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
("metadata", "metadata_3"),
|
||||||
|
{
|
||||||
|
"nonebot.adapters.onebot.v11",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
("metadata_2", "metadata_3"),
|
||||||
|
{
|
||||||
|
"nonebot.adapters.onebot.v11",
|
||||||
|
"nonebot.adapters.onebot.v12",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
("metadata", "metadata_2", "metadata_3"),
|
||||||
|
{
|
||||||
|
"nonebot.adapters.onebot.v11",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
("metadata", "echo"),
|
||||||
|
{
|
||||||
|
"nonebot.adapters.onebot.v11",
|
||||||
|
"plugins.metadata:FakeAdapter",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
("metadata", "metadata_2", "echo"),
|
||||||
|
{
|
||||||
|
"nonebot.adapters.onebot.v11",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_inherit_supported_adapters_combine(
|
||||||
|
inherit_plugins: tuple[str], expected: set[str]
|
||||||
|
):
|
||||||
|
assert inherit_supported_adapters(*inherit_plugins) == expected
|
||||||
|
Loading…
Reference in New Issue
Block a user