From: Jason R. Coombs Date: Mon, 29 Jun 2020 20:59:22 +0000 (-0400) Subject: bpo-40924: Ensure importlib.resources.path returns an extant path (GH-20857) X-Git-Tag: v3.10.0a1~481 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2fb5f038f2a2e91a7293d62dfd5601e6eb500c55;p=thirdparty%2FPython%2Fcpython.git bpo-40924: Ensure importlib.resources.path returns an extant path (GH-20857) --- diff --git a/Lib/importlib/readers.py b/Lib/importlib/readers.py index fb49ebe2b164..6331e4daf431 100644 --- a/Lib/importlib/readers.py +++ b/Lib/importlib/readers.py @@ -7,11 +7,19 @@ class FileReader(abc.TraversableResources): def __init__(self, loader): self.path = pathlib.Path(loader.path).parent + def resource_path(self, resource): + """ + Return the file system path to prevent + `resources.path()` from creating a temporary + copy. + """ + return str(self.path.joinpath(resource)) + def files(self): return self.path -class ZipReader(FileReader): +class ZipReader(abc.TraversableResources): def __init__(self, loader, module): _, _, name = module.rpartition('.') prefix = loader.prefix.replace('\\', '/') + name + '/' @@ -28,3 +36,6 @@ class ZipReader(FileReader): # for non-existent paths. target = self.files().joinpath(path) return target.is_file() and target.exists() + + def files(self): + return self.path diff --git a/Lib/test/test_importlib/test_path.py b/Lib/test/test_importlib/test_path.py index c4e728541132..abf808655815 100644 --- a/Lib/test/test_importlib/test_path.py +++ b/Lib/test/test_importlib/test_path.py @@ -27,6 +27,15 @@ class PathTests: class PathDiskTests(PathTests, unittest.TestCase): data = data01 + def test_natural_path(self): + """ + Guarantee the internal implementation detail that + file-system-backed resources do not get the tempdir + treatment. + """ + with resources.path(self.data, 'utf-8.file') as path: + assert 'data' in str(path) + class PathZipTests(PathTests, util.ZipSetup, unittest.TestCase): def test_remove_in_context_manager(self): diff --git a/Misc/NEWS.d/next/Library/2020-06-13-12-04-50.bpo-40924.SM_luS.rst b/Misc/NEWS.d/next/Library/2020-06-13-12-04-50.bpo-40924.SM_luS.rst new file mode 100644 index 000000000000..4e4c6e88ac57 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-13-12-04-50.bpo-40924.SM_luS.rst @@ -0,0 +1,3 @@ +Ensure ``importlib.resources.path`` returns an extant path for the +SourceFileLoader's resource reader. Avoids the regression identified in +master while a long-term solution is devised.