From d5c8ad24716d146ffa025e09dad85e5a1bac5c77 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Mon, 9 Aug 2021 03:30:30 -0700 Subject: bpo-32695: Docs and tests for compresslevel and preset kwargs in tarfile (GH-21470) Co-Authored-By: Bo Bayles (cherry picked from commit eb2d4a66ff07aa6e51cfaaa31afed31addf76936) Co-authored-by: Zackery Spytz --- Doc/library/tarfile.rst | 3 +++ Lib/test/test_tarfile.py | 21 ++++++++++++++++++--- .../2020-07-13-23-46-59.bpo-32695.tTqqXe.rst | 2 ++ 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2020-07-13-23-46-59.bpo-32695.tTqqXe.rst diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst index 13088a1..6afb839 100644 --- a/Doc/library/tarfile.rst +++ b/Doc/library/tarfile.rst @@ -102,6 +102,9 @@ Some facts and figures: ``'x:bz2'``, :func:`tarfile.open` accepts the keyword argument *compresslevel* (default ``9``) to specify the compression level of the file. + For modes ``'w:xz'`` and ``'x:xz'``, :func:`tarfile.open` accepts the + keyword argument *preset* to specify the compression level of the file. + For special purposes, there is a second format for *mode*: ``'filemode|[compression]'``. :func:`tarfile.open` will return a :class:`TarFile` object that processes its data as a stream of blocks. No random seeking will diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 817e6f1..cfdda24 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -1706,15 +1706,30 @@ class CreateTest(WriteTestBase, unittest.TestCase): class GzipCreateTest(GzipTest, CreateTest): - pass + + def test_create_with_compresslevel(self): + with tarfile.open(tmpname, self.mode, compresslevel=1) as tobj: + tobj.add(self.file_path) + with tarfile.open(tmpname, 'r:gz', compresslevel=1) as tobj: + pass class Bz2CreateTest(Bz2Test, CreateTest): - pass + + def test_create_with_compresslevel(self): + with tarfile.open(tmpname, self.mode, compresslevel=1) as tobj: + tobj.add(self.file_path) + with tarfile.open(tmpname, 'r:bz2', compresslevel=1) as tobj: + pass class LzmaCreateTest(LzmaTest, CreateTest): - pass + + # Unlike gz and bz2, xz uses the preset keyword instead of compresslevel. + # It does not allow for preset to be specified when reading. + def test_create_with_preset(self): + with tarfile.open(tmpname, self.mode, preset=1) as tobj: + tobj.add(self.file_path) class CreateWithXModeTest(CreateTest): diff --git a/Misc/NEWS.d/next/Library/2020-07-13-23-46-59.bpo-32695.tTqqXe.rst b/Misc/NEWS.d/next/Library/2020-07-13-23-46-59.bpo-32695.tTqqXe.rst new file mode 100644 index 0000000..c71316e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-07-13-23-46-59.bpo-32695.tTqqXe.rst @@ -0,0 +1,2 @@ +The *compresslevel* and *preset* keyword arguments of :func:`tarfile.open` +are now both documented and tested. -- cgit v0.12