summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipalib/plugable.py10
-rw-r--r--ipalib/tests/test_plugable.py9
2 files changed, 13 insertions, 6 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index 80349090..70743f5a 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -289,9 +289,15 @@ class Registrar(object):
class API(ReadOnly):
- def __init__(self, registrar):
+ def __init__(self, *allowed):
+ object.__setattr__(self, 'register', Registrar(*allowed))
object.__setattr__(self, '_API__plugins', [])
- for (base, plugins) in registrar:
+
+ def __call__(self):
+ """
+ Finalize the registration, instantiate the plugins.
+ """
+ for (base, plugins) in self.register:
ns = NameSpace(self.__plugin_iter(base, plugins))
assert not hasattr(self, base.__name__)
object.__setattr__(self, base.__name__, ns)
diff --git a/ipalib/tests/test_plugable.py b/ipalib/tests/test_plugable.py
index 27841e2e..2e87ea2c 100644
--- a/ipalib/tests/test_plugable.py
+++ b/ipalib/tests/test_plugable.py
@@ -334,7 +334,10 @@ def test_API():
def method(self, n):
return n + 1
- r = plugable.Registrar(base0, base1)
+ api = plugable.API(base0, base1)
+ r = api.register
+ assert isinstance(r, plugable.Registrar)
+ assert read_only(api, 'register') is r
class base0_plugin0(base0):
pass
@@ -360,10 +363,8 @@ def test_API():
pass
r(base1_plugin2)
- registrants = tuple(r)
-
# Test API instance:
- api = plugable.API(r)
+ api() # Calling instance performs finalization
def get_base(b):
return 'base%d' % b