Mailing List Archive

bpo-44095: Add suffix, stem and suffixes to zipfile.Path (GH-26129)
https://github.com/python/cpython/commit/dc0b364de46cec104dae62282174b6c8a1cdb475
commit: dc0b364de46cec104dae62282174b6c8a1cdb475
branch: main
author: Miguel Brito <5544985+miguendes@users.noreply.github.com>
committer: miss-islington <31488909+miss-islington@users.noreply.github.com>
date: 2021-05-14T10:57:36-07:00
summary:

bpo-44095: Add suffix, stem and suffixes to zipfile.Path (GH-26129)

files:
A Misc/NEWS.d/next/Library/2021-05-14-16-06-02.bpo-44095.v_pLwY.rst
M Doc/library/zipfile.rst
M Lib/test/test_zipfile.py
M Lib/zipfile.py

diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst
index 3db55e646c47cc..42fe27b9e1e47f 100644
--- a/Doc/library/zipfile.rst
+++ b/Doc/library/zipfile.rst
@@ -521,6 +521,27 @@ Path objects are traversable using the ``/`` operator or ``joinpath``.
Return ``True`` if the current context references a file or
directory in the zip file.

+.. data:: Path.suffix
+
+ The file extension of the final component.
+
+ .. versionadded:: 3.11
+ Added :data:`Path.suffix` property.
+
+.. data:: Path.stem
+
+ The final path component, without its suffix.
+
+ .. versionadded:: 3.11
+ Added :data:`Path.stem` property.
+
+.. data:: Path.suffixes
+
+ A list of the path’s file extensions.
+
+ .. versionadded:: 3.11
+ Added :data:`Path.suffixes` property.
+
.. method:: Path.read_text(*, **)

Read the current file as unicode text. Positional and
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index bfc981c0d15d37..f559be790bb38e 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -3093,6 +3093,64 @@ def test_root_name(self, alpharep):
root = zipfile.Path(alpharep)
assert root.name == 'alpharep.zip' == root.filename.name

+ @pass_alpharep
+ def test_suffix(self, alpharep):
+ """
+ The suffix of the root should be the suffix of the zipfile.
+ The suffix of each nested file is the final component's last suffix, if any.
+ Includes the leading period, just like pathlib.Path.
+ """
+ root = zipfile.Path(alpharep)
+ assert root.suffix == '.zip' == root.filename.suffix
+
+ b = root / "b.txt"
+ assert b.suffix == ".txt"
+
+ c = root / "c" / "filename.tar.gz"
+ assert c.suffix == ".gz"
+
+ d = root / "d"
+ assert d.suffix == ""
+
+ @pass_alpharep
+ def test_suffixes(self, alpharep):
+ """
+ The suffix of the root should be the suffix of the zipfile.
+ The suffix of each nested file is the final component's last suffix, if any.
+ Includes the leading period, just like pathlib.Path.
+ """
+ root = zipfile.Path(alpharep)
+ assert root.suffixes == ['.zip'] == root.filename.suffixes
+
+ b = root / 'b.txt'
+ assert b.suffixes == ['.txt']
+
+ c = root / 'c' / 'filename.tar.gz'
+ assert c.suffixes == ['.tar', '.gz']
+
+ d = root / 'd'
+ assert d.suffixes == []
+
+ e = root / '.hgrc'
+ assert e.suffixes == []
+
+ @pass_alpharep
+ def test_stem(self, alpharep):
+ """
+ The final path component, without its suffix
+ """
+ root = zipfile.Path(alpharep)
+ assert root.stem == 'alpharep' == root.filename.stem
+
+ b = root / "b.txt"
+ assert b.stem == "b"
+
+ c = root / "c" / "filename.tar.gz"
+ assert c.stem == "filename.tar"
+
+ d = root / "d"
+ assert d.stem == "d"
+
@pass_alpharep
def test_root_parent(self, alpharep):
root = zipfile.Path(alpharep)
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index d99c0d76977750..b83e2c187eb033 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -2342,6 +2342,18 @@ def open(self, mode='r', *args, pwd=None, **kwargs):
def name(self):
return pathlib.Path(self.at).name or self.filename.name

+ @property
+ def suffix(self):
+ return pathlib.Path(self.at).suffix or self.filename.suffix
+
+ @property
+ def suffixes(self):
+ return pathlib.Path(self.at).suffixes or self.filename.suffixes
+
+ @property
+ def stem(self):
+ return pathlib.Path(self.at).stem or self.filename.stem
+
@property
def filename(self):
return pathlib.Path(self.root.filename).joinpath(self.at)
diff --git a/Misc/NEWS.d/next/Library/2021-05-14-16-06-02.bpo-44095.v_pLwY.rst b/Misc/NEWS.d/next/Library/2021-05-14-16-06-02.bpo-44095.v_pLwY.rst
new file mode 100644
index 00000000000000..ee03e933f35d63
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-05-14-16-06-02.bpo-44095.v_pLwY.rst
@@ -0,0 +1,2 @@
+:class:`zipfile.Path` now supports :attr:`zipfile.Path.stem`,
+:attr:`zipfile.Path.suffixes`, and :attr:`zipfile.Path.suffix` attributes.

_______________________________________________
Python-checkins mailing list
Python-checkins@python.org
https://mail.python.org/mailman/listinfo/python-checkins