diff options
-rw-r--r-- | ipalib/plugable.py | 4 | ||||
-rw-r--r-- | ipalib/tests/test_plugable.py | 3 |
2 files changed, 7 insertions, 0 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py index 8241d8ea..71f03357 100644 --- a/ipalib/plugable.py +++ b/ipalib/plugable.py @@ -480,6 +480,8 @@ class Registrar(ReadOnly): class API(ReadOnly): + __finalized = False + def __init__(self, *allowed): self.__keys = tuple(b.__name__ for b in allowed) self.register = Registrar(*allowed) @@ -489,6 +491,7 @@ class API(ReadOnly): """ Finalize the registration, instantiate the plugins. """ + assert not self.__finalized, 'finalize() can only be called once' d = {} def plugin_iter(base, classes): for cls in classes: @@ -506,6 +509,7 @@ class API(ReadOnly): plugin.__lock__() assert plugin.__islocked__() is True assert plugin.api is self + object.__setattr__(self, '_API__finalized', True) def __iter__(self): for key in self.__keys: diff --git a/ipalib/tests/test_plugable.py b/ipalib/tests/test_plugable.py index 3b082082..89bb948e 100644 --- a/ipalib/tests/test_plugable.py +++ b/ipalib/tests/test_plugable.py @@ -622,3 +622,6 @@ def test_API(): assert proxy.name == plugin_name assert read_only(ns, plugin_name) is proxy assert read_only(proxy, 'method')(7) == 7 + b + + # Test that calling finilize again raises AssertionError: + raises(AssertionError, api.finalize) |