[pygobject] importer: raise ImportError in load_module() and not find_module(). See #213



commit 9c671606cc93a06e6db3ee5ee5f0862a7bfc21f9
Author: Christoph Reiter <reiter christoph gmail com>
Date:   Thu May 3 16:23:31 2018 +0200

    importer: raise ImportError in load_module() and not find_module(). See #213
    
    find_module() should either return None or a loader, but we raised ImportError
    there in case we already knew that the namespace was missing.
    
    Move that check to load_module() instead. While there shouldn't be any functional
    difference, raising in find_module() under Python 3 resulted in a chained
    exception with an unrelated error message printed first.

 gi/importer.py | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)
---
diff --git a/gi/importer.py b/gi/importer.py
index 4ed6196f..e14d47be 100644
--- a/gi/importer.py
+++ b/gi/importer.py
@@ -116,15 +116,7 @@ class DynamicImporter(object):
         if path != self.path:
             return
 
-        # is_registered() is faster than enumerate_versions() and
-        # in the common case of a namespace getting loaded before its
-        # dependencies, is_registered() returns True for all dependencies.
-        if repository.is_registered(namespace) or \
-                repository.enumerate_versions(namespace):
-            return self
-        else:
-            raise ImportError('cannot import name %s, '
-                              'introspection typelib not found' % namespace)
+        return self
 
     def load_module(self, fullname):
         if fullname in sys.modules:
@@ -132,6 +124,14 @@ class DynamicImporter(object):
 
         path, namespace = fullname.rsplit('.', 1)
 
+        # is_registered() is faster than enumerate_versions() and
+        # in the common case of a namespace getting loaded before its
+        # dependencies, is_registered() returns True for all dependencies.
+        if not repository.is_registered(namespace) and not \
+                repository.enumerate_versions(namespace):
+            raise ImportError('cannot import name %s, '
+                              'introspection typelib not found' % namespace)
+
         stacklevel = get_import_stacklevel(import_hook=True)
         with _check_require_version(namespace, stacklevel=stacklevel):
             try:


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