Author: jelmer Date: 2007-10-14 18:22:48 +0000 (Sun, 14 Oct 2007) New Revision: 25633
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25633 Log: Implement dn comparison, get_parent. 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: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 17:42:51 UTC (rev 25632) +++ branches/4.0-python/source/lib/ldb/swig/ldb.i 2007-10-14 18:22:48 UTC (rev 25633) @@ -43,7 +43,6 @@ #include "ldb_errors.h" typedef struct ldb_message ldb_msg; -typedef struct ldb_message_element ldb_msg_element; typedef struct ldb_context ldb; typedef struct ldb_dn ldb_dn; @@ -121,23 +120,11 @@ %types(struct ldb_result *); /* - * Wrap struct ldb_message_element - */ - -%array_functions(struct ldb_val, ldb_val_array); - -typedef struct ldb_message_element { - unsigned int flags; - const char *name; - unsigned int num_values; - struct ldb_val *values; -} ldb_msg_element; - -/* * Wrap struct ldb_dn */ %rename(__str__) ldb_dn::get_linearized; +%rename(__cmp__) ldb_dn::compare; %rename(Dn) ldb_dn; typedef struct ldb_dn { %extend { @@ -158,33 +145,47 @@ bool validate(); const char *get_casefold(); const char *get_linearized(); + ldb_dn *parent() { return ldb_dn_get_parent(NULL, $self); } + int compare(ldb_dn *other); } } ldb_dn; -%array_functions(ldb_msg_element, ldb_message_element_array); - +%rename(Message) ldb_message; %rename(__delitem__) ldb_message::remove_attr; typedef struct ldb_message { ldb_dn *dn; - unsigned int num_elements; - ldb_msg_element *elements; + %extend { + ldb_msg() { return ldb_msg_new(NULL); } + ~ldb_msg() { talloc_free($self); } + #ifdef SWIGPYTHON - ldb_msg_element *__getitem__(const char *attr_name) + PyObject *__getitem__(const char *attr_name) { - ldb_msg_element *ret = ldb_msg_find_element($self, attr_name); + PyObject *result; + int i; + struct ldb_message_element *ret = ldb_msg_find_element($self, + attr_name); if (ret == NULL) { PyErr_SetString(PyExc_KeyError, "no such element"); return NULL; } - return ret; + result = PyObject_CallObject(&PySet_Type, NULL); + + for (i = 0; i < ret->num_values; i++) { + PyObject_CallMethod(result, "add", "O", + PyString_FromStringAndSize((const char *)ret->values[i].data, ret->values[i].length)); + } + + return result; } void __setitem__(const char *attr_name, PyObject *set_obj) { - ldb_msg_element *me = talloc(NULL, ldb_msg_element); + struct ldb_message_element *me = talloc(NULL, + struct ldb_message_element); ldb_msg_remove_attr($self, attr_name); me->flags =0 ; me->name = attr_name; 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 17:42:51 UTC (rev 25632) +++ branches/4.0-python/source/lib/ldb/tests/python/api.py 2007-10-14 18:22:48 UTC (rev 25633) @@ -56,13 +56,24 @@ x = ldb.Dn(self.ldb, "dc=foo,bar=bloe") self.assertTrue(x.validate()) + def test_parent(self): + x = ldb.Dn(self.ldb, "dc=foo,bar=bloe") + self.assertEquals("bar=bloe", x.parent().__str__()) + + def test_compare(self): + x = ldb.Dn(self.ldb, "dc=foo,bar=bloe") + y = ldb.Dn(self.ldb, "dc=foo,bar=bloe") + self.assertEquals(x, y) + z = ldb.Dn(self.ldb, "dc=foo,bar=blie") + self.assertNotEquals(z, y) + + class LdbMsgTests(unittest.TestCase): def setUp(self): - self.ldb = ldb.Ldb("foo.tdb") - self.msg = self.ldb.search()[0] + self.msg = ldb.Message() def test_len(self): - self.assertEquals(2, len(self.msg)) + self.assertEquals(0, len(self.msg)) def test_notpresent(self): self.assertRaises(KeyError, lambda: self.msg["foo"]) @@ -71,15 +82,23 @@ del self.msg["foo"] def test_add_value(self): - self.msg["foo"] = set("foo") - self.assertEquals(3, len(self.msg)) + self.assertEquals(0, len(self.msg)) + self.msg["foo"] = set(["foo"]) + self.assertEquals(1, len(self.msg)) + def test_add_value_multiple(self): + self.assertEquals(0, len(self.msg)) + self.msg["foo"] = set(["foo", "bla"]) + self.assertEquals(1, len(self.msg)) + self.assertEquals(set(["foo", "bla"]), self.msg["foo"]) + 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"]) + self.msg["foo"] = set(["fool"]) + self.assertEquals(set(["fool"]), self.msg["foo"]) + self.msg["foo"] = set(["bar"]) + self.assertEquals(set(["bar"]), self.msg["foo"]) def test_dn(self): + self.msg.dn = ldb.Dn(ldb.Ldb("foo.tdb"), "@BASEINFO") self.assertEquals("@BASEINFO", self.msg.dn.__str__())
