diff --git a/src/pluggy/_manager.py b/src/pluggy/_manager.py index a984d1d7..ce1e107a 100644 --- a/src/pluggy/_manager.py +++ b/src/pluggy/_manager.py @@ -235,6 +235,16 @@ def is_blocked(self, name: str) -> bool: """Return whether the given plugin name is blocked.""" return name in self._name2plugin and self._name2plugin[name] is None + def unblock(self, name: str) -> bool: + """Unblocks a name. + + Returns whether the name was actually blocked. + """ + if self._name2plugin.get(name, -1) is None: + del self._name2plugin[name] + return True + return False + def add_hookspecs(self, module_or_class: _Namespace) -> None: """Add new hook specifications defined in the given ``module_or_class``. diff --git a/testing/test_pluginmanager.py b/testing/test_pluginmanager.py index 81b86b65..7f09d9b4 100644 --- a/testing/test_pluginmanager.py +++ b/testing/test_pluginmanager.py @@ -110,6 +110,13 @@ class A: pm.unregister(name="somename") assert pm.is_blocked("somename") + # Unblock. + assert not pm.unblock("someothername") + assert pm.unblock("somename") + assert not pm.is_blocked("somename") + assert not pm.unblock("somename") + assert pm.register(A(), "somename") + def test_register_mismatch_method(he_pm: PluginManager) -> None: class hello: