From: Jason R. Coombs Date: Sat, 15 Jul 2023 14:15:38 +0000 (-0400) Subject: [3.11] gh-106752: Sync with zipp 3.16.2 (GH-106757) (#106778) X-Git-Tag: v3.11.5~200 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=465f5b09df5bb975ba6226712f2cf172b8421f0c;p=thirdparty%2FPython%2Fcpython.git [3.11] gh-106752: Sync with zipp 3.16.2 (GH-106757) (#106778) * gh-106752: Sync with zipp 3.16.2 (#106757) * gh-106752: Sync with zipp 3.16.2 * Add blurb (cherry picked from commit 22980dc7c9dcec4b74fea815542601ef582c230e) * [3.11] gh-106752: Sync with zipp 3.16.2 (GH-106757) * gh-106752: Sync with zipp 3.16.2 * Add blurb. (cherry picked from commit 22980dc7c9dcec4b74fea815542601ef582c230e) Co-authored-by: Jason R. Coombs * Remove Python 3.12 concerns from changelog. --- diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index bb2c24c8c50c..c8e0159765ec 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -3443,6 +3443,13 @@ with zipfile.ZipFile(io.BytesIO(), "w") as zf: e = root / '.hgrc' assert e.suffixes == [] + @pass_alpharep + def test_suffix_no_filename(self, alpharep): + alpharep.filename = None + root = zipfile.Path(alpharep) + assert root.joinpath('example').suffix == "" + assert root.joinpath('example').suffixes == [] + @pass_alpharep def test_stem(self, alpharep): """ @@ -3460,6 +3467,8 @@ with zipfile.ZipFile(io.BytesIO(), "w") as zf: d = root / "d" assert d.stem == "d" + assert (root / ".gitignore").stem == ".gitignore" + @pass_alpharep def test_root_parent(self, alpharep): root = zipfile.Path(alpharep) diff --git a/Lib/zipfile.py b/Lib/zipfile.py index 1dec6a8b97bc..6189db5e3e42 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -2420,21 +2420,24 @@ class Path: encoding, args, kwargs = _extract_text_encoding(*args, **kwargs) return io.TextIOWrapper(stream, encoding, *args, **kwargs) + def _base(self): + return pathlib.PurePosixPath(self.at or self.root.filename) + @property def name(self): - return pathlib.Path(self.at).name or self.filename.name + return self._base().name @property def suffix(self): - return pathlib.Path(self.at).suffix or self.filename.suffix + return self._base().suffix @property def suffixes(self): - return pathlib.Path(self.at).suffixes or self.filename.suffixes + return self._base().suffixes @property def stem(self): - return pathlib.Path(self.at).stem or self.filename.stem + return self._base().stem @property def filename(self): diff --git a/Misc/NEWS.d/next/Library/2023-07-14-16-54-13.gh-issue-106752.BT1Yxw.rst b/Misc/NEWS.d/next/Library/2023-07-14-16-54-13.gh-issue-106752.BT1Yxw.rst new file mode 100644 index 000000000000..d36c97da49d1 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-07-14-16-54-13.gh-issue-106752.BT1Yxw.rst @@ -0,0 +1,3 @@ +Fixed several bug in zipfile.Path in +``name``/``suffix``/``suffixes``/``stem`` operations when no filename is +present and the Path is not at the root of the zipfile.