Author: Antonio Cuni <[email protected]>
Branch: dummy-importlib2
Changeset: r98342:3c435619e333
Date: 2019-12-20 01:36 +0100
http://bitbucket.org/pypy/pypy/changeset/3c435619e333/

Log:    add a nice error message in case something goes wrong. Add tests to
        check that we are actually using the importlib module which we
        expect

diff --git a/pypy/module/_dummy_importlib/interp_import.py 
b/pypy/module/_dummy_importlib/interp_import.py
--- a/pypy/module/_dummy_importlib/interp_import.py
+++ b/pypy/module/_dummy_importlib/interp_import.py
@@ -22,6 +22,32 @@
 from rpython.rlib.objectmodel import we_are_translated, specialize
 from pypy.module.sys.version import PYPY_VERSION
 
+
+@unwrap_spec(name='text0', level=int)
+def dummy_importhook(space, name, w_globals=None,
+                     w_locals=None, w_fromlist=None, level=-1):
+    try:
+        return importhook(space, name, w_globals, w_locals, w_fromlist, level)
+    except OperationError as e:
+        if not e.match(space, space.w_ImportError):
+            raise
+        w_value = e.get_w_value(space)
+        message = space.text_w(space.str(w_value))
+        new_message = """%s
+
+        You are using _dummy_importlib: this is not supposed to be a
+        fully-compatible importing library, but it contains just enough logic 
to
+        run most of the tests.  If you are experiencing problems with it, 
consider
+        adding more logic, or to switch to the fully-working _frozen_importlib 
by
+        adding this line to your AppTest class:
+
+            spaceconfig = {'usemodules': ['_frozen_importlib']}
+        """ % message
+        raise OperationError(space.w_ImportError, space.newtext(new_message))
+
+
+# the following code has been copied/pasted/adapted from default
+
 _WIN32 = sys.platform == 'win32'
 
 SEARCH_ERROR = 0
diff --git a/pypy/module/_dummy_importlib/moduledef.py 
b/pypy/module/_dummy_importlib/moduledef.py
--- a/pypy/module/_dummy_importlib/moduledef.py
+++ b/pypy/module/_dummy_importlib/moduledef.py
@@ -13,7 +13,7 @@
         """NOT_RPYTHON"""
         super(Module, self).install()
         self.w_import = self.space.wrap(
-            interp2app(interp_import.importhook, app_name='__dummy_import__'))
+            interp2app(interp_import.dummy_importhook, 
app_name='__dummy_import__'))
 
     def startup(self, space):
         """Copy our __import__ to builtins."""
diff --git a/pypy/module/_dummy_importlib/test/test__dummy_importlib.py 
b/pypy/module/_dummy_importlib/test/test__dummy_importlib.py
--- a/pypy/module/_dummy_importlib/test/test__dummy_importlib.py
+++ b/pypy/module/_dummy_importlib/test/test__dummy_importlib.py
@@ -12,6 +12,9 @@
 
 class AppTestDummyImportlib:
 
+    def test_no_frozen_importlib(self):
+        raises(ImportError, "import _frozen_importlib")
+
     def test_import_builtin(self):
         import sys
         import operator
@@ -21,3 +24,21 @@
     def test_import_from_sys_path(self):
         import keyword # this is a module from lib-python
         assert keyword.iskeyword('def')
+
+    def test_error_message_on_ImportError(self):
+        try:
+            import i_dont_exist
+        except ImportError as e:
+            message = str(e)
+            assert 'i_dont_exist' in message
+            assert 'spaceconfig' in message
+
+
+class AppTestNoDummyImportlib:
+    spaceconfig = {'usemodules': ['_frozen_importlib']}
+
+    def test_no_dummy_importlib(self):
+        try:
+            import _dummy_importlib
+        except ImportError as e:
+            assert 'spaceconfig' not in str(e)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to