diff options
-rw-r--r-- | source4/lib/ldb/swig/Ldb.py | 23 | ||||
-rwxr-xr-x | source4/scripting/swig/torture/torture_ldb.py | 20 |
2 files changed, 32 insertions, 11 deletions
diff --git a/source4/lib/ldb/swig/Ldb.py b/source4/lib/ldb/swig/Ldb.py index d00b2b0be1..e78d56efda 100644 --- a/source4/lib/ldb/swig/Ldb.py +++ b/source4/lib/ldb/swig/Ldb.py @@ -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.""" diff --git a/source4/scripting/swig/torture/torture_ldb.py b/source4/scripting/swig/torture/torture_ldb.py index c9a3ded6da..311a2b1d66 100755 --- a/source4/scripting/swig/torture/torture_ldb.py +++ b/source4/scripting/swig/torture/torture_ldb.py @@ -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') |