]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Added support for negative indexes to PurePath.parents (GH-21799)
authorYaroslav Pankovych <31005942+ypankovych@users.noreply.github.com>
Mon, 23 Nov 2020 20:06:22 +0000 (22:06 +0200)
committerGitHub <noreply@github.com>
Mon, 23 Nov 2020 20:06:22 +0000 (15:06 -0500)
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>
Doc/library/pathlib.rst
Doc/whatsnew/3.10.rst
Lib/pathlib.py
Lib/test/test_pathlib.py
Misc/ACKS
Misc/NEWS.d/next/Library/2018-12-14-13-29-17.bpo-35498.LEJHl7.rst
Misc/NEWS.d/next/Library/2020-08-10-15-06-55.bpo-21041.cYz1eL.rst [new file with mode: 0644]

index 2071e7ed5f4bfee7936e521f415f39eeafa11cca..2bbf3aad619884b1782f5d13445725ffa59969e9 100644 (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
 
index ce66b1de1b7f20b48d71284f831da46c7f6868dd..f3e433abf0828399ebd401449df3972d620fea43 100644 (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
 ----------
 
index af310393c3e40efb2c532beca35795159c9ab385..531a699a40df4941b16c8886a8169f3bf246d5c1 100644 (file)
@@ -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])
index f1451796b6427dbff48bcda50f613e2048241035..5e5e065b988aaf2437aa1a03eef40a6ab654fd3f 100644 (file)
@@ -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):
index 16bc42f65fbbcf724077748b8586853a9f94621c..253349017c5cdc47afb893116938a9c4390c83cb 100644 (file)
--- 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
index fb24ce027c21866e52fbaab7cfaf110ab1e7019b..1ab0093fcde04117821dbab2221724a870ae57ee 100644 (file)
@@ -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 (file)
index 0000000..4f14fd3
--- /dev/null
@@ -0,0 +1 @@
+:attr:`pathlib.PurePath.parents` now supports negative indexing. Patch contributed by Yaroslav Pankovych.