Skip to content

Commit 7ecac07

Browse files
author
Joshua Cannon
committed
Added slice support to PathLib parents attribute.
1 parent d7538dd commit 7ecac07

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

Lib/pathlib.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,8 @@ def __len__(self):
583583
return len(self._parts)
584584

585585
def __getitem__(self, idx):
586+
if isinstance(idx, slice):
587+
return [self[i] for i in range(*idx.indices(len(self)))]
586588
if idx < 0 or idx >= len(self):
587589
raise IndexError(idx)
588590
return self._pathcls._from_parsed_parts(self._drv, self._root,

Lib/test/test_pathlib.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,11 @@ def test_parents_common(self):
436436
self.assertEqual(par[0], P('a/b'))
437437
self.assertEqual(par[1], P('a'))
438438
self.assertEqual(par[2], P('.'))
439+
self.assertEqual(par[0:1], [P('a/b')])
440+
self.assertEqual(par[:2], [P('a/b'), P('a')])
441+
self.assertEqual(par[:-1], [P('a/b'), P('a')])
442+
self.assertEqual(par[1:], [P('a'), P('.')])
443+
self.assertEqual(par[::2], [P('a/b'), P('.')])
439444
self.assertEqual(list(par), [P('a/b'), P('a'), P('.')])
440445
with self.assertRaises(IndexError):
441446
par[-1]
@@ -450,6 +455,11 @@ def test_parents_common(self):
450455
self.assertEqual(par[0], P('/a/b'))
451456
self.assertEqual(par[1], P('/a'))
452457
self.assertEqual(par[2], P('/'))
458+
self.assertEqual(par[0:1], [P('/a/b')])
459+
self.assertEqual(par[:2], [P('/a/b'), P('/a')])
460+
self.assertEqual(par[:-1], [P('/a/b'), P('/a')])
461+
self.assertEqual(par[1:], [P('/a'), P('/')])
462+
self.assertEqual(par[::2], [P('/a/b'), P('/')])
453463
self.assertEqual(list(par), [P('/a/b'), P('/a'), P('/')])
454464
with self.assertRaises(IndexError):
455465
par[3]
@@ -850,6 +860,11 @@ def test_parents(self):
850860
self.assertEqual(len(par), 2)
851861
self.assertEqual(par[0], P('z:a'))
852862
self.assertEqual(par[1], P('z:'))
863+
self.assertEqual(par[0:1], [P('z:a')])
864+
self.assertEqual(par[:-1], [P('z:a')])
865+
self.assertEqual(par[:2], [P('z:a'), P('z:')])
866+
self.assertEqual(par[1:], [P('z:')])
867+
self.assertEqual(par[::2], [P('z:a')])
853868
self.assertEqual(list(par), [P('z:a'), P('z:')])
854869
with self.assertRaises(IndexError):
855870
par[2]
@@ -858,6 +873,11 @@ def test_parents(self):
858873
self.assertEqual(len(par), 2)
859874
self.assertEqual(par[0], P('z:/a'))
860875
self.assertEqual(par[1], P('z:/'))
876+
self.assertEqual(par[0:1], [P('z:/a')])
877+
self.assertEqual(par[0:-1], [P('z:/a')])
878+
self.assertEqual(par[:2], [P('z:/a'), P('z:/')])
879+
self.assertEqual(par[1:], [P('z:/')])
880+
self.assertEqual(par[::2], [P('z:/a')])
861881
self.assertEqual(list(par), [P('z:/a'), P('z:/')])
862882
with self.assertRaises(IndexError):
863883
par[2]
@@ -866,6 +886,11 @@ def test_parents(self):
866886
self.assertEqual(len(par), 2)
867887
self.assertEqual(par[0], P('//a/b/c'))
868888
self.assertEqual(par[1], P('//a/b'))
889+
self.assertEqual(par[0:1], [P('//a/b/c')])
890+
self.assertEqual(par[0:-1], [P('//a/b/c')])
891+
self.assertEqual(par[:2], [P('//a/b/c'), P('//a/b')])
892+
self.assertEqual(par[1:], [P('//a/b')])
893+
self.assertEqual(par[::2], [P('//a/b/c')])
869894
self.assertEqual(list(par), [P('//a/b/c'), P('//a/b')])
870895
with self.assertRaises(IndexError):
871896
par[2]

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ Arnaud Calmettes
246246
Daniel Calvelo
247247
Tony Campbell
248248
Brett Cannon
249+
Joshua Cannon
249250
Tristan Carel
250251
Mike Carlton
251252
Pierre Carrier
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add slice support to :meth:`PathLib._PathParents.__getitem__`.

0 commit comments

Comments
 (0)