summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2020-10-19 21:14:21 (GMT)
committerGitHub <noreply@github.com>2020-10-19 21:14:21 (GMT)
commit96ddc58281d2b6b2258b1a628bccf252090d5611 (patch)
tree7147b420c790abefc96072a9ec311ffe9cddc509
parent95ad890a7b0341d8d2fde13f824bc24c65a8ece0 (diff)
downloadcpython-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.py9
-rw-r--r--Lib/test/test_importlib/fixtures.py9
-rw-r--r--Lib/test/test_importlib/test_main.py12
-rw-r--r--Misc/NEWS.d/next/Library/2020-10-19-16-53-19.bpo-42089.R1dthW.rst2
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.