ticket 1568 - DN objects should support the insert method

Add dn.insert() and update unittest
This commit is contained in:
John Dennis 2011-08-03 19:14:51 -04:00 committed by Rob Crittenden
parent 2012f847f3
commit fae07f8154
2 changed files with 36 additions and 3 deletions

View File

@ -1004,9 +1004,19 @@ class DN(object):
dn[:]
# Set the 2nd and 3rd RDN using slices (all are equivalent)
dn[1:3] = ('cn', 'Bob), ('dc', 'redhat.com')
dn[1:3] = [['cn', 'Bob], ['dc', 'redhat.com']]
dn[1:3] = RDN('cn', 'Bob), RDN('dc', 'redhat.com')
dn[1:3] = ('cn', 'Bob'), ('dc', 'redhat.com')
dn[1:3] = [['cn', 'Bob'], ['dc', 'redhat.com']]
dn[1:3] = RDN('cn', 'Bob'), RDN('dc', 'redhat.com')
DN objects support the insert operation.
dn.insert(i,x) is exactly equivalent to dn[i:i] = [x], thus the following
are all equivalent:
dn.insert(i, ('cn','Bob'))
dn.insert(i, ['cn','Bob'])
dn.insert(i, RDN(('cn','Bob')))
dn[i:i] = [('cn','Bob')]
DN objects support equality testing and comparision. See RDN for the
definition of the comparision method.
@ -1214,6 +1224,20 @@ class DN(object):
return self
def insert(self, i, x):
'''
x must be a 2-value tuple or list promotable to an RDN object,
or a RDN object.
dn.insert(i, x) is the same as s[i:i] = [x]
When a negative index is passed as the first parameter to the
insert() method, the list length is added, as for slice
indices. If it is still negative, it is truncated to zero, as
for slice indices.
'''
self.rdns.insert(i, self._rdn_from_value(x))
# The implementation of startswith, endswith, tailmatch, adjust_indices
# was based on the Python's stringobject.c implementation

View File

@ -870,6 +870,15 @@ class TestDN(unittest.TestCase):
slice_rdn = RDN(dn_slice[i])
self.assertEqual(slice_rdn, query_rdn)
# insert
dn = DN(self.rdn2)
dn.insert(0, self.rdn1)
self.assertEqual(dn, self.dn3)
dn = DN(self.rdn1)
dn.insert(1, (self.attr2, self.value2))
self.assertEqual(dn, self.dn3)
# Slices
# Assign via RDN
rdn_args = make_rdn_args(dn_low, dn_high, 'tuple',