From b69f6983e4bb01e2af63c4b02a0ab79b24e59569 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Mon, 21 Jan 2013 07:03:33 -0500 Subject: Remove IPAdmin.get_dns_sorted_by_length A simple sort(key=len) is simpler both implementation-wise and semantics-wise. Part of the work for: https://fedorahosted.org/freeipa/ticket/2660 --- ipaserver/install/replication.py | 20 ++++++++------------ ipaserver/ipaldap.py | 36 ------------------------------------ 2 files changed, 8 insertions(+), 48 deletions(-) (limited to 'ipaserver') diff --git a/ipaserver/install/replication.py b/ipaserver/install/replication.py index 1555fb993..d604cf7b3 100644 --- a/ipaserver/install/replication.py +++ b/ipaserver/install/replication.py @@ -1066,12 +1066,10 @@ class ReplicationManager(object): filter='(krbprincipalname=*/%s@%s)' % (replica, realm) entries = self.conn.getList(self.suffix, ldap.SCOPE_SUBTREE, filterstr=filter) - if len(entries) != 0: - dnset = self.conn.get_dns_sorted_by_length(entries, - reverse=True) - for dns in dnset: - for dn in dns: - self.conn.deleteEntry(dn) + if entries: + entries.sort(key=len, reverse=True) + for dn in entries: + self.conn.deleteEntry(dn) except errors.NotFound: pass except Exception, e: @@ -1109,12 +1107,10 @@ class ReplicationManager(object): try: dn = DN(('cn', replica), ('cn', 'masters'), ('cn', 'ipa'), ('cn', 'etc'), self.suffix) entries = self.conn.getList(dn, ldap.SCOPE_SUBTREE) - if len(entries) != 0: - dnset = self.conn.get_dns_sorted_by_length(entries, - reverse=True) - for dns in dnset: - for dn in dns: - self.conn.deleteEntry(dn) + if entries: + entries.sort(key=len, reverse=True) + for dn in entries: + self.conn.deleteEntry(dn) except errors.NotFound: pass except Exception, e: diff --git a/ipaserver/ipaldap.py b/ipaserver/ipaldap.py index a84f8fac7..7253bc1f7 100644 --- a/ipaserver/ipaldap.py +++ b/ipaserver/ipaldap.py @@ -1794,42 +1794,6 @@ class IPAdmin(LDAPConnection): else: break return (done, exitCode) - def get_dns_sorted_by_length(self, entries, reverse=False): - """ - Sorts a list of entries [(dn, entry_attrs)] based on their DN. - Entries within the same node are not sorted in any meaningful way. - If Reverse is set to True, leaf entries are returned first. This is - useful to perform recursive deletes where you need to delete entries - starting from the leafs and go up to delete nodes only when all its - leafs are removed. - - Returns a list of list of dn's. Every dn in the dn list has - the same number of RDN's. The outer list is sorted according - to the number of RDN's in each inner list. - - Example: - - [['cn=bob', cn=tom], ['cn=bob,ou=people', cn=tom,ou=people]] - - dn's in list[0] have 1 RDN - dn's in list[1] have 2 RDN's - """ - - res = dict() - - for e in entries: - dn = e.dn - assert isinstance(dn, DN) - rdn_count = len(dn) - rdn_count_list = res.setdefault(rdn_count, []) - if dn not in rdn_count_list: - rdn_count_list.append(dn) - - keys = res.keys() - keys.sort(reverse=reverse) - - return map(res.get, keys) - def __getattr__(self, attrname): # This makes IPAdmin classes look like IPASimpleLDAPObjects # FIXME: for backwards compatibility only -- cgit