summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog16
-rw-r--r--gio/ginputstream.override34
-rw-r--r--gio/gio.defs3
-rw-r--r--gio/goutputstream.override25
-rw-r--r--tests/test_gio.py26
5 files changed, 103 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 190a956b..5b2f722d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
2008-08-12 Paul Pogonyshev <pogonyshev@gmx.net>
+ Bug 547354 – wrap a few memory stream methods
+
+ * gio/ginputstream.override (_wrap_g_memory_input_stream_add_data):
+ New function.
+
+ * gio/gio.defs (gio.MemoryOutputStream.get_contents): Rename from
+ get_data() to avoid name clash.
+
+ * gio/goutputstream.override (_wrap_g_memory_output_stream_new)
+ (_wrap_g_memory_output_stream_get_data): New functions.
+
+ * tests/test_gio.py (TestMemoryInputStream)
+ (TestMemoryOutputStream): New test cases.
+
+2008-08-12 Paul Pogonyshev <pogonyshev@gmx.net>
+
* gio/gio.override: Ignore `g_io_module*' and `g_io_scheduler_*'.
2008-08-11 Paul Pogonyshev <pogonyshev@gmx.net>
diff --git a/gio/ginputstream.override b/gio/ginputstream.override
index 267ae019..e5791f96 100644
--- a/gio/ginputstream.override
+++ b/gio/ginputstream.override
@@ -285,5 +285,39 @@ _wrap_g_input_stream_close_async(PyGObject *self,
Py_INCREF(Py_None);
return Py_None;
}
+%%
+override g_memory_input_stream_add_data kwargs
+static PyObject *
+_wrap_g_memory_input_stream_add_data(PyGObject *self,
+ PyObject *args,
+ PyObject *kwargs)
+{
+ static char *kwlist[] = { "data", NULL };
+ PyObject *data;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:gio.MemoryInputStream.add_data",
+ kwlist, &data))
+ return NULL;
+
+ if (data != Py_None) {
+ char *copy;
+ int length;
+
+ if (!PyString_Check(data)) {
+ PyErr_SetString(PyExc_TypeError, "data must be a string or None");
+ return NULL;
+ }
+
+ length = PyString_Size(data);
+ copy = g_malloc(length);
+ memcpy(copy, PyString_AsString(data), length);
+
+ g_memory_input_stream_add_data(G_MEMORY_INPUT_STREAM(self->obj),
+ copy, length, (GDestroyNotify) g_free);
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
/* GInputStream.read_all: No ArgType for void* */
/* GInputStream.skip_async: No ArgType for GAsyncReadyCallback */
diff --git a/gio/gio.defs b/gio/gio.defs
index 434b7486..aa5c8b01 100644
--- a/gio/gio.defs
+++ b/gio/gio.defs
@@ -3667,7 +3667,8 @@
)
)
-(define-method get_data
+;; Note: name clash with gobject.GObject.get_data; renamed.
+(define-method get_contents
(of-object "GMemoryOutputStream")
(c-name "g_memory_output_stream_get_data")
(return-type "gpointer")
diff --git a/gio/goutputstream.override b/gio/goutputstream.override
index 3bcf3ce8..03a5da7f 100644
--- a/gio/goutputstream.override
+++ b/gio/goutputstream.override
@@ -156,6 +156,31 @@ _wrap_g_output_stream_close_async(PyGObject *self,
Py_INCREF(Py_None);
return Py_None;
}
+%%
+override g_memory_output_stream_new noargs
+static int
+_wrap_g_memory_output_stream_new(PyGObject *self)
+{
+ self->obj = (GObject *)g_memory_output_stream_new(NULL, 0, g_realloc, g_free);
+
+ if (!self->obj) {
+ PyErr_SetString(PyExc_RuntimeError, "could not create gio.MemoryOutputStream object");
+ return -1;
+ }
+
+ pygobject_register_wrapper((PyObject *)self);
+ return 0;
+}
+%%
+override g_memory_output_stream_get_data noargs
+static PyObject *
+_wrap_g_memory_output_stream_get_data(PyGObject *self)
+{
+ GMemoryOutputStream *stream = G_MEMORY_OUTPUT_STREAM(self->obj);
+ return PyString_FromStringAndSize(g_memory_output_stream_get_data(stream),
+ g_seekable_tell(G_SEEKABLE(stream)));
+}
+
/* GOutputStream.write_all: No ArgType for const-void* */
/* GOutputStream.splice_async: No ArgType for GAsyncReadyCallback */
/* GOutputStream.flush_async: No ArgType for GAsyncReadyCallback */
diff --git a/tests/test_gio.py b/tests/test_gio.py
index 7500e58b..2fb5c3a2 100644
--- a/tests/test_gio.py
+++ b/tests/test_gio.py
@@ -545,6 +545,20 @@ class TestInputStream(unittest.TestCase):
loop.run()
+class TestMemoryInputStream(unittest.TestCase):
+ def setUp(self):
+ self.stream = gio.MemoryInputStream()
+
+ def test_add_data(self):
+ self.stream.add_data('foobar')
+ self.assertEquals('foobar', self.stream.read())
+
+ self.stream.add_data('ham ')
+ self.stream.add_data(None)
+ self.stream.add_data('spam')
+ self.assertEquals('ham spam', self.stream.read())
+
+
class TestOutputStream(unittest.TestCase):
def setUp(self):
self._f = open("outputstream.txt", "w")
@@ -614,6 +628,18 @@ class TestOutputStream(unittest.TestCase):
loop.run()
+class TestMemoryOutputStream(unittest.TestCase):
+ def setUp(self):
+ self.stream = gio.MemoryOutputStream()
+
+ def test_get_contents(self):
+ self.stream.write('foobar')
+ self.assertEquals('foobar', self.stream.get_contents())
+
+ self.stream.write('baz')
+ self.assertEquals('foobarbaz', self.stream.get_contents())
+
+
class TestVolumeMonitor(unittest.TestCase):
def setUp(self):
self.monitor = gio.volume_monitor_get()