summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Dennis <jdennis@redhat.com>2011-08-03 19:14:51 -0400
committerRob Crittenden <rcritten@redhat.com>2011-08-16 23:26:03 -0400
commitb13899ebc523cbb5f1ec09cc78ac92d696ee966f (patch)
tree09b99a68aa4e3782526748f926069146eccfe51d
parent73d756bc70dd47d672ed7a88c3452cc08fc7a759 (diff)
downloadfreeipa-b13899ebc523cbb5f1ec09cc78ac92d696ee966f.tar.gz
freeipa-b13899ebc523cbb5f1ec09cc78ac92d696ee966f.tar.xz
freeipa-b13899ebc523cbb5f1ec09cc78ac92d696ee966f.zip
ticket 1568 - DN objects should support the insert method
Add dn.insert() and update unittest
-rw-r--r--ipalib/dn.py30
-rw-r--r--tests/test_ipalib/test_dn.py9
2 files changed, 36 insertions, 3 deletions
diff --git a/ipalib/dn.py b/ipalib/dn.py
index 1311b6ae0..0eac71166 100644
--- a/ipalib/dn.py
+++ b/ipalib/dn.py
@@ -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
diff --git a/tests/test_ipalib/test_dn.py b/tests/test_ipalib/test_dn.py
index c647460ab..f4aa0aaec 100644
--- a/tests/test_ipalib/test_dn.py
+++ b/tests/test_ipalib/test_dn.py
@@ -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',