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