Merge pull request #5776 from radarhere/removals

Removed deprecated PILLOW_VERSION, Image.show command parameter, Image._showxv and ImageFile.raise_ioerror
This commit is contained in:
mergify[bot] 2021-10-18 07:00:31 +00:00 committed by GitHub
commit bc31502183
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 118 additions and 225 deletions

View File

@ -6,8 +6,7 @@ import tempfile
import pytest import pytest
import PIL from PIL import Image, ImageDraw, ImagePalette, UnidentifiedImageError
from PIL import Image, ImageDraw, ImagePalette, ImageShow, UnidentifiedImageError
from .helper import ( from .helper import (
assert_image_equal, assert_image_equal,
@ -626,22 +625,6 @@ class TestImage:
expected = Image.new(mode, (100, 100), color) expected = Image.new(mode, (100, 100), color)
assert_image_equal(im.convert(mode), expected) assert_image_equal(im.convert(mode), expected)
def test_showxv_deprecation(self):
class TestViewer(ImageShow.Viewer):
def show_image(self, image, **options):
return True
viewer = TestViewer()
ImageShow.register(viewer, -1)
im = Image.new("RGB", (50, 50), "white")
with pytest.warns(DeprecationWarning):
Image._showxv(im)
# Restore original state
ImageShow._viewers.pop(0)
def test_no_resource_warning_on_save(self, tmp_path): def test_no_resource_warning_on_save(self, tmp_path):
# https://github.com/python-pillow/Pillow/issues/835 # https://github.com/python-pillow/Pillow/issues/835
# Arrange # Arrange
@ -813,35 +796,6 @@ class TestImage:
with pytest.warns(DeprecationWarning): with pytest.warns(DeprecationWarning):
assert Image.CONTAINER == 2 assert Image.CONTAINER == 2
@pytest.mark.parametrize(
"test_module",
[PIL, Image],
)
def test_pillow_version(self, test_module):
with pytest.warns(DeprecationWarning):
assert test_module.PILLOW_VERSION == PIL.__version__
with pytest.warns(DeprecationWarning):
str(test_module.PILLOW_VERSION)
with pytest.warns(DeprecationWarning):
assert int(test_module.PILLOW_VERSION[0]) >= 7
with pytest.warns(DeprecationWarning):
assert test_module.PILLOW_VERSION < "9.9.0"
with pytest.warns(DeprecationWarning):
assert test_module.PILLOW_VERSION <= "9.9.0"
with pytest.warns(DeprecationWarning):
assert test_module.PILLOW_VERSION != "7.0.0"
with pytest.warns(DeprecationWarning):
assert test_module.PILLOW_VERSION >= "7.0.0"
with pytest.warns(DeprecationWarning):
assert test_module.PILLOW_VERSION > "7.0.0"
@pytest.mark.parametrize( @pytest.mark.parametrize(
"path", "path",
[ [
@ -877,18 +831,6 @@ class TestImage:
except OSError as e: except OSError as e:
assert str(e) == "buffer overrun when reading image file" assert str(e) == "buffer overrun when reading image file"
def test_show_deprecation(self, monkeypatch):
monkeypatch.setattr(Image, "_show", lambda *args, **kwargs: None)
im = Image.new("RGB", (50, 50), "white")
with pytest.warns(None) as raised:
im.show()
assert not raised
with pytest.warns(DeprecationWarning):
im.show(command="mock")
class MockEncoder: class MockEncoder:
pass pass

View File

@ -94,12 +94,6 @@ class TestImageFile:
assert_image_equal(im1, im2) assert_image_equal(im1, im2)
def test_raise_ioerror(self):
with pytest.raises(IOError):
with pytest.warns(DeprecationWarning) as record:
ImageFile.raise_ioerror(1)
assert len(record) == 1
def test_raise_oserror(self): def test_raise_oserror(self):
with pytest.raises(OSError): with pytest.raises(OSError):
ImageFile.raise_oserror(1) ImageFile.raise_oserror(1)

View File

@ -25,43 +25,6 @@ vulnerability introduced in FreeType 2.6 (:cve:`CVE-2020-15999`).
.. _2.10.4: https://sourceforge.net/projects/freetype/files/freetype2/2.10.4/ .. _2.10.4: https://sourceforge.net/projects/freetype/files/freetype2/2.10.4/
Image.show command parameter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated:: 7.2.0
The ``command`` parameter will be removed in Pillow 9.0.0 (2022-01-02).
Use a subclass of :py:class:`.ImageShow.Viewer` instead.
Image._showxv
~~~~~~~~~~~~~
.. deprecated:: 7.2.0
``Image._showxv`` will be removed in Pillow 9.0.0 (2022-01-02).
Use :py:meth:`.Image.Image.show` instead. If custom behaviour is required, use
:py:func:`.ImageShow.register` to add a custom :py:class:`.ImageShow.Viewer` class.
ImageFile.raise_ioerror
~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated:: 7.2.0
``IOError`` was merged into ``OSError`` in Python 3.3.
So, ``ImageFile.raise_ioerror`` will be removed in Pillow 9.0.0 (2022-01-02).
Use ``ImageFile.raise_oserror`` instead.
PILLOW_VERSION constant
~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated:: 5.2.0
``PILLOW_VERSION`` will be removed in Pillow 9.0.0 (2022-01-02).
Use ``__version__`` instead.
It was initially removed in Pillow 7.0.0, but brought back in 7.1.0 to give projects
more time to upgrade.
Tk/Tcl 8.4 Tk/Tcl 8.4
~~~~~~~~~~ ~~~~~~~~~~
@ -109,6 +72,45 @@ Removed features
Deprecated features are only removed in major releases after an appropriate Deprecated features are only removed in major releases after an appropriate
period of deprecation has passed. period of deprecation has passed.
PILLOW_VERSION constant
~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated:: 5.2.0
.. versionremoved:: 9.0.0
Use ``__version__`` instead.
It was initially removed in Pillow 7.0.0, but temporarily brought back in 7.1.0
to give projects more time to upgrade.
Image.show command parameter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated:: 7.2.0
.. versionremoved:: 9.0.0
The ``command`` parameter has been removed. Use a subclass of
:py:class:`.ImageShow.Viewer` instead.
Image._showxv
~~~~~~~~~~~~~
.. deprecated:: 7.2.0
.. versionremoved:: 9.0.0
Use :py:meth:`.Image.Image.show` instead. If custom behaviour is required, use
:py:func:`.ImageShow.register` to add a custom :py:class:`.ImageShow.Viewer` class.
ImageFile.raise_ioerror
~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated:: 7.2.0
.. versionremoved:: 9.0.0
``IOError`` was merged into ``OSError`` in Python 3.3.
So, ``ImageFile.raise_ioerror`` has been removed.
Use ``ImageFile.raise_oserror`` instead.
im.offset im.offset
~~~~~~~~~ ~~~~~~~~~

View File

@ -0,0 +1,61 @@
9.0.0
-----
Backwards Incompatible Changes
==============================
PILLOW_VERSION constant
^^^^^^^^^^^^^^^^^^^^^^^
``PILLOW_VERSION`` has been removed. Use ``__version__`` instead.
Image.show command parameter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The ``command`` parameter has been removed. Use a subclass of
:py:class:`PIL.ImageShow.Viewer` instead.
Image._showxv
~~~~~~~~~~~~~
``Image._showxv`` has been removed. Use :py:meth:`~PIL.Image.Image.show`
instead. If custom behaviour is required, use :py:meth:`~PIL.ImageShow.register` to add
a custom :py:class:`~PIL.ImageShow.Viewer` class.
ImageFile.raise_ioerror
~~~~~~~~~~~~~~~~~~~~~~~
``IOError`` was merged into ``OSError`` in Python 3.3. So, ``ImageFile.raise_ioerror``
has been removed. Use ``ImageFile.raise_oserror`` instead.
API Changes
===========
TODO
^^^^
TODO
API Additions
=============
TODO
^^^^
TODO
Security
========
TODO
^^^^
TODO
Other Changes
=============
TODO
^^^^
TODO

View File

@ -14,6 +14,7 @@ expected to be backported to earlier versions.
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
9.0.0
8.4.0 8.4.0
8.3.2 8.3.2
8.3.1 8.3.1

View File

@ -45,45 +45,28 @@ except ImportError:
ElementTree = None ElementTree = None
# VERSION was removed in Pillow 6.0.0. # VERSION was removed in Pillow 6.0.0.
# PILLOW_VERSION is deprecated and will be removed in a future release. # PILLOW_VERSION was removed in Pillow 9.0.0.
# Use __version__ instead. # Use __version__ instead.
from . import ( from . import ImageMode, TiffTags, UnidentifiedImageError, __version__, _plugins
ImageMode,
TiffTags,
UnidentifiedImageError,
__version__,
_plugins,
_raise_version_warning,
)
from ._binary import i32le from ._binary import i32le
from ._util import deferred_error, isPath from ._util import deferred_error, isPath
if sys.version_info >= (3, 7): if sys.version_info >= (3, 7):
def __getattr__(name): def __getattr__(name):
if name == "PILLOW_VERSION": categories = {"NORMAL": 0, "SEQUENCE": 1, "CONTAINER": 2}
_raise_version_warning() if name in categories:
return __version__ warnings.warn(
else: "Image categories are deprecated and will be removed in Pillow 10 "
categories = {"NORMAL": 0, "SEQUENCE": 1, "CONTAINER": 2} "(2023-01-02). Use is_animated instead.",
if name in categories: DeprecationWarning,
warnings.warn( stacklevel=2,
"Image categories are deprecated and will be removed in Pillow 10 " )
"(2023-01-02). Use is_animated instead.", return categories[name]
DeprecationWarning,
stacklevel=2,
)
return categories[name]
raise AttributeError(f"module '{__name__}' has no attribute '{name}'") raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
else: else:
from . import PILLOW_VERSION
# Silence warning
assert PILLOW_VERSION
# categories # categories
NORMAL = 0 NORMAL = 0
SEQUENCE = 1 SEQUENCE = 1
@ -2264,7 +2247,7 @@ class Image:
if frame != 0: if frame != 0:
raise EOFError raise EOFError
def show(self, title=None, command=None): def show(self, title=None):
""" """
Displays this image. This method is mainly intended for debugging purposes. Displays this image. This method is mainly intended for debugging purposes.
@ -2284,14 +2267,7 @@ class Image:
:param title: Optional title to use for the image window, where possible. :param title: Optional title to use for the image window, where possible.
""" """
if command is not None: _show(self, title=title)
warnings.warn(
"The command parameter is deprecated and will be removed in Pillow 9 "
"(2022-01-02). Use a subclass of ImageShow.Viewer instead.",
DeprecationWarning,
)
_show(self, title=title, command=command)
def split(self): def split(self):
""" """
@ -3250,22 +3226,9 @@ def register_encoder(name, encoder):
def _show(image, **options): def _show(image, **options):
options["_internal_pillow"] = True
_showxv(image, **options)
def _showxv(image, title=None, **options):
from . import ImageShow from . import ImageShow
if "_internal_pillow" in options: ImageShow.show(image, **options)
del options["_internal_pillow"]
else:
warnings.warn(
"_showxv is deprecated and will be removed in Pillow 9 (2022-01-02). "
"Use Image.show instead.",
DeprecationWarning,
)
ImageShow.show(image, title, **options)
# -------------------------------------------------------------------- # --------------------------------------------------------------------

View File

@ -30,7 +30,6 @@
import io import io
import struct import struct
import sys import sys
import warnings
from . import Image from . import Image
from ._util import isPath from ._util import isPath
@ -67,15 +66,6 @@ def raise_oserror(error):
raise OSError(message + " when reading image file") raise OSError(message + " when reading image file")
def raise_ioerror(error):
warnings.warn(
"raise_ioerror is deprecated and will be removed in Pillow 9 (2022-01-02). "
"Use raise_oserror instead.",
DeprecationWarning,
)
return raise_oserror(error)
def _tilesort(t): def _tilesort(t):
# sort on offset # sort on offset
return t[2] return t[2]

View File

@ -13,72 +13,12 @@ Use PIL.__version__ for this Pillow version.
;-) ;-)
""" """
import sys
import warnings
from . import _version from . import _version
# VERSION was removed in Pillow 6.0.0. # VERSION was removed in Pillow 6.0.0.
__version__ = _version.__version__ # PILLOW_VERSION was removed in Pillow 9.0.0.
# PILLOW_VERSION is deprecated and will be removed in a future release.
# Use __version__ instead. # Use __version__ instead.
def _raise_version_warning(): __version__ = _version.__version__
warnings.warn(
"PILLOW_VERSION is deprecated and will be removed in Pillow 9 (2022-01-02). "
"Use __version__ instead.",
DeprecationWarning,
stacklevel=3,
)
if sys.version_info >= (3, 7):
def __getattr__(name):
if name == "PILLOW_VERSION":
_raise_version_warning()
return __version__
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
else:
class _Deprecated_Version(str):
def __str__(self):
_raise_version_warning()
return super().__str__()
def __getitem__(self, key):
_raise_version_warning()
return super().__getitem__(key)
def __eq__(self, other):
_raise_version_warning()
return super().__eq__(other)
def __ne__(self, other):
_raise_version_warning()
return super().__ne__(other)
def __gt__(self, other):
_raise_version_warning()
return super().__gt__(other)
def __lt__(self, other):
_raise_version_warning()
return super().__lt__(other)
def __ge__(self, other):
_raise_version_warning()
return super().__gt__(other)
def __le__(self, other):
_raise_version_warning()
return super().__lt__(other)
PILLOW_VERSION = _Deprecated_Version(__version__)
del _version del _version