pygobject r932 - in trunk: . gio tests



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]