pygobject r932 - in trunk: . gio tests
- From: paulp svn gnome org
- To: svn-commits-list gnome org
- Subject: pygobject r932 - in trunk: . gio tests
- Date: Sat, 9 Aug 2008 15:01:30 +0000 (UTC)
Author: paulp
Date: Sat Aug 9 15:01:29 2008
New Revision: 932
URL: http://svn.gnome.org/viewvc/pygobject?rev=932&view=rev
Log:
2008-08-09 Paul Pogonyshev <pogonyshev gmx net>
Bug 546591 â File.copy progress_callback does not work
* gio/gfile.override (file_progress_callback_marshal): Use
PyObject_CallFunction() instead of PyEval_CallFunction(). Use "K"
instead of "k" (the latter is not correct for 32-bit platforms).
Don't free 'notify' here.
(_wrap_g_file_copy): Free 'notify'.
(_wrap_g_file_move): Likewise.
* gio/gio.override (pygio_free_notify): New function.
(async_result_callback_marshal): Use it.
* tests/test_gio.py (TestFile.test_copy_progress.progress): New
test.
Modified:
trunk/ChangeLog
trunk/gio/gfile.override
trunk/gio/gio.override
trunk/tests/test_gio.py
Modified: trunk/gio/gfile.override
==============================================================================
--- trunk/gio/gfile.override (original)
+++ trunk/gio/gfile.override Sat Aug 9 15:01:29 2008
@@ -33,12 +33,12 @@
state = pyg_gil_state_ensure();
if (notify->data)
- ret = PyEval_CallFunction(notify->callback, "(kkO)",
- current_num_bytes,
- total_num_bytes,
- notify->data);
+ ret = PyObject_CallFunction(notify->callback, "(KKO)",
+ current_num_bytes,
+ total_num_bytes,
+ notify->data);
else
- ret = PyObject_CallFunction(notify->callback, "(kk)",
+ ret = PyObject_CallFunction(notify->callback, "(KK)",
current_num_bytes,
total_num_bytes);
@@ -49,11 +49,6 @@
}
Py_XDECREF(ret);
-
- Py_DECREF(notify->callback);
- Py_XDECREF(notify->data);
- g_slice_free(PyGIONotify, notify);
-
pyg_gil_state_release(state);
}
%%
@@ -577,6 +572,7 @@
notify,
&error);
+ pygio_free_notify(notify);
if (pyg_error_check(&error))
return NULL;
@@ -647,6 +643,7 @@
notify,
&error);
+ pygio_free_notify(notify);
if (pyg_error_check(&error))
return NULL;
Modified: trunk/gio/gio.override
==============================================================================
--- trunk/gio/gio.override (original)
+++ trunk/gio/gio.override Sat Aug 9 15:01:29 2008
@@ -45,6 +45,14 @@
}
static void
+pygio_free_notify(PyGIONotify *notify)
+{
+ Py_XDECREF(notify->callback);
+ Py_XDECREF(notify->data);
+ g_slice_free(PyGIONotify, notify);
+}
+
+static void
async_result_callback_marshal(GObject *source_object,
GAsyncResult *result,
PyGIONotify *notify)
@@ -71,10 +79,7 @@
}
Py_XDECREF(ret);
-
- Py_DECREF(notify->callback);
- Py_XDECREF(notify->data);
- g_slice_free(PyGIONotify, notify);
+ pygio_free_notify(notify);
pyg_gil_state_release(state);
}
Modified: trunk/tests/test_gio.py
==============================================================================
--- trunk/tests/test_gio.py (original)
+++ trunk/tests/test_gio.py Sat Aug 9 15:01:29 2008
@@ -295,6 +295,28 @@
finally:
os.unlink("copy.txt")
+ # See bug 546591.
+ def test_copy_progress(self):
+ source = gio.File('file.txt')
+ destination = gio.File('copy.txt')
+
+ def progress(current, total):
+ self.assert_(isinstance(current, long))
+ self.assert_(isinstance(total, long))
+ self.assert_(0 <= current <= total)
+
+ try:
+ retval = source.copy(destination,
+ flags=gio.FILE_COPY_OVERWRITE,
+ progress_callback=progress)
+ self.failUnless(retval)
+
+ self.failUnless(os.path.exists('copy.txt'))
+ self.assertEqual(open('file.txt').read(),
+ open('copy.txt').read())
+ finally:
+ os.unlink("copy.txt")
+
def testMove(self):
if os.path.exists('move.txt'):
os.unlink("move.txt")
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]