svn commit: samba r25632 - in branches/4.0-python: .
source/lib/ldb/swig source/lib/ldb/tests/python
jelmer at samba.org
jelmer at samba.org
Sun Oct 14 17:42:52 GMT 2007
Author: jelmer
Date: 2007-10-14 17:42:51 +0000 (Sun, 14 Oct 2007)
New Revision: 25632
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25632
Log:
Support setting values in messages.
Modified:
branches/4.0-python/
branches/4.0-python/source/lib/ldb/swig/ldb.i
branches/4.0-python/source/lib/ldb/tests/python/api.py
Changeset:
Property changes on: branches/4.0-python
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:file-ids
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...
Modified: branches/4.0-python/source/lib/ldb/swig/ldb.i
===================================================================
--- branches/4.0-python/source/lib/ldb/swig/ldb.i 2007-10-14 15:42:31 UTC (rev 25631)
+++ branches/4.0-python/source/lib/ldb/swig/ldb.i 2007-10-14 17:42:51 UTC (rev 25632)
@@ -96,7 +96,7 @@
}
%typemap(out) struct ldb_val {
- $result = PyString_FromStringAndSize($1.data, $1.length);
+ $result = PyString_FromStringAndSize((const char *)$1.data, $1.length);
}
/*
@@ -106,19 +106,12 @@
%typemap(in, numinputs=0) struct ldb_result **OUT (struct ldb_result *temp_ldb_result) {
$1 = &temp_ldb_result;
}
-struct ldb_result {
- unsigned int count;
- ldb_msg **msgs;
- char **refs;
- struct ldb_control **controls;
-};
-
#ifdef SWIGPYTHON
%typemap(argout) struct ldb_result ** (int i) {
- resultobj = PyList_New((*$1)->count);
+ $result = PyList_New((*$1)->count);
for (i = 0; i < (*$1)->count; i++) {
- PyList_SetItem(resultobj, i,
+ PyList_SetItem($result, i,
SWIG_NewPointerObj((*$1)->msgs[i], SWIGTYPE_p_ldb_message, 0)
);
}
@@ -168,26 +161,61 @@
}
} ldb_dn;
-%array_functions(struct ldb_message_element, ldb_message_element_array);
+%array_functions(ldb_msg_element, ldb_message_element_array);
-%apply ldb_msg_element **OUTPUT { ldb_msg_element **return_el };
+%rename(__delitem__) ldb_message::remove_attr;
+
typedef struct ldb_message {
ldb_dn *dn;
unsigned int num_elements;
- struct ldb_message_element *elements;
+ ldb_msg_element *elements;
%extend {
- int add_value(const char *attr_name, const struct ldb_val *val, ldb_msg_element **return_el);
- ldb_msg_element *find_element(const char *attr_name);
- void remove_attr(const char *attr);
+#ifdef SWIGPYTHON
+ ldb_msg_element *__getitem__(const char *attr_name)
+ {
+ ldb_msg_element *ret = ldb_msg_find_element($self, attr_name);
+ if (ret == NULL) {
+ PyErr_SetString(PyExc_KeyError, "no such element");
+ return NULL;
+ }
+
+ return ret;
+ }
+
+ void __setitem__(const char *attr_name, PyObject *set_obj)
+ {
+ ldb_msg_element *me = talloc(NULL, ldb_msg_element);
+ ldb_msg_remove_attr($self, attr_name);
+ me->flags =0 ;
+ me->name = attr_name;
+ if (PyAnySet_Check(set_obj)) {
+ PyObject *iter, *obj;
+ int i;
+ me->num_values = PyObject_Size(set_obj);
+ me->values = talloc_array(me, struct ldb_val, me->num_values);
+ iter = PyObject_GetIter(set_obj);
+ i = 0;
+ while((obj = PyIter_Next(iter))) {
+ me->values[i].length = PyString_Size(obj);
+ me->values[i].data = PyString_AsString(obj);
+ i++;
+ }
+ } else {
+ me->num_values = 1;
+ me->values = talloc_array(me, struct ldb_val, me->num_values);
+ me->values[0].length = PyString_Size(set_obj);
+ me->values[0].data = PyString_AsString(set_obj);
+ }
+ ldb_msg_add($self, me, 0);
+ talloc_free(me);
+ }
+
+ unsigned int __len__() { return $self->num_elements; }
+#endif
+ void remove_attr(const char *name);
}
} ldb_msg;
-/*
- * Wrap struct ldb_result
- */
-
-%array_functions(struct ldb_message *, ldb_message_ptr_array);
-
/* FIXME: Convert ldb_result to 3-tuple:
(msgs, refs, controls)
*/
@@ -196,11 +224,6 @@
* Wrap ldb functions
*/
-/* Error handling */
-
-const char *ldb_errstring(struct ldb_context *ldb);
-const char *ldb_strerror(int ldb_err);
-
%rename(Ldb) ldb;
/* Top-level ldb operations */
typedef struct ldb_context {
Modified: branches/4.0-python/source/lib/ldb/tests/python/api.py
===================================================================
--- branches/4.0-python/source/lib/ldb/tests/python/api.py 2007-10-14 15:42:31 UTC (rev 25631)
+++ branches/4.0-python/source/lib/ldb/tests/python/api.py 2007-10-14 17:42:51 UTC (rev 25632)
@@ -23,7 +23,23 @@
l = ldb.Ldb("foo.tdb")
l.delete(ldb.Dn(l, "dc=foo"))
+ def test_get_config_basedn(self):
+ l = ldb.Ldb("foo.tdb")
+ self.assertEquals(None, l.get_config_basedn())
+ def test_get_root_basedn(self):
+ l = ldb.Ldb("foo.tdb")
+ self.assertEquals(None, l.get_root_basedn())
+
+ def test_get_schema_basedn(self):
+ l = ldb.Ldb("foo.tdb")
+ self.assertEquals(None, l.get_schema_basedn())
+
+ def test_get_default_basedn(self):
+ l = ldb.Ldb("foo.tdb")
+ self.assertEquals(None, l.get_default_basedn())
+
+
class DnTests(unittest.TestCase):
def setUp(self):
self.ldb = ldb.Ldb("foo.tdb")
@@ -32,7 +48,38 @@
x = ldb.Dn(self.ldb, "dc=foo,bar=bloe")
self.assertEquals(x.__str__(), "dc=foo,bar=bloe")
+ def test_get_casefold(self):
+ x = ldb.Dn(self.ldb, "dc=foo,bar=bloe")
+ self.assertEquals(x.get_casefold(), "DC=FOO,BAR=bloe")
+
def test_validate(self):
x = ldb.Dn(self.ldb, "dc=foo,bar=bloe")
self.assertTrue(x.validate())
+class LdbMsgTests(unittest.TestCase):
+ def setUp(self):
+ self.ldb = ldb.Ldb("foo.tdb")
+ self.msg = self.ldb.search()[0]
+
+ def test_len(self):
+ self.assertEquals(2, len(self.msg))
+
+ def test_notpresent(self):
+ self.assertRaises(KeyError, lambda: self.msg["foo"])
+
+ def test_del(self):
+ del self.msg["foo"]
+
+ def test_add_value(self):
+ self.msg["foo"] = set("foo")
+ self.assertEquals(3, len(self.msg))
+
+ def test_set_value(self):
+ self.msg["foo"] = set("foo")
+ self.assertEquals("foo", self.msg["foo"])
+ self.msg["foo"] = set("bar")
+ self.assertEquals("bar", self.msg["foo"])
+
+ def test_dn(self):
+ self.assertEquals("@BASEINFO", self.msg.dn.__str__())
+
More information about the samba-cvs
mailing list