mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
320: plugable.API now respects the Plugin.__proxy__ flag; added test for plugins without proxy to unit tests for API
This commit is contained in:
@@ -24,4 +24,8 @@ Base classes for all backed-end plugins.
|
||||
import plugable
|
||||
|
||||
class Backend(plugable.Plugin):
|
||||
pass
|
||||
"""
|
||||
Base class for all backend plugins.
|
||||
"""
|
||||
|
||||
__proxy__ = False # Backend plugins are not wrapped in a PluginProxy
|
||||
|
||||
@@ -241,6 +241,7 @@ class Plugin(ReadOnly):
|
||||
Base class for all plugins.
|
||||
"""
|
||||
__public__ = frozenset()
|
||||
__proxy__ = True
|
||||
__api = None
|
||||
|
||||
def __get_name(self):
|
||||
@@ -709,7 +710,10 @@ class API(DictProxy):
|
||||
if klass not in instances:
|
||||
instances[klass] = klass()
|
||||
plugin = instances[klass]
|
||||
yield PluginProxy(base, plugin)
|
||||
if base.__proxy__:
|
||||
yield PluginProxy(base, plugin)
|
||||
else:
|
||||
yield plugin
|
||||
|
||||
for name in self.register:
|
||||
base = self.register[name]
|
||||
|
||||
@@ -34,3 +34,4 @@ class test_Backend(ClassChecker):
|
||||
|
||||
def test_class(self):
|
||||
assert self.cls.__bases__ == (plugable.Plugin,)
|
||||
assert self.cls.__proxy__ is False
|
||||
|
||||
@@ -795,3 +795,22 @@ def test_API():
|
||||
|
||||
# Test that calling finilize again raises AssertionError:
|
||||
raises(AssertionError, api.finalize)
|
||||
|
||||
# Test with base class that doesn't request a proxy
|
||||
class NoProxy(plugable.Plugin):
|
||||
__proxy__ = False
|
||||
api = plugable.API(NoProxy)
|
||||
class plugin0(NoProxy):
|
||||
pass
|
||||
api.register(plugin0)
|
||||
class plugin1(NoProxy):
|
||||
pass
|
||||
api.register(plugin1)
|
||||
api.finalize()
|
||||
names = ['plugin0', 'plugin1']
|
||||
assert list(api.NoProxy) == names
|
||||
for name in names:
|
||||
plugin = api.NoProxy[name]
|
||||
assert getattr(api.NoProxy, name) is plugin
|
||||
assert isinstance(plugin, plugable.Plugin)
|
||||
assert not isinstance(plugin, plugable.PluginProxy)
|
||||
|
||||
Reference in New Issue
Block a user