summaryrefslogtreecommitdiffstats
path: root/ipalib/plugable.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipalib/plugable.py')
-rw-r--r--ipalib/plugable.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index 6e6c6973b..e017a8a42 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -175,12 +175,13 @@ class NameSpace(ReadOnly):
__max_len = None
- def __init__(self, items):
+ def __init__(self, items, base=None):
"""
`items` should be an iterable providing the members of this
NameSpace.
"""
object.__setattr__(self, '_NameSpace__items', tuple(items))
+ object.__setattr__(self, '_NameSpace__base', base)
# dict mapping Python name to item:
object.__setattr__(self, '_NameSpace__pname', {})
@@ -234,6 +235,14 @@ class NameSpace(ReadOnly):
object.__setattr__(self, '_NameSpace__max_len', ml)
return self.__max_len
+ def __repr__(self):
+ if self.__base is None:
+ base = repr(self.__base)
+ else:
+ base = '%s.%s' % (self.__base.__module__, self.__base.__name__)
+ return '%s(*proxies, base=%s)' % (self.__class__.__name__, base)
+
+
@@ -329,6 +338,8 @@ class Registrar(object):
class API(ReadOnly):
def __init__(self, *allowed):
+ keys = tuple(b.__name__ for b in allowed)
+ object.__setattr__(self, '_API__keys', keys)
object.__setattr__(self, 'register', Registrar(*allowed))
object.__setattr__(self, '_API__plugins', [])
@@ -337,7 +348,7 @@ class API(ReadOnly):
Finalize the registration, instantiate the plugins.
"""
for (base, plugins) in self.register:
- ns = NameSpace(self.__plugin_iter(base, plugins))
+ ns = NameSpace(self.__plugin_iter(base, plugins), base=base)
assert not hasattr(self, base.__name__)
object.__setattr__(self, base.__name__, ns)
for plugin in self.__plugins:
@@ -350,3 +361,7 @@ class API(ReadOnly):
plugin = cls()
self.__plugins.append(plugin)
yield base.proxy(plugin)
+
+ def __iter__(self):
+ for key in self.__keys:
+ yield key