core/cli: plugins list/enable/disable commands and /plugins slash

This commit is contained in:
2026-07-24 16:44:44 +08:00
parent 1d718582ac
commit 03e04f9a38
9 changed files with 588 additions and 9 deletions
+61
View File
@@ -0,0 +1,61 @@
"""[plugins] section mutators and parse."""
from __future__ import annotations
from typing import TYPE_CHECKING
import tomlkit
from plyngent.config import load
from plyngent.config.store import ConfigStore
if TYPE_CHECKING:
from pathlib import Path
def test_plugins_defaults_and_parse(tmp_path: Path) -> None:
path = tmp_path / "c.toml"
_ = path.write_text("", encoding="utf-8")
store = load(path)
assert store.plugins_config.enable == []
assert store.plugins_config.disable == []
path.write_text(
"""
[plugins]
enable = ["acme", "*"]
disable = ["legacy"]
""",
encoding="utf-8",
)
store = load(path)
assert store.plugins_config.enable == ["acme", "*"]
assert store.plugins_config.disable == ["legacy"]
def test_enable_disable_undeny_write(tmp_path: Path) -> None:
path = tmp_path / "c.toml"
store = ConfigStore(path=path, document=tomlkit.document())
_ = store.enable_plugin("acme")
assert store.plugins_config.enable == ["acme"]
store.write()
reloaded = load(path)
assert reloaded.plugins_config.enable == ["acme"]
_ = store.disable_plugin("acme")
assert "acme" not in store.plugins_config.enable
assert store.plugins_config.disable == ["acme"]
store.write()
reloaded = load(path)
assert reloaded.plugins_config.disable == ["acme"]
_ = store.undeny_plugin("acme")
assert store.plugins_config.disable == []
_ = store.enable_plugin("*")
assert store.plugins_config.enable == ["*"]
_ = store.enable_plugin("other")
# Already * — stay *
assert store.plugins_config.enable == ["*"]
_ = store.clear_plugins()
assert store.plugins_config.enable == []
assert store.plugins_config.disable == []