From 5abd8940f9bcfbab1b68018759a2405ec944f831 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 30 Apr 2006 01:08:52 +0000 Subject: r15348: Start adding a dict interface and tests to LdbMessage class. (This used to be commit 7e30e8ba57efe37314ebca02f964420f56b9eb52) --- source4/lib/ldb/swig/Ldb.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'source4/lib') 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.""" -- cgit