svn commit: samba r25716 - in branches/4.0-python: . source/lib/ldb/swig source/lib/ldb/tests/python

jelmer at samba.org jelmer at samba.org
Wed Oct 24 12:59:06 GMT 2007


Author: jelmer
Date: 2007-10-24 12:59:04 +0000 (Wed, 24 Oct 2007)
New Revision: 25716

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25716

Log:
Return an iterator over tuples when parsing ldif.
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-24 12:57:57 UTC (rev 25715)
+++ branches/4.0-python/source/lib/ldb/swig/ldb.i	2007-10-24 12:59:04 UTC (rev 25716)
@@ -212,7 +212,7 @@
         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 = talloc_strdup(me->values, 
+        me->values[0].data = (uint8_t *)talloc_strdup(me->values, 
                                            PyString_AsString(set_obj));
     } else if (PySequence_Check(set_obj)) {
         int i;
@@ -221,7 +221,7 @@
         for (i = 0; i < me->num_values; i++) {
             PyObject *obj = PySequence_GetItem(set_obj, i);
             me->values[i].length = PyString_Size(obj);
-            me->values[i].data = PyString_AsString(obj);
+            me->values[i].data = (uint8_t *)PyString_AsString(obj);
         }
     } else {
         talloc_free(me);
@@ -356,6 +356,28 @@
    (msgs, refs, controls)
  */
 
+typedef struct ldb_ldif ldb_ldif;
+
+%inline {
+    static PyObject *ldb_ldif_to_pyobject(ldb_ldif *ldif)
+    {
+        if (ldif == NULL) {
+            return Py_None;
+        } else {
+            return Py_BuildValue("(iO)", ldif->changetype, 
+                   SWIG_NewPointerObj(ldif->msg, SWIGTYPE_p_ldb_message, 0));
+        }
+    }
+
+
+    static PyObject *next_ldif_fragment(PyObject *self, PyObject *args)
+    {
+        struct ldb_context *ldb = PyCObject_AsVoidPtr(PyTuple_GetItem(self, 0));
+        const char **s = PyCObject_AsVoidPtr(PyTuple_GetItem(self, 1));
+        return ldb_ldif_to_pyobject(ldb_ldif_read_string(ldb, s));
+    }
+}
+
 /*
  * Wrap ldb functions 
  */
@@ -424,13 +446,25 @@
 
             return result->count > 0;
         }
-#endif
-       ldb_msg *parse_ldif(const char *s)
+
+        PyObject *parse_ldif(const char *s)
         {
-            struct ldb_ldif *ret = ldb_ldif_read_string($self, &s);
+            PyObject *selfobj, *callable;
+            PyMethodDef md = {
+                "next_ldif_fragment",
+                next_ldif_fragment,
+                METH_NOARGS,
+                NULL
+            };
 
-            return ret->msg;
+            selfobj = Py_BuildValue("(OO)", 
+                                    PyCObject_FromVoidPtr($self, NULL),
+                                    PyCObject_FromVoidPtr(&s, NULL));
+            callable = PyCFunction_New(&md, selfobj);
+
+            return PyCallIter_New(callable, Py_None);
         }
+#endif
     }
 } ldb;
 

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-24 12:57:57 UTC (rev 25715)
+++ branches/4.0-python/source/lib/ldb/tests/python/api.py	2007-10-24 12:59:04 UTC (rev 25716)
@@ -234,9 +234,10 @@
         self.assertEquals("dc=foo,bar=bla", str(y + x))
 
     def test_parse_ldif(self):
-        msg = self.ldb.parse_ldif("dn: foo=bar\n")
-        self.assertEquals("foo=bar", str(msg.dn))
-        self.assertTrue(isinstance(msg, ldb.Message))
+        msgs = self.ldb.parse_ldif("dn: foo=bar\n")
+        msg = msgs.next()
+        self.assertEquals("foo=bar", str(msg[1].dn))
+        self.assertTrue(isinstance(msg[1], ldb.Message))
 
     def test_canonical_string(self):
         x = ldb.Dn(self.ldb, "dc=foo,bar=bloe")



More information about the samba-cvs mailing list