]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39357: Remove buffering parameter of bz2.BZ2File (GH-18028)
authorVictor Stinner <vstinner@python.org>
Thu, 16 Jan 2020 14:33:30 +0000 (15:33 +0100)
committerGitHub <noreply@github.com>
Thu, 16 Jan 2020 14:33:30 +0000 (15:33 +0100)
Remove the buffering parameter of bz2.BZ2File. Since Python 3.0, it
was ignored and using it was emitting a DeprecationWarning. Pass an
open file object to control how the file is opened.

The compresslevel parameter becomes keyword-only.

Doc/library/bz2.rst
Doc/whatsnew/3.9.rst
Lib/bz2.py
Lib/test/test_bz2.py
Misc/NEWS.d/next/Library/2020-01-16-11-24-00.bpo-39357.bCwx-h.rst [new file with mode: 0644]

index aa836af2b257fddb763d65487c5172ee520eb494..85cdc16a7d78d4ac84bca9a4246b78a6ade130cc 100644 (file)
@@ -65,7 +65,7 @@ All of the classes in this module may safely be accessed from multiple threads.
       Accepts a :term:`path-like object`.
 
 
-.. class:: BZ2File(filename, mode='r', buffering=None, compresslevel=9)
+.. class:: BZ2File(filename, mode='r', *, compresslevel=9)
 
    Open a bzip2-compressed file in binary mode.
 
@@ -81,8 +81,6 @@ All of the classes in this module may safely be accessed from multiple threads.
    If *filename* is a file object (rather than an actual file name), a mode of
    ``'w'`` does not truncate the file, and is instead equivalent to ``'a'``.
 
-   The *buffering* argument is ignored. Its use is deprecated since Python 3.0.
-
    If *mode* is ``'w'`` or ``'a'``, *compresslevel* can be an integer between
    ``1`` and ``9`` specifying the level of compression: ``1`` produces the
    least compression, and ``9`` (default) produces the most compression.
@@ -110,9 +108,6 @@ All of the classes in this module may safely be accessed from multiple threads.
       .. versionadded:: 3.3
 
 
-   .. deprecated:: 3.0
-      The keyword argument *buffering* was deprecated and is now ignored.
-
    .. versionchanged:: 3.1
       Support for the :keyword:`with` statement was added.
 
@@ -138,6 +133,13 @@ All of the classes in this module may safely be accessed from multiple threads.
    .. versionchanged:: 3.6
       Accepts a :term:`path-like object`.
 
+   .. versionchanged:: 3.9
+      The *buffering* parameter has been removed. It was ignored and deprecated
+      since Python 3.0. Pass an open file object to control how the file is
+      opened.
+
+      The *compresslevel* parameter became keyword-only.
+
 
 Incremental (de)compression
 ---------------------------
index 8ca755645d66fe5c56f75686e61380d59a1d20c9..f40685c932793ff6ca79bc2b7db95ef0f19d9f6f 100644 (file)
@@ -420,6 +420,12 @@ Removed
   3.5 (:issue:`22486`): use :func:`math.gcd` instead.
   (Contributed by Victor Stinner in :issue:`39350`.)
 
+* The *buffering* parameter of :class:`bz2.BZ2File` has been removed. Since
+  Python 3.0, it was ignored and using it was emitting
+  :exc:`DeprecationWarning`. Pass an open file object to control how the file
+  is opened.
+  (Contributed by Victor Stinner in :issue:`39357`.)
+
 
 Porting to Python 3.9
 =====================
@@ -451,6 +457,10 @@ Changes in the Python API
   :data:`~errno.EBADF` error.
   (Contributed by Victor Stinner in :issue:`39239`.)
 
+* The *compresslevel* parameter of :class:`bz2.BZ2File` became keyword-only,
+  since the *buffering* parameter has been removed.
+  (Contributed by Victor Stinner in :issue:`39357`.)
+
 
 CPython bytecode changes
 ------------------------
index 21e8ff49c67b38882827d04475186593787d0dfc..a499ca3598f4bffe4b62818bc83b58ad406b814e 100644 (file)
@@ -24,8 +24,6 @@ _MODE_READ     = 1
 # Value 2 no longer used
 _MODE_WRITE    = 3
 
-_sentinel = object()
-
 
 class BZ2File(_compression.BaseStream):
 
@@ -38,7 +36,7 @@ class BZ2File(_compression.BaseStream):
     returned as bytes, and data to be written should be given as bytes.
     """
 
-    def __init__(self, filename, mode="r", buffering=_sentinel, compresslevel=9):
+    def __init__(self, filename, mode="r", *, compresslevel=9):
         """Open a bzip2-compressed file.
 
         If filename is a str, bytes, or PathLike object, it gives the
@@ -65,12 +63,6 @@ class BZ2File(_compression.BaseStream):
         self._closefp = False
         self._mode = _MODE_CLOSED
 
-        if buffering is not _sentinel:
-            warnings.warn("Use of 'buffering' argument is deprecated and ignored "
-                          "since Python 3.0.",
-                          DeprecationWarning,
-                          stacklevel=2)
-
         if not (1 <= compresslevel <= 9):
             raise ValueError("compresslevel must be between 1 and 9")
 
index eb2f72ee4a5d3bbb552e6337dda5417459f40c95..030d564fc59e620da21be58292ef98ddd7a715ef 100644 (file)
@@ -100,6 +100,9 @@ class BZ2FileTest(BaseTest):
         self.assertRaises(ValueError, BZ2File, os.devnull, compresslevel=0)
         self.assertRaises(ValueError, BZ2File, os.devnull, compresslevel=10)
 
+        # compresslevel is keyword-only
+        self.assertRaises(TypeError, BZ2File, os.devnull, "r", 3)
+
     def testRead(self):
         self.createTempFile()
         with BZ2File(self.filename) as bz2f:
diff --git a/Misc/NEWS.d/next/Library/2020-01-16-11-24-00.bpo-39357.bCwx-h.rst b/Misc/NEWS.d/next/Library/2020-01-16-11-24-00.bpo-39357.bCwx-h.rst
new file mode 100644 (file)
index 0000000..a90802c
--- /dev/null
@@ -0,0 +1,4 @@
+Remove the *buffering* parameter of :class:`bz2.BZ2File`. Since Python 3.0, it
+was ignored and using it was emitting :exc:`DeprecationWarning`. Pass an open
+file object, to control how the file is opened. The *compresslevel* parameter
+becomes keyword-only.