bpo-40447: accept all path-like objects in compileall.compile_file (#19883)

Signed-off-by: Filipe Laíns <lains@archlinux.org>
Signed-off-by: Filipe Laíns <lains@riseup.net>
Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
This commit is contained in:
Filipe Laíns 2022-12-23 20:19:16 +00:00 committed by GitHub
parent 745545b5bb
commit 1ecfd1ebf1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 2 deletions

View File

@ -154,8 +154,8 @@ def compile_file(fullname, ddir=None, force=False, rx=None, quiet=0,
"in combination with stripdir or prependdir")) "in combination with stripdir or prependdir"))
success = True 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) name = os.path.basename(fullname)
dfile = None dfile = None

View File

@ -167,6 +167,20 @@ class CompileallTestsBase:
quiet=2)) quiet=2))
self.assertTrue(os.path.isfile(self.bc_path)) 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): def test_compile_path(self):
with test.test_importlib.util.import_state(path=[self.directory]): with test.test_importlib.util.import_state(path=[self.directory]):
self.assertTrue(compileall.compile_path(quiet=2)) self.assertTrue(compileall.compile_path(quiet=2))
@ -219,6 +233,20 @@ class CompileallTestsBase:
self.assertRegex(line, r'Listing ([^WindowsPath|PosixPath].*)') self.assertRegex(line, r'Listing ([^WindowsPath|PosixPath].*)')
self.assertTrue(os.path.isfile(self.bc_path)) 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") @skipUnless(_have_multiprocessing, "requires multiprocessing")
@mock.patch('concurrent.futures.ProcessPoolExecutor') @mock.patch('concurrent.futures.ProcessPoolExecutor')
def test_compile_pool_called(self, pool_mock): def test_compile_pool_called(self, pool_mock):

View File

@ -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`.