Skip to content

Commit

Permalink
bpo-40447: accept all path-like objects in compileall.compile_file (p…
Browse files Browse the repository at this point in the history
…ython#19883)

Signed-off-by: Filipe Laíns <[email protected]>
Signed-off-by: Filipe Laíns <[email protected]>
Co-authored-by: Irit Katriel <[email protected]>
Co-authored-by: Shantanu <[email protected]>
  • Loading branch information
3 people authored Dec 23, 2022
1 parent 745545b commit 1ecfd1e
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Lib/compileall.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ def compile_file(fullname, ddir=None, force=False, rx=None, quiet=0,
"in combination with stripdir or prependdir"))

success = True
if quiet < 2 and isinstance(fullname, os.PathLike):
fullname = os.fspath(fullname)
fullname = os.fspath(fullname)
stripdir = os.fspath(stripdir) if stripdir is not None else None
name = os.path.basename(fullname)

dfile = None
Expand Down
28 changes: 28 additions & 0 deletions Lib/test/test_compileall.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,20 @@ def test_compile_file_pathlike_ddir(self):
quiet=2))
self.assertTrue(os.path.isfile(self.bc_path))

def test_compile_file_pathlike_stripdir(self):
self.assertFalse(os.path.isfile(self.bc_path))
self.assertTrue(compileall.compile_file(pathlib.Path(self.source_path),
stripdir=pathlib.Path('stripdir_path'),
quiet=2))
self.assertTrue(os.path.isfile(self.bc_path))

def test_compile_file_pathlike_prependdir(self):
self.assertFalse(os.path.isfile(self.bc_path))
self.assertTrue(compileall.compile_file(pathlib.Path(self.source_path),
prependdir=pathlib.Path('prependdir_path'),
quiet=2))
self.assertTrue(os.path.isfile(self.bc_path))

def test_compile_path(self):
with test.test_importlib.util.import_state(path=[self.directory]):
self.assertTrue(compileall.compile_path(quiet=2))
Expand Down Expand Up @@ -219,6 +233,20 @@ def test_compile_dir_pathlike(self):
self.assertRegex(line, r'Listing ([^WindowsPath|PosixPath].*)')
self.assertTrue(os.path.isfile(self.bc_path))

def test_compile_dir_pathlike_stripdir(self):
self.assertFalse(os.path.isfile(self.bc_path))
self.assertTrue(compileall.compile_dir(pathlib.Path(self.directory),
stripdir=pathlib.Path('stripdir_path'),
quiet=2))
self.assertTrue(os.path.isfile(self.bc_path))

def test_compile_dir_pathlike_prependdir(self):
self.assertFalse(os.path.isfile(self.bc_path))
self.assertTrue(compileall.compile_dir(pathlib.Path(self.directory),
prependdir=pathlib.Path('prependdir_path'),
quiet=2))
self.assertTrue(os.path.isfile(self.bc_path))

@skipUnless(_have_multiprocessing, "requires multiprocessing")
@mock.patch('concurrent.futures.ProcessPoolExecutor')
def test_compile_pool_called(self, pool_mock):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Accept :class:`os.PathLike` (such as :class:`pathlib.Path`) in the ``stripdir`` arguments of
:meth:`compileall.compile_file` and :meth:`compileall.compile_dir`.

0 comments on commit 1ecfd1e

Please sign in to comment.