diff --git a/changelog/481.bugfix.rst b/changelog/481.bugfix.rst new file mode 100644 index 00000000..4890c352 --- /dev/null +++ b/changelog/481.bugfix.rst @@ -0,0 +1 @@ +``PluginManager.get_plugins()`` no longer returns ``None`` for blocked plugins. diff --git a/src/pluggy/_manager.py b/src/pluggy/_manager.py index ce1e107a..a9eb4a48 100644 --- a/src/pluggy/_manager.py +++ b/src/pluggy/_manager.py @@ -291,7 +291,7 @@ def parse_hookspec_opts( def get_plugins(self) -> set[Any]: """Return a set of all registered plugin objects.""" - return set(self._name2plugin.values()) + return {x for x in self._name2plugin.values() if x is not None} def is_registered(self, plugin: _Plugin) -> bool: """Return whether the plugin is already registered.""" diff --git a/testing/test_pluginmanager.py b/testing/test_pluginmanager.py index d3bcac4e..9b570f84 100644 --- a/testing/test_pluginmanager.py +++ b/testing/test_pluginmanager.py @@ -100,15 +100,19 @@ class A: assert name is not None assert pm.is_registered(a1) assert not pm.is_blocked(name) + assert pm.get_plugins() == {a1} + pm.set_blocked(name) assert pm.is_blocked(name) assert not pm.is_registered(a1) + assert pm.get_plugins() == set() pm.set_blocked("somename") assert pm.is_blocked("somename") assert not pm.register(A(), "somename") pm.unregister(name="somename") assert pm.is_blocked("somename") + assert pm.get_plugins() == set() # Unblock. assert not pm.unblock("someothername")