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