[pygobject/gsoc2009: 104/160] Refactor _wrap_g_irepository_require
- From: Simon van der Linden <svdlinden src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [pygobject/gsoc2009: 104/160] Refactor _wrap_g_irepository_require
- Date: Fri, 14 Aug 2009 21:32:29 +0000 (UTC)
commit 9f8625a58037d44c8dd3d6e5980c54e8a62b062c
Author: Simon van der Linden <svdlinden src gnome org>
Date: Mon Aug 3 23:05:45 2009 +0200
Refactor _wrap_g_irepository_require
gi/importer.py | 8 +++++-
gi/pygirepository.c | 57 ++++++++++++++++++++++++++-------------------------
2 files changed, 35 insertions(+), 30 deletions(-)
---
diff --git a/gi/importer.py b/gi/importer.py
index dd7f105..812dced 100644
--- a/gi/importer.py
+++ b/gi/importer.py
@@ -23,7 +23,7 @@
import sys
import gobject
-from ._gi import Repository
+from ._gi import Repository, RepositoryError
from .module import DynamicModule
@@ -44,7 +44,11 @@ class DynamicImporter(object):
path, namespace = fullname.rsplit('.', 1)
if path != self.path:
return
- if repository.require(namespace):
+ try:
+ repository.require(namespace)
+ except RepositoryError:
+ pass
+ else:
return self
def load_module(self, fullname):
diff --git a/gi/pygirepository.c b/gi/pygirepository.c
index 06763d4..dd0ae82 100644
--- a/gi/pygirepository.c
+++ b/gi/pygirepository.c
@@ -23,6 +23,8 @@
#include "pygi-private.h"
+PyObject *PyGIRepositoryError;
+
static PyMethodDef _PyGIRepository_methods[];
PyTypeObject PyGIRepository_Type = {
@@ -78,39 +80,33 @@ _wrap_g_irepository_get_default(PyObject *self)
static PyObject *
_wrap_g_irepository_require(PyGIRepository *self, PyObject *args, PyObject *kwargs)
{
- static char *kwlist[] = { "namespace", "lazy", NULL };
- gchar *namespace;
- PyObject *lazy_obj = NULL;
- int flags = 0;
- GTypelib *ret;
- PyObject *pyret;
- GError *error = NULL;
+ static char *kwlist[] = { "namespace", "version", "lazy", NULL };
- if (!PyArg_ParseTupleAndKeywords(args, kwargs,
- "s|O:Repository.require",
- kwlist, &namespace, &lazy_obj))
- return NULL;
+ const char *namespace_;
+ const char *version = NULL;
+ PyObject *lazy = NULL;
+ GIRepositoryLoadFlags flags = 0;
+ GTypelib *typelib;
+ GError *error;
- if (lazy_obj != NULL && PyObject_IsTrue(lazy_obj))
- flags |= G_IREPOSITORY_LOAD_FLAG_LAZY;
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|sO:Repository.require",
+ kwlist, &namespace_, &version, &lazy)) {
+ return NULL;
+ }
- /* TODO - handle versioning in some way, need to figure out what
- * this looks like Python side.
- */
- ret = g_irepository_require(self->repository, namespace, NULL, flags, &error);
+ if (lazy != NULL && PyObject_IsTrue(lazy)) {
+ flags |= G_IREPOSITORY_LOAD_FLAG_LAZY;
+ }
- if (ret == NULL) {
-#if 0
- g_print ("ERROR: %s (FIXME: raise GError exception)\n",
- error->message);
- g_clear_error (&error);
-#endif
- Py_INCREF(Py_None);
- return Py_None;
+ error = NULL;
+ typelib = g_irepository_require(self->repository, namespace_, version, flags, &error);
+ if (error != NULL) {
+ PyErr_SetString(PyGIRepositoryError, error->message);
+ g_error_free(error);
+ return NULL;
}
- pyret = PyBool_FromLong(ret != NULL);
- Py_INCREF(pyret);
- return pyret;
+
+ Py_RETURN_NONE;
}
static PyObject *
@@ -261,5 +257,10 @@ pygi_repository_register_types(PyObject *m)
if (PyModule_AddObject(m, "Repository", (PyObject *)&PyGIRepository_Type)) {
return;
}
+
+ PyGIRepositoryError = PyErr_NewException("gi.RepositoryError", NULL, NULL);
+ if (PyModule_AddObject(m, "RepositoryError", PyGIRepositoryError)) {
+ return;
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]