r15348: Start adding a dict interface and tests to LdbMessage class.
authorTim Potter <tpot@samba.org>
Sun, 30 Apr 2006 01:08:52 +0000 (01:08 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:05:23 +0000 (14:05 -0500)
(This used to be commit 7e30e8ba57efe37314ebca02f964420f56b9eb52)

source4/lib/ldb/swig/Ldb.py
source4/scripting/swig/torture/torture_ldb.py

index d00b2b0be1ca4de328cab481e8053863c1aef08f..e78d56efdae23e25026686490223466a49b29e76 100644 (file)
@@ -52,6 +52,8 @@ class LdbMessage:
             self.mem_ctx = None
             self.msg = None
 
+    # Make the dn attribute of the object dynamic
+
     def __getattr__(self, attr):
         if attr == 'dn':
             return ldb_dn_linearize(None, self.msg.dn)
@@ -63,8 +65,7 @@ class LdbMessage:
             return
         self.__dict__[attr] = value
         
-    def len(self):
-        return self.msg.num_elements
+    # Get and set individual elements
 
     def __getitem__(self, key):
 
@@ -81,7 +82,23 @@ class LdbMessage:
             [ldb_msg_add_value(self.msg, key, v) for v in value]
         else:
             ldb_msg_add_value(self.msg, key, value)
-    
+
+    # Dictionary interface
+    # TODO: move to iterator based interface
+
+    def len(self):
+        return self.msg.num_elements
+
+    def keys(self):
+        return [ldb_message_element_array_getitem(self.msg.elements, i).name
+                for i in range(self.msg.num_elements)]
+
+    def values(self):
+        return [self[k] for k in self.keys()]
+
+    def items(self):
+        return [(k, self[k]) for k in self.keys()]
+
 class Ldb:
     """A class representing a binding to a ldb file."""
 
index c9a3ded6dabc571e8fbe514c0e128ba7cc23fbf8..311a2b1d668704723b202b550f5947c7a6ecff83 100755 (executable)
@@ -1,14 +1,18 @@
 #!/usr/bin/python
 
-import Ldb
+import Ldb, sys
 
-def fail(msg):
-    print 'FAILED:', msg
-    sys.exit(1)
+def test(cond, msg):
+    if not cond:
+        print 'FAILED:', msg
+        sys.exit(1)
 
-l = Ldb.Ldb()
+# Torture LdbMessage
 
-l.connect('tdb:///tmp/foo.ldb')
-result = l.search('(dn=*)')
+m = Ldb.LdbMessage()
+m['animal'] = 'dog'
+m['name'] = 'spotty'
 
-print result
+test(m.keys() == ['animal', 'name'], 'keys() test failed')
+test(m.values() == [['dog'], ['spotty']], 'values() test failed')
+test(m.items() == [('animal', ['dog']), ('name', ['spotty'])], 'items() test failed')