bpo-30432: FileInput doesn't accept PathLike objects for file names (… · python/cpython@002665a (original) (raw)

2 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -189,6 +189,8 @@ def __init__(self, files=None, inplace=False, backup="", bufsize=0,
189 189 mode="r", openhook=None):
190 190 if isinstance(files, str):
191 191 files = (files,)
192 +elif isinstance(files, os.PathLike):
193 +files = (os.fspath(files), )
192 194 else:
193 195 if files is None:
194 196 files = sys.argv[1:]
Original file line number Diff line number Diff line change
@@ -21,6 +21,7 @@
21 21
22 22 from io import BytesIO, StringIO
23 23 from fileinput import FileInput, hook_encoded
24 +from pathlib import Path
24 25
25 26 from test.support import verbose, TESTFN, check_warnings
26 27 from test.support import unlink as safe_unlink
@@ -530,6 +531,20 @@ def test_iteration_buffering(self):
530 531 self.assertRaises(StopIteration, next, fi)
531 532 self.assertEqual(src.linesread, [])
532 533
534 +def test_pathlib_file(self):
535 +t1 = None
536 +try:
537 +t1 = Path(writeTmp(1, ["Pathlib file."]))
538 +with FileInput(t1) as fi:
539 +line = fi.readline()
540 +self.assertEqual(line, 'Pathlib file.')
541 +self.assertEqual(fi.lineno(), 1)
542 +self.assertEqual(fi.filelineno(), 1)
543 +self.assertEqual(fi.filename(), os.fspath(t1))
544 +finally:
545 +remove_tempfiles(t1)
546 +
547 +
533 548 class MockFileInput:
534 549 """A class that mocks out fileinput.FileInput for use during unit tests"""
535 550