Added deprecation warnings

This commit is contained in:
Andrew Murray 2021-03-28 15:51:28 +11:00
parent 2d8658bd84
commit 71cd97a519
3 changed files with 44 additions and 8 deletions

View File

@ -1,6 +1,7 @@
import io import io
import os import os
import shutil import shutil
import sys
import tempfile import tempfile
import pytest import pytest
@ -769,6 +770,20 @@ class TestImage:
reloaded_exif.load(exif.tobytes()) reloaded_exif.load(exif.tobytes())
assert reloaded_exif.get_ifd(0x8769) == exif.get_ifd(0x8769) assert reloaded_exif.get_ifd(0x8769) == exif.get_ifd(0x8769)
@pytest.mark.skipif(
sys.version_info < (3, 7), reason="Python 3.7 or greater required"
)
def test_categories_deprecation(self):
with pytest.warns(DeprecationWarning):
assert hopper().category == 0
with pytest.warns(DeprecationWarning):
assert Image.NORMAL == 0
with pytest.warns(DeprecationWarning):
assert Image.SEQUENCE == 1
with pytest.warns(DeprecationWarning):
assert Image.CONTAINER == 2
@pytest.mark.parametrize( @pytest.mark.parametrize(
"test_module", "test_module",
[PIL, Image], [PIL, Image],

View File

@ -59,6 +59,16 @@ if sys.version_info >= (3, 7):
if name == "PILLOW_VERSION": if name == "PILLOW_VERSION":
_raise_version_warning() _raise_version_warning()
return __version__ return __version__
else:
categories = {"NORMAL": 0, "SEQUENCE": 1, "CONTAINER": 2}
if name in categories:
warnings.warn(
"Image categories are deprecated and will be removed in Pillow 10 "
"(2023-01-02). Use is_animated instead.",
DeprecationWarning,
stacklevel=2,
)
return categories[name]
raise AttributeError(f"module '{__name__}' has no attribute '{name}'") raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
@ -69,6 +79,11 @@ else:
# Silence warning # Silence warning
assert PILLOW_VERSION assert PILLOW_VERSION
# categories
NORMAL = 0
SEQUENCE = 1
CONTAINER = 2
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -187,11 +202,6 @@ MAXCOVERAGE = 1
FASTOCTREE = 2 FASTOCTREE = 2
LIBIMAGEQUANT = 3 LIBIMAGEQUANT = 3
# categories
NORMAL = 0
SEQUENCE = 1
CONTAINER = 2
if hasattr(core, "DEFAULT_STRATEGY"): if hasattr(core, "DEFAULT_STRATEGY"):
DEFAULT_STRATEGY = core.DEFAULT_STRATEGY DEFAULT_STRATEGY = core.DEFAULT_STRATEGY
FILTERED = core.FILTERED FILTERED = core.FILTERED
@ -535,11 +545,22 @@ class Image:
self._size = (0, 0) self._size = (0, 0)
self.palette = None self.palette = None
self.info = {} self.info = {}
self.category = NORMAL self._category = 0
self.readonly = 0 self.readonly = 0
self.pyaccess = None self.pyaccess = None
self._exif = None self._exif = None
def __getattr__(self, name):
if name == "category":
warnings.warn(
"Image categories are deprecated and will be removed in Pillow 10 "
"(2023-01-02). Use is_animated instead.",
DeprecationWarning,
stacklevel=2,
)
return self._category
raise AttributeError(name)
@property @property
def width(self): def width(self):
return self.size[0] return self.size[0]
@ -648,7 +669,7 @@ class Image:
and self.mode == other.mode and self.mode == other.mode
and self.size == other.size and self.size == other.size
and self.info == other.info and self.info == other.info
and self.category == other.category and self._category == other._category
and self.readonly == other.readonly and self.readonly == other.readonly
and self.getpalette() == other.getpalette() and self.getpalette() == other.getpalette()
and self.tobytes() == other.tobytes() and self.tobytes() == other.tobytes()

View File

@ -68,7 +68,7 @@ class MicImageFile(TiffImagePlugin.TiffImageFile):
self.is_animated = self._n_frames > 1 self.is_animated = self._n_frames > 1
if len(self.images) > 1: if len(self.images) > 1:
self.category = Image.CONTAINER self._category = Image.CONTAINER
self.seek(0) self.seek(0)