summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Pogonyshev <pogonyshev@gmx.net>2008-08-10 15:53:51 +0000
committerPaul Pogonyshev <paulp@src.gnome.org>2008-08-10 15:53:51 +0000
commit41194973be3d0974521c86f18affa4e53904f10e (patch)
tree2e81b3506428a0a50def1969e6ecac43562a637a
parent586416907139045a8a55b4577270bad91960bca8 (diff)
downloadpygobject-41194973be3d0974521c86f18affa4e53904f10e.tar.gz
pygobject-41194973be3d0974521c86f18affa4e53904f10e.tar.xz
pygobject-41194973be3d0974521c86f18affa4e53904f10e.zip
Bug 546120 – make gio.File more Pythonic
2008-08-10 Paul Pogonyshev <pogonyshev@gmx.net> Bug 546120 – make gio.File more Pythonic * gio/gfile.override (_wrap_g_file_tp_richcompare) (_wrap_g_file_tp_hash, _wrap_g_file_tp_repr): New functions. * tests/test_gio.py (TestFile.test_eq, TestFile.test_hash): New tests. svn path=/trunk/; revision=939
-rw-r--r--ChangeLog10
-rw-r--r--gio/gfile.override58
-rw-r--r--tests/test_gio.py11
3 files changed, 78 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index e95a9ee..1cc6502 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2008-08-10 Paul Pogonyshev <pogonyshev@gmx.net>
+ Bug 546120 – make gio.File more Pythonic
+
+ * gio/gfile.override (_wrap_g_file_tp_richcompare)
+ (_wrap_g_file_tp_hash, _wrap_g_file_tp_repr): New functions.
+
+ * tests/test_gio.py (TestFile.test_eq, TestFile.test_hash): New
+ tests.
+
+2008-08-10 Paul Pogonyshev <pogonyshev@gmx.net>
+
Bug 547104 – improve runtime type wrapper creation
* gobject/pygobject.c (pygobject_new_with_interfaces): Use new
diff --git a/gio/gfile.override b/gio/gfile.override
index 3d524a6..ffcfad0 100644
--- a/gio/gfile.override
+++ b/gio/gfile.override
@@ -1123,6 +1123,64 @@ _wrap_g_file_replace_contents_async(PyGObject *self, PyObject *args, PyObject *k
Py_INCREF(Py_None);
return Py_None;
}
+%%
+override-slot GFile.tp_richcompare
+static PyObject *
+_wrap_g_file_tp_richcompare(PyGObject *self, PyGObject *other, int op)
+{
+ PyObject *result;
+
+ if (PyObject_TypeCheck(self, &PyGFile_Type)
+ && PyObject_TypeCheck(other, &PyGFile_Type)) {
+ GFile *file1 = G_FILE(self->obj);
+ GFile *file2 = G_FILE(other->obj);
+
+ switch (op) {
+ case Py_EQ:
+ result = (g_file_equal(file1, file2)
+ ? Py_True : Py_False);
+ break;
+ case Py_NE:
+ result = (!g_file_equal(file1, file2)
+ ? Py_True : Py_False);
+ break;
+ default:
+ result = Py_NotImplemented;
+ }
+ }
+ else
+ result = Py_NotImplemented;
+
+ Py_INCREF(result);
+ return result;
+}
+%%
+override-slot GFile.tp_hash
+static long
+_wrap_g_file_tp_hash(PyGObject *self)
+{
+ return g_file_hash(G_FILE(self->obj));
+}
+%%
+override-slot GFile.tp_repr
+static PyObject *
+_wrap_g_file_tp_repr(PyGObject *self)
+{
+ char *uri = g_file_get_uri(G_FILE(self->obj));
+ gchar *representation;
+ PyObject *result;
+
+ if (uri) {
+ representation = g_strdup_printf("<%s at %p: %s>", self->ob_type->tp_name, self, uri);
+ g_free(uri);
+ }
+ else
+ representation = g_strdup_printf("<%s at %p: UNKNOWN URI>", self->ob_type->tp_name, self);
+
+ result = PyString_FromString(representation);
+ g_free(representation);
+ return result;
+}
/* GFile.eject_mountable */
/* GFile.find_enclosing_mount_async */
diff --git a/tests/test_gio.py b/tests/test_gio.py
index 8244852..d5b92b3 100644
--- a/tests/test_gio.py
+++ b/tests/test_gio.py
@@ -413,7 +413,16 @@ class TestFile(unittest.TestCase):
loop = glib.MainLoop()
loop.run()
-
+ def test_eq(self):
+ self.assertEqual(gio.File('foo'),
+ gio.File('foo'))
+ self.assertNotEqual(gio.File('foo'),
+ gio.File('bar'))
+
+ def test_hash(self):
+ self.assertEquals(hash(gio.File('foo')),
+ hash(gio.File('foo')))
+
class TestGFileEnumerator(unittest.TestCase):
def setUp(self):