Allow decorating multiple methods per module #47

This commit is contained in:
Kivi Kaitaniemi
2026-02-07 20:52:32 +02:00
parent 7aa063f6b9
commit 37745d1730
9 changed files with 73 additions and 32 deletions
@@ -56,10 +56,14 @@ class Flatpak(plugins.Plugin):
store["flatpaks_for_module"].setdefault(mod.name, set())
store["user_flatpaks_for_module"].setdefault(mod.name, {})
packages = plugins.run_method_with_attribute(mod, "__flatpak__packages__") or set()
user_packages = (
plugins.run_method_with_attribute(mod, "__flatpak__user__packages__") or {}
packages = set().union(
*plugins.run_methods_with_attribute(mod, "__flatpak__packages__")
)
user_packages = {
k: v
for d in plugins.run_methods_with_attribute(mod, "__flatpak__user__packages__")
for k, v in d.items()
}
if store["flatpaks_for_module"][mod.name] != packages:
mod._changed = True
@@ -99,9 +99,11 @@ class AUR(plugins.Plugin):
store["aur_packages_for_module"].setdefault(mod.name, set())
store["custom_packages_for_module"].setdefault(mod.name, set())
aur_packages = plugins.run_method_with_attribute(mod, "__aur__packages__") or set()
custom_packages = (
plugins.run_method_with_attribute(mod, "__custom__packages__") or set()
aur_packages = set().union(
*plugins.run_methods_with_attribute(mod, "__aur__packages__")
)
custom_packages = set().union(
*plugins.run_methods_with_attribute(mod, "__custom__packages__")
)
custom_package_strs = set(map(str, custom_packages))
@@ -65,7 +65,7 @@ class Pacman(plugins.Plugin):
for mod in modules:
store["packages_for_module"].setdefault(mod.name, set())
packages = plugins.run_method_with_attribute(mod, "__pacman__packages__") or set()
packages = set().union(*plugins.run_methods_with_attribute(mod, "__pacman__packages__"))
if store["packages_for_module"][mod.name] != packages:
mod._changed = True
@@ -46,15 +46,15 @@ def test_process_modules_collects_aur_and_custom_packages_and_marks_changed(
mod1 = FakeModule("mod1", {"aur1", "aur2"}, {cp1})
mod2 = FakeModule("mod2", {"aur3"}, {cp2})
def fake_run_method_with_attribute(mod: FakeModule, attr: str):
def fake_run_methods_with_attribute(mod: FakeModule, attr: str):
if attr == "__aur__packages__":
return mod._aur_pkgs
return [mod._aur_pkgs]
if attr == "__custom__packages__":
return mod._custom_pkgs
return None
return [mod._custom_pkgs]
return []
monkeypatch.setattr(
aur_plugin.plugins, "run_method_with_attribute", fake_run_method_with_attribute
aur_plugin.plugins, "run_methods_with_attribute", fake_run_methods_with_attribute
)
aur.process_modules(store, {mod1, mod2})
@@ -40,14 +40,14 @@ def test_process_modules_collects_packages_and_marks_changed(
mod1 = FakeModule("mod1", {"pkg1", "pkg2"})
mod2 = FakeModule("mod2", {"pkg3"})
def fake_run_method_with_attribute(mod: FakeModule, attr: str) -> set[str]:
def fake_run_methods_with_attribute(mod: FakeModule, attr: str) -> set[str]:
assert attr == "__pacman__packages__"
return mod._packages
return [mod._packages]
monkeypatch.setattr(
pacman_plugin.plugins,
"run_method_with_attribute",
fake_run_method_with_attribute,
"run_methods_with_attribute",
fake_run_methods_with_attribute,
)
pacman.process_modules(store, {mod1, mod2})
@@ -93,8 +93,12 @@ class Systemd(plugins.Plugin):
store["systemd_units_for_module"].setdefault(mod.name, set())
store["systemd_user_units_for_module"].setdefault(mod.name, {})
units = plugins.run_method_with_attribute(mod, "__systemd__units__") or set()
user_units = plugins.run_method_with_attribute(mod, "__systemd__user__units__") or {}
units = set().union(*plugins.run_methods_with_attribute(mod, "__systemd__units__"))
user_units = {
k: v
for d in plugins.run_methods_with_attribute(mod, "__systemd__user__units__")
for k, v in d.items()
}
if store["systemd_units_for_module"][mod.name] != units:
mod._changed = True
@@ -65,13 +65,13 @@ def test_process_modules_marks_changed_and_updates_store(monkeypatch, store, sys
def fake_run_method(mod, attr):
if mod is m1 and attr == "__systemd__units__":
return {"a.service"}
return [{"a.service"}]
if mod is m1 and attr == "__systemd__user__units__":
return {"alice": {"u1.service"}}
return [{"alice": {"u1.service"}}]
# m2 has no units
return None
return []
monkeypatch.setattr(systemd_mod.plugins, "run_method_with_attribute", fake_run_method)
monkeypatch.setattr(systemd_mod.plugins, "run_methods_with_attribute", fake_run_method)
systemd.process_modules(store, {m1, m2})
@@ -96,12 +96,12 @@ def test_process_modules_no_change_second_run(monkeypatch, store, systemd):
def fake_run_method(mod, attr):
if attr == "__systemd__units__":
return {"a.service"}
return [{"a.service"}]
if attr == "__systemd__user__units__":
return {"alice": {"u1.service"}}
return None
return [{"alice": {"u1.service"}}]
return []
monkeypatch.setattr(systemd_mod.plugins, "run_method_with_attribute", fake_run_method)
monkeypatch.setattr(systemd_mod.plugins, "run_methods_with_attribute", fake_run_method)
# first run populates store
systemd.process_modules(store, {m1})
@@ -109,7 +109,7 @@ def test_process_modules_no_change_second_run(monkeypatch, store, systemd):
# new instance (fresh per-process in real usage)
systemd2 = systemd_mod.Systemd()
monkeypatch.setattr(systemd_mod.plugins, "run_method_with_attribute", fake_run_method)
monkeypatch.setattr(systemd_mod.plugins, "run_methods_with_attribute", fake_run_method)
systemd2.process_modules(store, {m1})