svn commit: samba r15178 - in
branches/SAMBA_4_0/source/lib/ldb/swig: .
tpot at samba.org
tpot at samba.org
Sun Apr 23 15:30:40 GMT 2006
Author: tpot
Date: 2006-04-23 15:30:40 +0000 (Sun, 23 Apr 2006)
New Revision: 15178
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15178
Log:
Fix ldb function calls after big swig rename.
Add close() methods to Ldb and LdbMessage classes.
Start adding dict interface to LdbMessage.
Modified:
branches/SAMBA_4_0/source/lib/ldb/swig/Ldb.py
Changeset:
Modified: branches/SAMBA_4_0/source/lib/ldb/swig/Ldb.py
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/swig/Ldb.py 2006-04-23 15:29:25 UTC (rev 15177)
+++ branches/SAMBA_4_0/source/lib/ldb/swig/Ldb.py 2006-04-23 15:30:40 UTC (rev 15178)
@@ -22,8 +22,13 @@
from ldb import *
-ldb_global_init()
+# Global initialisation
+result = ldb_global_init()
+
+if result != 0:
+ raise LdbError, (result, 'ldb_global_init failed')
+
class LdbError(Exception):
"""An exception raised when a ldb error occurs."""
pass
@@ -31,29 +36,48 @@
class LdbMessage:
"""A class representing a ldb message as a Python dictionary."""
- def __init__(self, msg = None):
+ def __init__(self):
+ self.mem_ctx = talloc_init(None)
+ self.msg = ldb_msg_new(self.mem_ctx)
- self._msg = msg
- if self._msg is None:
- self._msg = ldb_msg_new(None)
-
def __del__(self):
- talloc_free(self._msg)
+ self.close()
+ def close(self):
+ if self.mem_ctx is not None:
+ talloc_free(self.mem_ctx)
+ self.mem_ctx = None
+ self.msg = None
+
+ def __getattr__(self, attr):
+ if attr == 'dn':
+ return ldb_dn_linearize(None, self.msg.dn)
+ return self.__dict__[attr]
+
+ def __setattr__(self, attr, value):
+ if attr == 'dn':
+ self.msg.dn = ldb_dn_explode(self.msg, value)
+ return
+ self.__dict__[attr] = value
+
def len(self):
- return self._msg.num_elements
+ return self.msg.num_elements
def __getitem__(self, key):
- elt = ldb_msg_find_element(self._msg, key)
+
+ elt = ldb_msg_find_element(self.msg, key)
+
if elt is None:
raise KeyError, "No such attribute '%s'" % key
+
return [ldb_val_array_getitem(elt.values, i)
for i in range(elt.num_values)]
def __setitem__(self, key, value):
- result = ldb_msg_add_value(self._msg, key, str(value))
- if result != LDB_SUCCESS:
- raise LdbError, (result, ldb.strerror(result))
+ if type(value) in (list, tuple):
+ [ldb_msg_add_value(self.msg, key, v) for v in value]
+ else:
+ ldb_msg_add_value(self.msg, key, value)
class Ldb:
"""A class representing a binding to a ldb file."""
@@ -67,29 +91,35 @@
result = ldb_connect(self.ldb_ctx, url, flags, None)
if result != LDB_SUCCESS:
- raise ldbError, (result, ldb.strerror(result))
+ raise LdbError, (result, ldb_strerror(result))
def __del__(self):
- ldb.talloc_free(self.mem_ctx)
- self.mem_ctx = None
- self.ldb_ctx = None
+ """Called when the object is to be garbage collected."""
+ self.close()
+ def close(self):
+ """Close down a ldb."""
+ if self.mem_ctx is not None:
+ talloc_free(self.mem_ctx)
+ self.mem_ctx = None
+ self.ldb_ctx = None
+
def _ldb_call(self, fn, *args):
"""Call a ldb function with args. Raise a LdbError exception
if the function returns a non-zero return value."""
result = fn(*args)
- if result != ldb.LDB_SUCCESS:
- raise LdbError, (result, ldb.strerror(result))
+ if result != LDB_SUCCESS:
+ raise LdbError, (result, ldb_strerror(result))
def search(self, expression):
"""Search a ldb for a given expression."""
- self._ldb_call(ldb.search, self.ldb_ctx, None, ldb.LDB_SCOPE_DEFAULT,
+ self._ldb_call(ldb_search, self.ldb_ctx, None, LDB_SCOPE_DEFAULT,
expression, None);
- return [LdbMessage(ldb.ldb_message_ptr_array_getitem(result.msgs, ndx))
+ return [LdbMessage(ldb_message_ptr_array_getitem(result.msgs, ndx))
for ndx in range(result.count)]
def delete(self, dn):
@@ -97,7 +127,7 @@
_dn = ldb_dn_explode(self.ldb_ctx, dn)
- self._ldb_call(ldb.delete, self.ldb_ctx, _dn)
+ self._ldb_call(ldb_delete, self.ldb_ctx, _dn)
def rename(self, olddn, newdn):
"""Rename a dn."""
@@ -105,7 +135,7 @@
_olddn = ldb_dn_explode(self.ldb_ctx, olddn)
_newdn = ldb_dn_explode(self.ldb_ctx, newdn)
- self._ldb_call(ldb.rename, self.ldb_ctx, _olddn, _newdn)
+ self._ldb_call(ldb_rename, self.ldb_ctx, _olddn, _newdn)
- def add(self, msg):
- self._ldb_call(ldb.add, self.ldb_ctx, msg)
+ def add(self, m):
+ self._ldb_call(ldb_add, self.ldb_ctx, m.msg)
More information about the samba-cvs
mailing list