diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-15 01:46:11 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-15 01:46:11 +0000 |
commit | 3e3b596f68957f46efa5af4b957c8add50fca8b6 (patch) | |
tree | c7dabe68c259f0f601fb38c3e24ca778bbb65353 /ipalib/plugable.py | |
parent | 1a92bdf29b3c65d7b9bd1c61d9eda0f98a70ecfa (diff) | |
download | freeipa-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.py | 62 |
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. |