summaryrefslogtreecommitdiffstats
path: root/ipalib/plugable.py
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-08-15 01:46:11 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-08-15 01:46:11 +0000
commit3e3b596f68957f46efa5af4b957c8add50fca8b6 (patch)
treec7dabe68c259f0f601fb38c3e24ca778bbb65353 /ipalib/plugable.py
parent1a92bdf29b3c65d7b9bd1c61d9eda0f98a70ecfa (diff)
downloadfreeipa-3e3b596f68957f46efa5af4b957c8add50fca8b6.tar.gz
freeipa-3e3b596f68957f46efa5af4b957c8add50fca8b6.tar.xz
freeipa-3e3b596f68957f46efa5af4b957c8add50fca8b6.zip
173: NameSpace now subclasses from DictProxy
Diffstat (limited to 'ipalib/plugable.py')
-rw-r--r--ipalib/plugable.py62
1 files changed, 9 insertions, 53 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index 4661aa1e6..7d42d4a00 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -434,7 +434,7 @@ def check_name(name):
return name
-class NameSpace(ReadOnly):
+class NameSpace(DictProxy):
"""
A read-only namespace with handy container behaviours.
@@ -483,10 +483,9 @@ class NameSpace(ReadOnly):
"""
:param members: An iterable providing the members.
"""
- self.__d = dict()
- self.__names = tuple(self.__member_iter(members))
- lock(self)
- assert set(self.__d) == set(self.__names)
+ super(NameSpace, self).__init__(
+ dict(self.__member_iter(members))
+ )
def __member_iter(self, members):
"""
@@ -496,56 +495,16 @@ class NameSpace(ReadOnly):
"""
for member in members:
name = check_name(member.name)
- assert not (
- name in self.__d or hasattr(self, name)
- ), 'already has member named %r' % name
- self.__d[name] = member
+ assert not hasattr(self, name), 'already has attribute %r' % name
setattr(self, name, member)
- yield name
-
- def __len__(self):
- """
- Returns the number of members in this NameSpace.
- """
- return len(self.__d)
-
- def __contains__(self, name):
- """
- Returns True if instance contains a member named ``name``, otherwise
- False.
-
- :param name: The name of a potential member
- """
- return name in self.__d
-
- def __getitem__(self, name):
- """
- Returns the member named ``name``.
-
- Raises KeyError if this NameSpace does not contain a member named
- ``name``.
-
- :param name: The name of member to retrieve
- """
- if name in self.__d:
- return self.__d[name]
- raise KeyError('NameSpace has no member named %r' % name)
-
- def __iter__(self):
- """
- Iterates through the member names in the same order as the members
- were passed to the constructor.
- """
- for name in self.__names:
- yield name
+ yield (name, member)
def __call__(self):
"""
- Iterates through the members in the same order they were passed to the
- constructor.
+ Iterates through the members of this NameSpace.
"""
- for name in self.__names:
- yield self.__d[name]
+ for key in self:
+ yield self[key]
def __repr__(self):
"""
@@ -555,9 +514,6 @@ class NameSpace(ReadOnly):
return '%s(<%d members>)' % (self.__class__.__name__, len(self))
-
-
-
class Registrar(ReadOnly):
"""
Collects plugin classes as they are registered.