Issue #22759: Query methods on pathlib.Path() (exists(), is_dir(), et… · python/cpython@2b2852b · GitHub
Skip to content

Commit 2b2852b

Browse files
committed
Issue #22759: Query methods on pathlib.Path() (exists(), is_dir(), etc.) now return False when the underlying stat call raises NotADirectoryError.
1 parent 35903c8 commit 2b2852b

3 files changed

Lines changed: 22 additions & 9 deletions

File tree

Lib/pathlib.py

Lines changed: 9 additions & 9 deletions

Lib/test/test_pathlib.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,9 +1276,12 @@ def test_exists(self):
12761276
self.assertIs(True, p.exists())
12771277
self.assertIs(True, (p / 'dirA').exists())
12781278
self.assertIs(True, (p / 'fileA').exists())
1279+
self.assertIs(False, (p / 'fileA' / 'bah').exists())
12791280
if not symlink_skip_reason:
12801281
self.assertIs(True, (p / 'linkA').exists())
12811282
self.assertIs(True, (p / 'linkB').exists())
1283+
self.assertIs(True, (p / 'linkB' / 'fileB').exists())
1284+
self.assertIs(False, (p / 'linkA' / 'bah').exists())
12821285
self.assertIs(False, (p / 'foo').exists())
12831286
self.assertIs(False, P('/xyzzy').exists())
12841287

@@ -1626,6 +1629,7 @@ def test_is_dir(self):
16261629
self.assertTrue((P / 'dirA').is_dir())
16271630
self.assertFalse((P / 'fileA').is_dir())
16281631
self.assertFalse((P / 'non-existing').is_dir())
1632+
self.assertFalse((P / 'fileA' / 'bah').is_dir())
16291633
if not symlink_skip_reason:
16301634
self.assertFalse((P / 'linkA').is_dir())
16311635
self.assertTrue((P / 'linkB').is_dir())
@@ -1636,6 +1640,7 @@ def test_is_file(self):
16361640
self.assertTrue((P / 'fileA').is_file())
16371641
self.assertFalse((P / 'dirA').is_file())
16381642
self.assertFalse((P / 'non-existing').is_file())
1643+
self.assertFalse((P / 'fileA' / 'bah').is_file())
16391644
if not symlink_skip_reason:
16401645
self.assertTrue((P / 'linkA').is_file())
16411646
self.assertFalse((P / 'linkB').is_file())
@@ -1646,6 +1651,7 @@ def test_is_symlink(self):
16461651
self.assertFalse((P / 'fileA').is_symlink())
16471652
self.assertFalse((P / 'dirA').is_symlink())
16481653
self.assertFalse((P / 'non-existing').is_symlink())
1654+
self.assertFalse((P / 'fileA' / 'bah').is_symlink())
16491655
if not symlink_skip_reason:
16501656
self.assertTrue((P / 'linkA').is_symlink())
16511657
self.assertTrue((P / 'linkB').is_symlink())
@@ -1656,6 +1662,7 @@ def test_is_fifo_false(self):
16561662
self.assertFalse((P / 'fileA').is_fifo())
16571663
self.assertFalse((P / 'dirA').is_fifo())
16581664
self.assertFalse((P / 'non-existing').is_fifo())
1665+
self.assertFalse((P / 'fileA' / 'bah').is_fifo())
16591666

16601667
@unittest.skipUnless(hasattr(os, "mkfifo"), "os.mkfifo() required")
16611668
def test_is_fifo_true(self):
@@ -1670,6 +1677,7 @@ def test_is_socket_false(self):
16701677
self.assertFalse((P / 'fileA').is_socket())
16711678
self.assertFalse((P / 'dirA').is_socket())
16721679
self.assertFalse((P / 'non-existing').is_socket())
1680+
self.assertFalse((P / 'fileA' / 'bah').is_socket())
16731681

16741682
@unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required")
16751683
def test_is_socket_true(self):
@@ -1690,12 +1698,14 @@ def test_is_block_device_false(self):
16901698
self.assertFalse((P / 'fileA').is_block_device())
16911699
self.assertFalse((P / 'dirA').is_block_device())
16921700
self.assertFalse((P / 'non-existing').is_block_device())
1701+
self.assertFalse((P / 'fileA' / 'bah').is_block_device())
16931702

16941703
def test_is_char_device_false(self):
16951704
P = self.cls(BASE)
16961705
self.assertFalse((P / 'fileA').is_char_device())
16971706
self.assertFalse((P / 'dirA').is_char_device())
16981707
self.assertFalse((P / 'non-existing').is_char_device())
1708+
self.assertFalse((P / 'fileA' / 'bah').is_char_device())
16991709

17001710
def test_is_char_device_true(self):
17011711
# Under Unix, /dev/null should generally be a char device

Misc/NEWS

Lines changed: 3 additions & 0 deletions

0 commit comments

Comments
 (0)