[3.14] gh-135276: Refresh zipfile.Path from zipp 3.23 (GH-135277) (#135278)

* 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 <jaraco@jaraco.com>

* Removed features slated for Python 3.15 only.

---------

Co-authored-by: Jason R. Coombs <jaraco@jaraco.com>
This commit is contained in:
Miss Islington (bot) 2025-06-08 22:12:25 +02:00 committed by GitHub
parent cf2209f5b9
commit 00f824dc5a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 29 additions and 19 deletions

View File

@ -1,5 +1,5 @@
import types
import functools
import types
from ._itertools import always_iterable

View File

@ -8,10 +8,8 @@ import zipfile
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')

View File

@ -1,6 +1,6 @@
import contextlib
import io
import itertools
import contextlib
import pathlib
import pickle
import stat
@ -9,12 +9,11 @@ import unittest
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:
@ -193,10 +192,10 @@ class TestPath(unittest.TestCase):
"""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
@ -364,6 +363,17 @@ class TestPath(unittest.TestCase):
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):
"""

View File

@ -1,4 +1,3 @@
from . import test_path
__name__ == '__main__' and test_path.build_alpharep_fixture().extractall('alpharep')

View File

@ -7,19 +7,18 @@ https://github.com/python/importlib_metadata/wiki/Development-Methodology
for more detail.
"""
import io
import posixpath
import zipfile
import itertools
import contextlib
import io
import itertools
import pathlib
import posixpath
import re
import stat
import sys
import zipfile
from .glob import Translator
__all__ = ['Path']
@ -192,11 +191,13 @@ class FastLookup(CompleteDirs):
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 @@ class Path:
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):

View File

@ -1,7 +1,6 @@
import os
import re
_default_seps = os.sep + str(os.altsep) * bool(os.altsep)

View File

@ -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.