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