Skip to content

Commit

Permalink
Bug 547354 – wrap a few memory stream methods
Browse files Browse the repository at this point in the history
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.

svn path=/trunk/; revision=944
  • Loading branch information
Paul Pogonyshev authored and Paul Pogonyshev committed Aug 11, 2008
1 parent 35092e6 commit b33d25d
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 1 deletion.
16 changes: 16 additions & 0 deletions ChangeLog
@@ -1,3 +1,19 @@
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_*'.
Expand Down
34 changes: 34 additions & 0 deletions gio/ginputstream.override
Expand Up @@ -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 */
3 changes: 2 additions & 1 deletion gio/gio.defs
Expand Up @@ -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")
Expand Down
25 changes: 25 additions & 0 deletions gio/goutputstream.override
Expand Up @@ -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 */
26 changes: 26 additions & 0 deletions tests/test_gio.py
Expand Up @@ -545,6 +545,20 @@ def callback(stream, result):
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")
Expand Down Expand Up @@ -614,6 +628,18 @@ def callback(stream, result):
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()
Expand Down

0 comments on commit b33d25d

Please sign in to comment.