diff options
author | Barry Warsaw <barry@python.org> | 2020-10-19 21:14:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-19 21:14:21 (GMT) |
commit | 96ddc58281d2b6b2258b1a628bccf252090d5611 (patch) | |
tree | 7147b420c790abefc96072a9ec311ffe9cddc509 | |
parent | 95ad890a7b0341d8d2fde13f824bc24c65a8ece0 (diff) | |
download | cpython-96ddc58281d2b6b2258b1a628bccf252090d5611.zip cpython-96ddc58281d2b6b2258b1a628bccf252090d5611.tar.gz cpython-96ddc58281d2b6b2258b1a628bccf252090d5611.tar.bz2 |
bpo-42089: Sync with current cpython branch of importlib_metadata (GH-22775)
~~The only differences are in the test files.~~
Automerge-Triggered-By: @jaraco
-rw-r--r-- | Lib/importlib/metadata.py | 9 | ||||
-rw-r--r-- | Lib/test/test_importlib/fixtures.py | 9 | ||||
-rw-r--r-- | Lib/test/test_importlib/test_main.py | 12 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-10-19-16-53-19.bpo-42089.R1dthW.rst | 2 |
4 files changed, 26 insertions, 6 deletions
diff --git a/Lib/importlib/metadata.py b/Lib/importlib/metadata.py index ffa0cba..302d61d 100644 --- a/Lib/importlib/metadata.py +++ b/Lib/importlib/metadata.py @@ -37,6 +37,15 @@ __all__ = [ class PackageNotFoundError(ModuleNotFoundError): """The package was not found.""" + def __str__(self): + tmpl = "No package metadata was found for {self.name}" + return tmpl.format(**locals()) + + @property + def name(self): + name, = self.args + return name + class EntryPoint( collections.namedtuple('EntryPointBase', 'name value group')): diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py index 985277f..8fa9290 100644 --- a/Lib/test/test_importlib/fixtures.py +++ b/Lib/test/test_importlib/fixtures.py @@ -6,6 +6,8 @@ import tempfile import textwrap import contextlib +from test.support.os_helper import FS_NONASCII + @contextlib.contextmanager def tempdir(): @@ -212,12 +214,7 @@ def build_files(file_defs, prefix=pathlib.Path()): class FileBuilder: def unicode_filename(self): - try: - from test.support import os_helper - except ImportError: - # outside CPython, hard-code a unicode snowman - return '☃' - return os_helper.FS_NONASCII or \ + return FS_NONASCII or \ self.skip("File system does not support non-ascii.") diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py index 91e501a..a26bab6 100644 --- a/Lib/test/test_importlib/test_main.py +++ b/Lib/test/test_importlib/test_main.py @@ -32,6 +32,18 @@ class BasicTests(fixtures.DistInfoPkg, unittest.TestCase): with self.assertRaises(PackageNotFoundError): Distribution.from_name('does-not-exist') + def test_package_not_found_mentions_metadata(self): + """ + When a package is not found, that could indicate that the + packgae is not installed or that it is installed without + metadata. Ensure the exception mentions metadata to help + guide users toward the cause. See #124. + """ + with self.assertRaises(PackageNotFoundError) as ctx: + Distribution.from_name('does-not-exist') + + assert "metadata" in str(ctx.exception) + def test_new_style_classes(self): self.assertIsInstance(Distribution, type) diff --git a/Misc/NEWS.d/next/Library/2020-10-19-16-53-19.bpo-42089.R1dthW.rst b/Misc/NEWS.d/next/Library/2020-10-19-16-53-19.bpo-42089.R1dthW.rst new file mode 100644 index 0000000..3f3affd --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-10-19-16-53-19.bpo-42089.R1dthW.rst @@ -0,0 +1,2 @@ +In ``importlib.metadata.PackageNotFoundError``, make reference to the +package metadata being missing to improve the user experience. |