Added support for negative indexes to PurePath.parents (GH-21799)

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 <p.ganssle@gmail.com>
Co-authored-by: Rémi Lapeyre <remi.lapeyre@henki.fr>
This commit is contained in:
Yaroslav Pankovych 2020-11-23 22:06:22 +02:00 committed by GitHub
parent ffae93248a
commit 79d2e62c00
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 15 additions and 5 deletions

View file

@ -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 <slice>` and negative index values.
.. data:: PurePath.parent

View file

@ -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 <pathlib.PurePath.parents>`.
(Contributed by Joshua Cannon in :issue:`35498`)
Added negative indexing support to :attr:`PurePath.parents
<pathlib.PurePath.parents>`.
(Contributed by Yaroslav Pankovych in :issue:`21041`)
py_compile
----------

View file

@ -632,7 +632,8 @@ def __len__(self):
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])

View file

@ -440,6 +440,9 @@ def test_parents_common(self):
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 @@ def test_parents_common(self):
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):

View file

@ -1283,6 +1283,7 @@ Michael Otteneder
Richard Oudkerk
Russel Owen
Joonas Paalasmaa
Yaroslav Pankovych
Martin Packman
Elisha Paine
Shriphani Palakodety

View file

@ -1 +1 @@
Add slice support to :meth:`~pathlib.Path.parents`.
Add slice support to :attr:`pathlib.PurePath.parents`.

View file

@ -0,0 +1 @@
:attr:`pathlib.PurePath.parents` now supports negative indexing. Patch contributed by Yaroslav Pankovych.