[pygobject] Clobber GLib.Error with custom implementation



commit 4c2e6914bf0277ebc3a6a4426f33a1b378a04b00
Author: Simon Feltman <sfeltman src gnome org>
Date:   Sun May 4 23:19:30 2014 -0700

    Clobber GLib.Error with custom implementation
    
    Clobber the introspection GLib.Error class with the custom Python
    implementation found in gi._error.GError. Update references to GLib.GError
    to use GLib.Error.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=712519

 gi/_error.py         |    3 ++-
 gi/overrides/GLib.py |    9 ++++++---
 gi/pygi-error.c      |   10 +++++-----
 tests/test_error.py  |   24 ++++++++++++------------
 4 files changed, 25 insertions(+), 21 deletions(-)
---
diff --git a/gi/_error.py b/gi/_error.py
index 34a5317..6b684ce 100644
--- a/gi/_error.py
+++ b/gi/_error.py
@@ -38,7 +38,8 @@ class GError(RuntimeError):
         return "%s: %s (%d)" % (self.domain, self.message, self.code)
 
     def __repr__(self):
-        return "GLib.GError('%s', '%s', %d)" % (self.message, self.domain, self.code)
+        return "%s.%s('%s', '%s', %d)" % (GError.__module__, GError.__name__,
+                                          self.message, self.domain, self.code)
 
     def copy(self):
         return GError(self.message, self.domain, self.code)
diff --git a/gi/overrides/GLib.py b/gi/overrides/GLib.py
index d25d374..214d507 100644
--- a/gi/overrides/GLib.py
+++ b/gi/overrides/GLib.py
@@ -42,6 +42,7 @@ __all__.append('option')
 from gi._gi import _glib
 from gi._error import GError
 
+Error = GError
 OptionContext = _glib.OptionContext
 OptionGroup = _glib.OptionGroup
 Pid = _glib.Pid
@@ -70,11 +71,13 @@ def gerror_new_literal(domain, message, code):
 
 
 # Monkey patch methods that rely on GLib introspection to be loaded at runtime.
-GError.matches = gerror_matches
-GError.new_literal = staticmethod(gerror_new_literal)
+Error.__name__ = 'Error'
+Error.__module__ = 'GLib'
+Error.matches = gerror_matches
+Error.new_literal = staticmethod(gerror_new_literal)
 
 
-__all__ += ['GError', 'OptionContext', 'OptionGroup', 'Pid',
+__all__ += ['GError', 'Error', 'OptionContext', 'OptionGroup', 'Pid',
             'spawn_async', 'threads_init']
 
 
diff --git a/gi/pygi-error.c b/gi/pygi-error.c
index 73b7fbe..2e9150f 100644
--- a/gi/pygi-error.c
+++ b/gi/pygi-error.c
@@ -146,14 +146,14 @@ pygi_gerror_exception_check (GError **error)
 
     py_message = PyObject_GetAttrString(value, "message");
     if (!py_message || !PYGLIB_PyUnicode_Check(py_message)) {
-        bad_gerror_message = "gi._glib.GError instances must have a 'message' string attribute";
+        bad_gerror_message = "GLib.Error instances must have a 'message' string attribute";
         Py_XDECREF(py_message);
         goto bad_gerror;
     }
 
     py_domain = PyObject_GetAttrString(value, "domain");
     if (!py_domain || !PYGLIB_PyUnicode_Check(py_domain)) {
-        bad_gerror_message = "gi._glib.GError instances must have a 'domain' string attribute";
+        bad_gerror_message = "GLib.Error instances must have a 'domain' string attribute";
         Py_DECREF(py_message);
         Py_XDECREF(py_domain);
         goto bad_gerror;
@@ -161,7 +161,7 @@ pygi_gerror_exception_check (GError **error)
 
     py_code = PyObject_GetAttrString(value, "code");
     if (!py_code || !PYGLIB_PyLong_Check(py_code)) {
-        bad_gerror_message = "gi._glib.GError instances must have a 'code' int attribute";
+        bad_gerror_message = "GLib.Error instances must have a 'code' int attribute";
         Py_DECREF(py_message);
         Py_DECREF(py_domain);
         Py_XDECREF(py_code);
@@ -178,7 +178,7 @@ pygi_gerror_exception_check (GError **error)
 
 bad_gerror:
     Py_DECREF(value);
-    g_set_error(error, g_quark_from_static_string("pyglib"), 0, "%s", bad_gerror_message);
+    g_set_error(error, g_quark_from_static_string("pygi"), 0, "%s", bad_gerror_message);
     PyErr_SetString(PyExc_ValueError, bad_gerror_message);
     PyErr_Print();
     return -2;
@@ -189,7 +189,7 @@ bad_gerror:
  * @name: name of the exception
  * @error_domain: error domain
  *
- * Registers a new glib.GError exception subclass called #name for
+ * Registers a new GLib.Error exception subclass called #name for
  * a specific #domain. This exception will be raised when a GError
  * of the same domain is passed in to pygi_error_check().
  *
diff --git a/tests/test_error.py b/tests/test_error.py
index a509b8a..f392248 100644
--- a/tests/test_error.py
+++ b/tests/test_error.py
@@ -31,14 +31,14 @@ from gi.repository import GIMarshallingTests
 
 class TestType(unittest.TestCase):
     def test_attributes(self):
-        e = GLib.GError('test message', 'mydomain', 42)
+        e = GLib.Error('test message', 'mydomain', 42)
         self.assertEqual(e.message, 'test message')
         self.assertEqual(e.domain, 'mydomain')
         self.assertEqual(e.code, 42)
 
     def test_new_literal(self):
         mydomain = GLib.quark_from_string('mydomain')
-        e = GLib.GError.new_literal(mydomain, 'test message', 42)
+        e = GLib.Error.new_literal(mydomain, 'test message', 42)
         self.assertEqual(e.message, 'test message')
         self.assertEqual(e.domain, 'mydomain')
         self.assertEqual(e.code, 42)
@@ -46,23 +46,23 @@ class TestType(unittest.TestCase):
     def test_matches(self):
         mydomain = GLib.quark_from_string('mydomain')
         notmydomain = GLib.quark_from_string('notmydomain')
-        e = GLib.GError('test message', 'mydomain', 42)
+        e = GLib.Error('test message', 'mydomain', 42)
         self.assertTrue(e.matches(mydomain, 42))
         self.assertFalse(e.matches(notmydomain, 42))
         self.assertFalse(e.matches(mydomain, 40))
 
     def test_str(self):
-        e = GLib.GError('test message', 'mydomain', 42)
+        e = GLib.Error('test message', 'mydomain', 42)
         self.assertEqual(str(e),
                          'mydomain: test message (42)')
 
     def test_repr(self):
-        e = GLib.GError('test message', 'mydomain', 42)
+        e = GLib.Error('test message', 'mydomain', 42)
         self.assertEqual(repr(e),
-                         "GLib.GError('test message', 'mydomain', 42)")
+                         "GLib.Error('test message', 'mydomain', 42)")
 
     def test_inheritance(self):
-        self.assertTrue(issubclass(GLib.GError, RuntimeError))
+        self.assertTrue(issubclass(GLib.Error, RuntimeError))
 
 
 class TestMarshalling(unittest.TestCase):
@@ -72,13 +72,13 @@ class TestMarshalling(unittest.TestCase):
         # set, invoke would attempt to free the C array as if it were a GArray.
         # This crash is only for C arrays. It does not happen for C functions which
         # take in GArrays. See https://bugzilla.gnome.org/show_bug.cgi?id=642708
-        self.assertRaises(GLib.GError, GIMarshallingTests.gerror_array_in, [1, 2, 3])
+        self.assertRaises(GLib.Error, GIMarshallingTests.gerror_array_in, [1, 2, 3])
 
     def test_out(self):
         # See https://bugzilla.gnome.org/show_bug.cgi?id=666098
         error, debug = GIMarshallingTests.gerror_out()
 
-        self.assertIsInstance(error, GLib.GError)
+        self.assertIsInstance(error, GLib.Error)
         self.assertEqual(error.domain, GIMarshallingTests.CONSTANT_GERROR_DOMAIN)
         self.assertEqual(error.code, GIMarshallingTests.CONSTANT_GERROR_CODE)
         self.assertEqual(error.message, GIMarshallingTests.CONSTANT_GERROR_MESSAGE)
@@ -88,7 +88,7 @@ class TestMarshalling(unittest.TestCase):
         # See https://bugzilla.gnome.org/show_bug.cgi?id=666098
         error, debug = GIMarshallingTests.gerror_out_transfer_none()
 
-        self.assertIsInstance(error, GLib.GError)
+        self.assertIsInstance(error, GLib.Error)
         self.assertEqual(error.domain, GIMarshallingTests.CONSTANT_GERROR_DOMAIN)
         self.assertEqual(error.code, GIMarshallingTests.CONSTANT_GERROR_CODE)
         self.assertEqual(error.message, GIMarshallingTests.CONSTANT_GERROR_MESSAGE)
@@ -98,13 +98,13 @@ class TestMarshalling(unittest.TestCase):
         # See https://bugzilla.gnome.org/show_bug.cgi?id=666098
         error = GIMarshallingTests.gerror_return()
 
-        self.assertIsInstance(error, GLib.GError)
+        self.assertIsInstance(error, GLib.Error)
         self.assertEqual(error.domain, GIMarshallingTests.CONSTANT_GERROR_DOMAIN)
         self.assertEqual(error.code, GIMarshallingTests.CONSTANT_GERROR_CODE)
         self.assertEqual(error.message, GIMarshallingTests.CONSTANT_GERROR_MESSAGE)
 
     def test_exception(self):
-        self.assertRaises(GLib.GError, GIMarshallingTests.gerror)
+        self.assertRaises(GLib.Error, GIMarshallingTests.gerror)
         try:
             GIMarshallingTests.gerror()
         except Exception:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]