]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-81325: Support path-like objects with streaming TarFile (GH-137188) (#137366)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 5 Aug 2025 21:17:12 +0000 (23:17 +0200)
committerGitHub <noreply@github.com>
Tue, 5 Aug 2025 21:17:12 +0000 (22:17 +0100)
Co-authored-by: Alexander Urieles <aeurielesn@users.noreply.github.com>
Co-authored-by: Emma Smith <emma@emmatyping.dev>
Lib/tarfile.py
Lib/test/test_tarfile.py
Misc/NEWS.d/next/Library/2025-07-28-23-11-29.gh-issue-81325.jMJFBe.rst [new file with mode: 0644]

index 9ff9df696de68ca0582ea214ac56fba08ec8fa4f..4867735dd95e05eb113b9219bdf50c80f8e2dfec 100755 (executable)
@@ -354,7 +354,7 @@ class _Stream:
             fileobj = _StreamProxy(fileobj)
             comptype = fileobj.getcomptype()
 
-        self.name     = name or ""
+        self.name     = os.fspath(name) if name is not None else ""
         self.mode     = mode
         self.comptype = comptype
         self.fileobj  = fileobj
index 7024be46de59c9d10ffa696ed1510d9b3cac5b4e..c31842cf523712d6d644106902ae441e1d085a0d 100644 (file)
@@ -1717,6 +1717,16 @@ class StreamWriteTest(WriteTestBase, unittest.TestCase):
         finally:
             os.umask(original_umask)
 
+    def test_pathlike_name(self):
+        expected_name = os.path.abspath(tmpname)
+        tarpath = os_helper.FakePath(tmpname)
+
+        for func in (tarfile.open, tarfile.TarFile.open):
+            with self.subTest():
+                with func(tarpath, self.mode) as tar:
+                    self.assertEqual(tar.name, expected_name)
+                os_helper.unlink(tmpname)
+
 
 class GzipStreamWriteTest(GzipTest, StreamWriteTest):
     def test_source_directory_not_leaked(self):
diff --git a/Misc/NEWS.d/next/Library/2025-07-28-23-11-29.gh-issue-81325.jMJFBe.rst b/Misc/NEWS.d/next/Library/2025-07-28-23-11-29.gh-issue-81325.jMJFBe.rst
new file mode 100644 (file)
index 0000000..3d89b6e
--- /dev/null
@@ -0,0 +1,2 @@
+:class:`tarfile.TarFile` now accepts a :term:`path-like <path-like object>` when working on a tar archive.
+(Contributed by Alexander Enrique Urieles Nieto in :gh:`81325`.)