svn commit: samba r25633 - 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 18:22:48 GMT 2007
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__())
More information about the samba-cvs
mailing list