From 79d2e62c008446fbbc6f264bb8a30e2d38b6ff58 Mon Sep 17 00:00:00 2001 From: Yaroslav Pankovych <31005942+ypankovych@users.noreply.github.com> Date: Mon, 23 Nov 2020 22:06:22 +0200 Subject: Added support for negative indexes to PurePath.parents (GH-21799) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit also fixes up some of the overlapping documentation changed in bpo-35498, which added support for indexing with slices. Fixes bpo-21041. https://bugs.python.org/issue21041 Co-authored-by: Paul Ganssle Co-authored-by: RĂ©mi Lapeyre --- Doc/library/pathlib.rst | 2 +- Doc/whatsnew/3.10.rst | 6 +++++- Lib/pathlib.py | 3 ++- Lib/test/test_pathlib.py | 5 ++++- Misc/ACKS | 1 + Misc/NEWS.d/next/Library/2018-12-14-13-29-17.bpo-35498.LEJHl7.rst | 2 +- Misc/NEWS.d/next/Library/2020-08-10-15-06-55.bpo-21041.cYz1eL.rst | 1 + 7 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2020-08-10-15-06-55.bpo-21041.cYz1eL.rst diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index 2071e7e..2bbf3aa 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -337,7 +337,7 @@ Pure paths provide the following methods and properties: PureWindowsPath('c:/') .. versionchanged:: 3.10 - Slice support was added. + The parents sequence now supports :term:`slices ` and negative index values. .. data:: PurePath.parent diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index ce66b1d..f3e433a 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -247,9 +247,13 @@ pipe. (Contributed by Pablo Galindo in :issue:`41625`.) pathlib ------- -Added slice support to :meth:`~pathlib.Path.parents`. +Added slice support to :attr:`PurePath.parents `. (Contributed by Joshua Cannon in :issue:`35498`) +Added negative indexing support to :attr:`PurePath.parents +`. +(Contributed by Yaroslav Pankovych in :issue:`21041`) + py_compile ---------- diff --git a/Lib/pathlib.py b/Lib/pathlib.py index af31039..531a699 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -632,7 +632,8 @@ class _PathParents(Sequence): def __getitem__(self, idx): if isinstance(idx, slice): return tuple(self[i] for i in range(*idx.indices(len(self)))) - if idx < 0 or idx >= len(self): + + if idx >= len(self) or idx < -len(self): raise IndexError(idx) return self._pathcls._from_parsed_parts(self._drv, self._root, self._parts[:-idx - 1]) diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index f145179..5e5e065 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -440,6 +440,9 @@ class _BasePurePathTest(object): self.assertEqual(par[0], P('a/b')) self.assertEqual(par[1], P('a')) self.assertEqual(par[2], P('.')) + self.assertEqual(par[-1], P('.')) + self.assertEqual(par[-2], P('a')) + self.assertEqual(par[-3], P('a/b')) self.assertEqual(par[0:1], (P('a/b'),)) self.assertEqual(par[:2], (P('a/b'), P('a'))) self.assertEqual(par[:-1], (P('a/b'), P('a'))) @@ -448,7 +451,7 @@ class _BasePurePathTest(object): self.assertEqual(par[::-1], (P('.'), P('a'), P('a/b'))) self.assertEqual(list(par), [P('a/b'), P('a'), P('.')]) with self.assertRaises(IndexError): - par[-1] + par[-4] with self.assertRaises(IndexError): par[3] with self.assertRaises(TypeError): diff --git a/Misc/ACKS b/Misc/ACKS index 16bc42f..2533490 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1283,6 +1283,7 @@ Michael Otteneder Richard Oudkerk Russel Owen Joonas Paalasmaa +Yaroslav Pankovych Martin Packman Elisha Paine Shriphani Palakodety diff --git a/Misc/NEWS.d/next/Library/2018-12-14-13-29-17.bpo-35498.LEJHl7.rst b/Misc/NEWS.d/next/Library/2018-12-14-13-29-17.bpo-35498.LEJHl7.rst index fb24ce0..1ab0093 100644 --- a/Misc/NEWS.d/next/Library/2018-12-14-13-29-17.bpo-35498.LEJHl7.rst +++ b/Misc/NEWS.d/next/Library/2018-12-14-13-29-17.bpo-35498.LEJHl7.rst @@ -1 +1 @@ -Add slice support to :meth:`~pathlib.Path.parents`. +Add slice support to :attr:`pathlib.PurePath.parents`. diff --git a/Misc/NEWS.d/next/Library/2020-08-10-15-06-55.bpo-21041.cYz1eL.rst b/Misc/NEWS.d/next/Library/2020-08-10-15-06-55.bpo-21041.cYz1eL.rst new file mode 100644 index 0000000..4f14fd3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-08-10-15-06-55.bpo-21041.cYz1eL.rst @@ -0,0 +1 @@ +:attr:`pathlib.PurePath.parents` now supports negative indexing. Patch contributed by Yaroslav Pankovych. -- cgit v0.12