https://github.com/python/cpython/commit/f0d48b2bea1d17a7144087ef6ec01f28aae35e7b
commit: f0d48b2bea1d17a7144087ef6ec01f28aae35e7b
branch: 3.13
author: Miss Islington (bot) <31488909+miss-isling...@users.noreply.github.com>
committer: jaraco <jar...@jaraco.com>
date: 2025-06-08T17:56:35-04:00
summary:

[3.13] gh-135276: Refresh `zipfile.Path` from zipp 3.23 (GH-135277) (#135279)

* gh-135276: Refresh `zipfile.Path` from zipp 3.23 (GH-135277)

Apply changes from zipp 3.23
(cherry picked from commit 8d6eb0c26276c4013346622580072908d46d2341)

Co-authored-by: Jason R. Coombs <jar...@jaraco.com>

* Removed features slated for Python 3.15 only.

---------

Co-authored-by: Jason R. Coombs <jar...@jaraco.com>

files:
A Misc/NEWS.d/next/Library/2025-06-08-14-50-34.gh-issue-135276.ZLUhV1.rst
M Lib/test/test_zipfile/_path/_test_params.py
M Lib/test/test_zipfile/_path/test_complexity.py
M Lib/test/test_zipfile/_path/test_path.py
M Lib/test/test_zipfile/_path/write-alpharep.py
M Lib/zipfile/_path/__init__.py
M Lib/zipfile/_path/glob.py

diff --git a/Lib/test/test_zipfile/_path/_test_params.py 
b/Lib/test/test_zipfile/_path/_test_params.py
index bc95b4ebf4a168..00a9eaf2f99c1a 100644
--- a/Lib/test/test_zipfile/_path/_test_params.py
+++ b/Lib/test/test_zipfile/_path/_test_params.py
@@ -1,5 +1,5 @@
-import types
 import functools
+import types
 
 from ._itertools import always_iterable
 
diff --git a/Lib/test/test_zipfile/_path/test_complexity.py 
b/Lib/test/test_zipfile/_path/test_complexity.py
index b505dd7c376462..7c108fc6ab8191 100644
--- a/Lib/test/test_zipfile/_path/test_complexity.py
+++ b/Lib/test/test_zipfile/_path/test_complexity.py
@@ -8,10 +8,8 @@
 
 from ._functools import compose
 from ._itertools import consume
-
 from ._support import import_or_skip
 
-
 big_o = import_or_skip('big_o')
 pytest = import_or_skip('pytest')
 
diff --git a/Lib/test/test_zipfile/_path/test_path.py 
b/Lib/test/test_zipfile/_path/test_path.py
index aba515536f0c1a..f46b676e1ef2d8 100644
--- a/Lib/test/test_zipfile/_path/test_path.py
+++ b/Lib/test/test_zipfile/_path/test_path.py
@@ -1,6 +1,6 @@
+import contextlib
 import io
 import itertools
-import contextlib
 import pathlib
 import pickle
 import stat
@@ -10,12 +10,11 @@
 import zipfile
 import zipfile._path
 
-from test.support.os_helper import temp_dir, FakePath
+from test.support.os_helper import FakePath, temp_dir
 
 from ._functools import compose
 from ._itertools import Counter
-
-from ._test_params import parameterize, Invoked
+from ._test_params import Invoked, parameterize
 
 
 class jaraco:
@@ -194,10 +193,10 @@ def test_encoding_warnings(self, alpharep):
         """EncodingWarning must blame the read_text and open calls."""
         assert sys.flags.warn_default_encoding
         root = zipfile.Path(alpharep)
-        with self.assertWarns(EncodingWarning) as wc:
+        with self.assertWarns(EncodingWarning) as wc:  # noqa: F821 
(astral-sh/ruff#13296)
             root.joinpath("a.txt").read_text()
         assert __file__ == wc.filename
-        with self.assertWarns(EncodingWarning) as wc:
+        with self.assertWarns(EncodingWarning) as wc:  # noqa: F821 
(astral-sh/ruff#13296)
             root.joinpath("a.txt").open("r").close()
         assert __file__ == wc.filename
 
@@ -365,6 +364,17 @@ def test_root_name(self, alpharep):
         root = zipfile.Path(alpharep)
         assert root.name == 'alpharep.zip' == root.filename.name
 
+    @pass_alpharep
+    def test_root_on_disk(self, alpharep):
+        """
+        The name/stem of the root should match the zipfile on disk.
+
+        This condition must hold across platforms.
+        """
+        root = zipfile.Path(self.zipfile_ondisk(alpharep))
+        assert root.name == 'alpharep.zip' == root.filename.name
+        assert root.stem == 'alpharep' == root.filename.stem
+
     @pass_alpharep
     def test_suffix(self, alpharep):
         """
diff --git a/Lib/test/test_zipfile/_path/write-alpharep.py 
b/Lib/test/test_zipfile/_path/write-alpharep.py
index 48c09b537179fd..7418391abadde5 100644
--- a/Lib/test/test_zipfile/_path/write-alpharep.py
+++ b/Lib/test/test_zipfile/_path/write-alpharep.py
@@ -1,4 +1,3 @@
 from . import test_path
 
-
 __name__ == '__main__' and 
test_path.build_alpharep_fixture().extractall('alpharep')
diff --git a/Lib/zipfile/_path/__init__.py b/Lib/zipfile/_path/__init__.py
index b7d4f8906e8bed..02f81171b4f11b 100644
--- a/Lib/zipfile/_path/__init__.py
+++ b/Lib/zipfile/_path/__init__.py
@@ -7,19 +7,18 @@
 for more detail.
 """
 
+import contextlib
 import io
-import posixpath
-import zipfile
 import itertools
-import contextlib
 import pathlib
+import posixpath
 import re
 import stat
 import sys
+import zipfile
 
 from .glob import Translator
 
-
 __all__ = ['Path']
 
 
@@ -192,11 +191,13 @@ def _name_set(self):
         self.__lookup = super()._name_set()
         return self.__lookup
 
-
 def _extract_text_encoding(encoding=None, *args, **kwargs):
     # compute stack level so that the caller of the caller sees any warning.
     is_pypy = sys.implementation.name == 'pypy'
-    stack_level = 3 + is_pypy
+    # PyPy no longer special cased after 7.3.19 (or maybe 7.3.18)
+    # See jaraco/zipp#143
+    is_old_pypi = is_pypy and sys.pypy_version_info < (7, 3, 19)
+    stack_level = 3 + is_old_pypi
     return io.text_encoding(encoding, stack_level), args, kwargs
 
 
@@ -351,7 +352,7 @@ def open(self, mode='r', *args, pwd=None, **kwargs):
         return io.TextIOWrapper(stream, encoding, *args, **kwargs)
 
     def _base(self):
-        return pathlib.PurePosixPath(self.at or self.root.filename)
+        return pathlib.PurePosixPath(self.at) if self.at else self.filename
 
     @property
     def name(self):
diff --git a/Lib/zipfile/_path/glob.py b/Lib/zipfile/_path/glob.py
index 4320f1c0badcf9..4ed74cc48d9a91 100644
--- a/Lib/zipfile/_path/glob.py
+++ b/Lib/zipfile/_path/glob.py
@@ -1,7 +1,6 @@
 import os
 import re
 
-
 _default_seps = os.sep + str(os.altsep) * bool(os.altsep)
 
 
diff --git 
a/Misc/NEWS.d/next/Library/2025-06-08-14-50-34.gh-issue-135276.ZLUhV1.rst 
b/Misc/NEWS.d/next/Library/2025-06-08-14-50-34.gh-issue-135276.ZLUhV1.rst
new file mode 100644
index 00000000000000..e630b7d671a18e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-06-08-14-50-34.gh-issue-135276.ZLUhV1.rst
@@ -0,0 +1,3 @@
+Backported bugfixes in zipfile.Path from zipp 3.23. Fixed
+``.name``, ``.stem`` and other basename-based properties on Windows when
+working with a zipfile on disk.

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: arch...@mail-archive.com

Reply via email to