summaryrefslogtreecommitdiffstats
path: root/ipalib/plugable.py
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-09-09 23:10:49 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-09-09 23:10:49 +0000
commit0453aa465f8371aa4baea5c06adad42481553e0a (patch)
tree226af040ec136220a4900088c5240d85752e59ad /ipalib/plugable.py
parent97b01a48914fbed96b73fe8532bad3b4bd08027e (diff)
downloadfreeipa-0453aa465f8371aa4baea5c06adad42481553e0a.tar.gz
freeipa-0453aa465f8371aa4baea5c06adad42481553e0a.tar.xz
freeipa-0453aa465f8371aa4baea5c06adad42481553e0a.zip
274: NameSpace.__init__() now takes sort=True keyword arument to allow for non-sorted NameSpaces; updated and improved NameSpace unit tests
Diffstat (limited to 'ipalib/plugable.py')
-rw-r--r--ipalib/plugable.py36
1 files changed, 27 insertions, 9 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index 438815bb3..66e5fadad 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -518,32 +518,50 @@ class NameSpace(DictProxy):
True
"""
- def __init__(self, members):
+ def __init__(self, members, sort=True):
"""
:param members: An iterable providing the members.
+ :param sort: Whether to sort the members by member name.
"""
+ self.__members = tuple(members)
+ self.__sort = check_type(sort, bool, 'sort')
+ names = (m.name for m in self.__members)
+ if self.__sort:
+ self.__names = tuple(sorted(names))
+ else:
+ self.__names = tuple(names)
super(NameSpace, self).__init__(
- dict(self.__member_iter(members))
+ dict(self.__member_iter())
)
- def __member_iter(self, members):
+ def __member_iter(self):
"""
Helper method called only from `NameSpace.__init__()`.
-
- :param members: Same iterable passed to `NameSpace.__init__()`.
"""
- for member in members:
+ for member in self.__members:
name = check_name(member.name)
assert not hasattr(self, name), 'already has attribute %r' % name
setattr(self, name, member)
yield (name, member)
+ def __iter__(self):
+ """
+ Iterates through member names.
+
+ In this instance was created with ``sort=True``,
+ """
+ for name in self.__names:
+ yield name
+
def __repr__(self):
"""
- Returns pseudo-valid Python expression that could be used to construct
- this NameSpace instance.
+ Returns a pseudo-valid expression that could create this instance.
"""
- return '%s(<%d members>)' % (self.__class__.__name__, len(self))
+ return '%s(<%d members>, sort=%r)' % (
+ self.__class__.__name__,
+ len(self),
+ self.__sort,
+ )
class Registrar(DictProxy):