[Python-checkins] bpo-42089: Sync with current cpython branch of importlib_metadata (GH-22775)

Barry Warsaw webhook-mailer at python.org
Mon Oct 19 17:14:32 EDT 2020


https://github.com/python/cpython/commit/96ddc58281d2b6b2258b1a628bccf252090d5611
commit: 96ddc58281d2b6b2258b1a628bccf252090d5611
branch: master
author: Barry Warsaw <barry at python.org>
committer: GitHub <noreply at github.com>
date: 2020年10月19日T14:14:21-07:00
summary:
bpo-42089: Sync with current cpython branch of importlib_metadata (GH-22775)
~~The only differences are in the test files.~~
Automerge-Triggered-By: @jaraco
files:
A Misc/NEWS.d/next/Library/2020-10-19-16-53-19.bpo-42089.R1dthW.rst
M Lib/importlib/metadata.py
M Lib/test/test_importlib/fixtures.py
M Lib/test/test_importlib/test_main.py
diff --git a/Lib/importlib/metadata.py b/Lib/importlib/metadata.py
index ffa0cba45706d..302d61d505cb3 100644
--- a/Lib/importlib/metadata.py
+++ b/Lib/importlib/metadata.py
@@ -37,6 +37,15 @@
 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 985277f64615f..8fa92909d583e 100644
--- a/Lib/test/test_importlib/fixtures.py
+++ b/Lib/test/test_importlib/fixtures.py
@@ -6,6 +6,8 @@
 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 91e501a2eb7cd..a26bab6361548 100644
--- a/Lib/test/test_importlib/test_main.py
+++ b/Lib/test/test_importlib/test_main.py
@@ -32,6 +32,18 @@ def test_for_name_does_not_exist(self):
 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 0000000000000..3f3affd1a7df7
--- /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.


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /