diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-09 23:10:49 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-09 23:10:49 +0000 |
commit | 0453aa465f8371aa4baea5c06adad42481553e0a (patch) | |
tree | 226af040ec136220a4900088c5240d85752e59ad /ipalib/plugable.py | |
parent | 97b01a48914fbed96b73fe8532bad3b4bd08027e (diff) | |
download | freeipa-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.py | 36 |
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): |