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