summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett Regier <garrett.regier@riftio.com>2015-05-18 02:32:18 -0700
committerGarrett Regier <garrett.regier@riftio.com>2015-06-21 12:51:50 -0700
commit79cf1f70d247b5a4d33d1e60107e47903ca76055 (patch)
tree7fad10e6d5f453533a2f93449c074796b41a3254
parentd2faa619f5e204b75315a42fec99dd48fe7fb31c (diff)
downloadpygobject-79cf1f70d247b5a4d33d1e60107e47903ca76055.tar.gz
Explicitly check if an override exists instead of ImportError
If an override depended on another module and it did not exist then the raised ImportError was consumed and assumed to mean that the override did not exist. This makes it difficult to diagnose issues with overrides. This uses pkgutil.get_loader() as it is the easier way to determine if a module exists in both Python 2 and 3 and avoid deprecated functions. https://bugzilla.gnome.org/show_bug.cgi?id=749532
-rw-r--r--gi/overrides/__init__.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/gi/overrides/__init__.py b/gi/overrides/__init__.py
index bc915b28..942e6ede 100644
--- a/gi/overrides/__init__.py
+++ b/gi/overrides/__init__.py
@@ -2,6 +2,7 @@ import types
import warnings
import importlib
import sys
+from pkgutil import get_loader
from gi import PyGIDeprecationWarning
from gi._gi import CallableInfo
@@ -107,10 +108,22 @@ def load_overrides(introspection_module):
modules[namespace] = proxy
try:
+ override_package_name = 'gi.overrides.' + namespace
+
+ # http://bugs.python.org/issue14710
try:
- override_mod = importlib.import_module('gi.overrides.' + namespace)
- except ImportError:
+ override_loader = get_loader(override_package_name)
+
+ except AttributeError:
+ override_loader = None
+
+ # Avoid checking for an ImportError, an override might
+ # depend on a missing module thus causing an ImportError
+ if override_loader is None:
return introspection_module
+
+ override_mod = importlib.import_module(override_package_name)
+
finally:
del modules[namespace]
del sys.modules[module_key]