]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40447: accept all path-like objects in compileall.compile_file (#19883)
authorFilipe Laíns <lains@riseup.net>
Fri, 23 Dec 2022 20:19:16 +0000 (20:19 +0000)
committerGitHub <noreply@github.com>
Fri, 23 Dec 2022 20:19:16 +0000 (14:19 -0600)
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>
Lib/compileall.py
Lib/test/test_compileall.py
Misc/NEWS.d/next/Library/2020-05-03-12-55-55.bpo-40447.oKR0Lj.rst [new file with mode: 0644]

index 330a90786efc5f15f859a9c1a359ced13c2fc8b8..a388931fb5a99da63f517a09b61683fd33d7d0de 100644 (file)
@@ -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
index 73c83c9bf1efee97713adc03cca94e9ba93847b7..05154c8f1c6057169bf26730f71f17d2407e4c77 100644 (file)
@@ -167,6 +167,20 @@ class CompileallTestsBase:
                                                 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))
@@ -219,6 +233,20 @@ class CompileallTestsBase:
         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):
diff --git a/Misc/NEWS.d/next/Library/2020-05-03-12-55-55.bpo-40447.oKR0Lj.rst b/Misc/NEWS.d/next/Library/2020-05-03-12-55-55.bpo-40447.oKR0Lj.rst
new file mode 100644 (file)
index 0000000..941038d
--- /dev/null
@@ -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`.