mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 09:57:43 +03:00 
			
		
		
		
	Deprecated constants in favour of enums
This commit is contained in:
		
							parent
							
								
									f8e4e9c2dd
								
							
						
					
					
						commit
						ed8073e846
					
				| 
						 | 
				
			
			@ -635,3 +635,13 @@ def test_apng_save_blend(tmp_path):
 | 
			
		|||
    with Image.open(test_file) as im:
 | 
			
		||||
        im.seek(2)
 | 
			
		||||
        assert im.getpixel((0, 0)) == (0, 255, 0, 255)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_constants_deprecation():
 | 
			
		||||
    for enum, prefix in {
 | 
			
		||||
        PngImagePlugin.Disposal: "APNG_DISPOSE_",
 | 
			
		||||
        PngImagePlugin.Blend: "APNG_BLEND_",
 | 
			
		||||
    }.items():
 | 
			
		||||
        for name in enum.__members__:
 | 
			
		||||
            with pytest.warns(DeprecationWarning):
 | 
			
		||||
                assert getattr(PngImagePlugin, prefix + name) == enum[name]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
import pytest
 | 
			
		||||
 | 
			
		||||
from PIL import Image
 | 
			
		||||
from PIL import BlpImagePlugin, Image
 | 
			
		||||
 | 
			
		||||
from .helper import assert_image_equal_tofile
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -37,3 +37,14 @@ def test_crashes(test_file):
 | 
			
		|||
        with Image.open(f) as im:
 | 
			
		||||
            with pytest.raises(OSError):
 | 
			
		||||
                im.load()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_constants_deprecation():
 | 
			
		||||
    for enum, prefix in {
 | 
			
		||||
        BlpImagePlugin.Format: "BLP_FORMAT_",
 | 
			
		||||
        BlpImagePlugin.Encoding: "BLP_ENCODING_",
 | 
			
		||||
        BlpImagePlugin.AlphaEncoding: "BLP_ALPHA_ENCODING_",
 | 
			
		||||
    }.items():
 | 
			
		||||
        for name in enum.__members__:
 | 
			
		||||
            with pytest.warns(DeprecationWarning):
 | 
			
		||||
                assert getattr(BlpImagePlugin, prefix + name) == enum[name]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,6 @@
 | 
			
		|||
from PIL import Image
 | 
			
		||||
import pytest
 | 
			
		||||
 | 
			
		||||
from PIL import FtexImagePlugin, Image
 | 
			
		||||
 | 
			
		||||
from .helper import assert_image_equal_tofile, assert_image_similar
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -12,3 +14,12 @@ def test_load_dxt1():
 | 
			
		|||
    with Image.open("Tests/images/ftex_dxt1.ftc") as im:
 | 
			
		||||
        with Image.open("Tests/images/ftex_dxt1.png") as target:
 | 
			
		||||
            assert_image_similar(im, target.convert("RGBA"), 15)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_constants_deprecation():
 | 
			
		||||
    for enum, prefix in {
 | 
			
		||||
        FtexImagePlugin.Format: "FORMAT_",
 | 
			
		||||
    }.items():
 | 
			
		||||
        for name in enum.__members__:
 | 
			
		||||
            with pytest.warns(DeprecationWarning):
 | 
			
		||||
                assert getattr(FtexImagePlugin, prefix + name) == enum[name]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -802,6 +802,31 @@ class TestImage:
 | 
			
		|||
        with pytest.warns(DeprecationWarning):
 | 
			
		||||
            assert Image.CONTAINER == 2
 | 
			
		||||
 | 
			
		||||
    def test_constants_deprecation(self):
 | 
			
		||||
        with pytest.warns(DeprecationWarning):
 | 
			
		||||
            assert Image.NEAREST == 0
 | 
			
		||||
        with pytest.warns(DeprecationWarning):
 | 
			
		||||
            assert Image.NONE == 0
 | 
			
		||||
 | 
			
		||||
        with pytest.warns(DeprecationWarning):
 | 
			
		||||
            assert Image.LINEAR == Image.Resampling.BILINEAR
 | 
			
		||||
        with pytest.warns(DeprecationWarning):
 | 
			
		||||
            assert Image.CUBIC == Image.Resampling.BICUBIC
 | 
			
		||||
        with pytest.warns(DeprecationWarning):
 | 
			
		||||
            assert Image.ANTIALIAS == Image.Resampling.LANCZOS
 | 
			
		||||
 | 
			
		||||
        for enum in (
 | 
			
		||||
            Image.Transpose,
 | 
			
		||||
            Image.Transform,
 | 
			
		||||
            Image.Resampling,
 | 
			
		||||
            Image.Dither,
 | 
			
		||||
            Image.Palette,
 | 
			
		||||
            Image.Quantize,
 | 
			
		||||
        ):
 | 
			
		||||
            for name in enum.__members__:
 | 
			
		||||
                with pytest.warns(DeprecationWarning):
 | 
			
		||||
                    assert getattr(Image, name) == enum[name]
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.parametrize(
 | 
			
		||||
        "path",
 | 
			
		||||
        [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -593,3 +593,13 @@ def test_auxiliary_channels_isolated():
 | 
			
		|||
                )
 | 
			
		||||
 | 
			
		||||
                assert_image_equal(test_image.convert(dst_format[2]), reference_image)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_constants_deprecation():
 | 
			
		||||
    for enum, prefix in {
 | 
			
		||||
        ImageCms.Intent: "INTENT_",
 | 
			
		||||
        ImageCms.Direction: "DIRECTION_",
 | 
			
		||||
    }.items():
 | 
			
		||||
        for name in enum.__members__:
 | 
			
		||||
            with pytest.warns(DeprecationWarning):
 | 
			
		||||
                assert getattr(ImageCms, prefix + name) == enum[name]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1022,3 +1022,12 @@ def test_oom(test_file):
 | 
			
		|||
        font = ImageFont.truetype(BytesIO(f.read()))
 | 
			
		||||
        with pytest.raises(Image.DecompressionBombError):
 | 
			
		||||
            font.getmask("Test Text")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_constants_deprecation():
 | 
			
		||||
    for enum, prefix in {
 | 
			
		||||
        ImageFont.Layout: "LAYOUT_",
 | 
			
		||||
    }.items():
 | 
			
		||||
        for name in enum.__members__:
 | 
			
		||||
            with pytest.warns(DeprecationWarning):
 | 
			
		||||
                assert getattr(ImageFont, prefix + name) == enum[name]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@ BLP files come in many different flavours:
 | 
			
		|||
"""
 | 
			
		||||
 | 
			
		||||
import struct
 | 
			
		||||
import warnings
 | 
			
		||||
from enum import IntEnum
 | 
			
		||||
from io import BytesIO
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -52,11 +53,31 @@ class AlphaEncoding(IntEnum):
 | 
			
		|||
    DXT5 = 7
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
globals().update({"BLP_FORMAT_" + k: v for k, v in Format.__members__.items()})
 | 
			
		||||
globals().update({"BLP_ENCODING_" + k: v for k, v in Encoding.__members__.items()})
 | 
			
		||||
globals().update(
 | 
			
		||||
    {"BLP_ALPHA_ENCODING_" + k: v for k, v in AlphaEncoding.__members__.items()}
 | 
			
		||||
def __getattr__(name):
 | 
			
		||||
    deprecated = "deprecated and will be removed in Pillow 10 (2023-07-01). "
 | 
			
		||||
    for enum, prefix in {
 | 
			
		||||
        Format: "BLP_FORMAT_",
 | 
			
		||||
        Encoding: "BLP_ENCODING_",
 | 
			
		||||
        AlphaEncoding: "BLP_ALPHA_ENCODING_",
 | 
			
		||||
    }.items():
 | 
			
		||||
        if name.startswith(prefix):
 | 
			
		||||
            name = name[len(prefix) :]
 | 
			
		||||
            if name in enum.__members__:
 | 
			
		||||
                warnings.warn(
 | 
			
		||||
                    prefix
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " is "
 | 
			
		||||
                    + deprecated
 | 
			
		||||
                    + "Use "
 | 
			
		||||
                    + enum.__name__
 | 
			
		||||
                    + "."
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " instead.",
 | 
			
		||||
                    DeprecationWarning,
 | 
			
		||||
                    stacklevel=2,
 | 
			
		||||
                )
 | 
			
		||||
                return enum[name]
 | 
			
		||||
    raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def unpack_565(i):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,6 +52,7 @@ Note: All data is stored in little-Endian (Intel) byte order.
 | 
			
		|||
"""
 | 
			
		||||
 | 
			
		||||
import struct
 | 
			
		||||
import warnings
 | 
			
		||||
from enum import IntEnum
 | 
			
		||||
from io import BytesIO
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +66,27 @@ class Format(IntEnum):
 | 
			
		|||
    UNCOMPRESSED = 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
globals().update({"FORMAT_" + k: v for k, v in Format.__members__.items()})
 | 
			
		||||
def __getattr__(name):
 | 
			
		||||
    deprecated = "deprecated and will be removed in Pillow 10 (2023-07-01). "
 | 
			
		||||
    for enum, prefix in {Format: "FORMAT_"}.items():
 | 
			
		||||
        if name.startswith(prefix):
 | 
			
		||||
            name = name[len(prefix) :]
 | 
			
		||||
            if name in enum.__members__:
 | 
			
		||||
                warnings.warn(
 | 
			
		||||
                    prefix
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " is "
 | 
			
		||||
                    + deprecated
 | 
			
		||||
                    + "Use "
 | 
			
		||||
                    + enum.__name__
 | 
			
		||||
                    + "."
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " instead.",
 | 
			
		||||
                    DeprecationWarning,
 | 
			
		||||
                    stacklevel=2,
 | 
			
		||||
                )
 | 
			
		||||
                return enum[name]
 | 
			
		||||
    raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FtexImageFile(ImageFile.ImageFile):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,15 +54,57 @@ from ._util import deferred_error, isPath
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def __getattr__(name):
 | 
			
		||||
    deprecated = "deprecated and will be removed in Pillow 10 (2023-07-01). "
 | 
			
		||||
    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-07-01). Use is_animated instead.",
 | 
			
		||||
            "Image categories are " + deprecated + "Use is_animated instead.",
 | 
			
		||||
            DeprecationWarning,
 | 
			
		||||
            stacklevel=2,
 | 
			
		||||
        )
 | 
			
		||||
        return categories[name]
 | 
			
		||||
    elif name in ("NEAREST", "NONE"):
 | 
			
		||||
        warnings.warn(
 | 
			
		||||
            name
 | 
			
		||||
            + " is "
 | 
			
		||||
            + deprecated
 | 
			
		||||
            + "Use Resampling.NEAREST or Dither.NONE instead.",
 | 
			
		||||
            DeprecationWarning,
 | 
			
		||||
            stacklevel=2,
 | 
			
		||||
        )
 | 
			
		||||
        return 0
 | 
			
		||||
    old_resampling = {
 | 
			
		||||
        "LINEAR": "BILINEAR",
 | 
			
		||||
        "CUBIC": "BICUBIC",
 | 
			
		||||
        "ANTIALIAS": "LANCZOS",
 | 
			
		||||
    }
 | 
			
		||||
    if name in old_resampling:
 | 
			
		||||
        warnings.warn(
 | 
			
		||||
            name
 | 
			
		||||
            + " is "
 | 
			
		||||
            + deprecated
 | 
			
		||||
            + "Use Resampling."
 | 
			
		||||
            + old_resampling[name]
 | 
			
		||||
            + " instead.",
 | 
			
		||||
            DeprecationWarning,
 | 
			
		||||
            stacklevel=2,
 | 
			
		||||
        )
 | 
			
		||||
        return Resampling[old_resampling[name]]
 | 
			
		||||
    for enum in (Transpose, Transform, Resampling, Dither, Palette, Quantize):
 | 
			
		||||
        if name in enum.__members__:
 | 
			
		||||
            warnings.warn(
 | 
			
		||||
                name
 | 
			
		||||
                + " is "
 | 
			
		||||
                + deprecated
 | 
			
		||||
                + "Use "
 | 
			
		||||
                + enum.__name__
 | 
			
		||||
                + "."
 | 
			
		||||
                + name
 | 
			
		||||
                + " instead.",
 | 
			
		||||
                DeprecationWarning,
 | 
			
		||||
                stacklevel=2,
 | 
			
		||||
            )
 | 
			
		||||
            return enum[name]
 | 
			
		||||
    raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -199,10 +241,6 @@ class Quantize(IntEnum):
 | 
			
		|||
    LIBIMAGEQUANT = 3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
for enum in (Transpose, Transform, Resampling, Dither, Palette, Quantize):
 | 
			
		||||
    globals().update(enum.__members__)
 | 
			
		||||
NEAREST = NONE = 0
 | 
			
		||||
 | 
			
		||||
if hasattr(core, "DEFAULT_STRATEGY"):
 | 
			
		||||
    DEFAULT_STRATEGY = core.DEFAULT_STRATEGY
 | 
			
		||||
    FILTERED = core.FILTERED
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@
 | 
			
		|||
# below for the original description.
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import warnings
 | 
			
		||||
from enum import IntEnum
 | 
			
		||||
 | 
			
		||||
from PIL import Image
 | 
			
		||||
| 
						 | 
				
			
			@ -115,8 +116,28 @@ class Direction(IntEnum):
 | 
			
		|||
    PROOF = 2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
globals().update({"INTENT_" + k: v for k, v in Intent.__members__.items()})
 | 
			
		||||
globals().update({"DIRECTION_" + k: v for k, v in Direction.__members__.items()})
 | 
			
		||||
def __getattr__(name):
 | 
			
		||||
    deprecated = "deprecated and will be removed in Pillow 10 (2023-07-01). "
 | 
			
		||||
    for enum, prefix in {Intent: "INTENT_", Direction: "DIRECTION_"}.items():
 | 
			
		||||
        if name.startswith(prefix):
 | 
			
		||||
            name = name[len(prefix) :]
 | 
			
		||||
            if name in enum.__members__:
 | 
			
		||||
                warnings.warn(
 | 
			
		||||
                    prefix
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " is "
 | 
			
		||||
                    + deprecated
 | 
			
		||||
                    + "Use "
 | 
			
		||||
                    + enum.__name__
 | 
			
		||||
                    + "."
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " instead.",
 | 
			
		||||
                    DeprecationWarning,
 | 
			
		||||
                    stacklevel=2,
 | 
			
		||||
                )
 | 
			
		||||
                return enum[name]
 | 
			
		||||
    raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# flags
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,7 @@
 | 
			
		|||
import base64
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
import warnings
 | 
			
		||||
from enum import IntEnum
 | 
			
		||||
from io import BytesIO
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +41,27 @@ class Layout(IntEnum):
 | 
			
		|||
    RAQM = 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
globals().update({"LAYOUT_" + k: v for k, v in Layout.__members__.items()})
 | 
			
		||||
def __getattr__(name):
 | 
			
		||||
    deprecated = "deprecated and will be removed in Pillow 10 (2023-07-01). "
 | 
			
		||||
    for enum, prefix in {Layout: "LAYOUT_"}.items():
 | 
			
		||||
        if name.startswith(prefix):
 | 
			
		||||
            name = name[len(prefix) :]
 | 
			
		||||
            if name in enum.__members__:
 | 
			
		||||
                warnings.warn(
 | 
			
		||||
                    prefix
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " is "
 | 
			
		||||
                    + deprecated
 | 
			
		||||
                    + "Use "
 | 
			
		||||
                    + enum.__name__
 | 
			
		||||
                    + "."
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " instead.",
 | 
			
		||||
                    DeprecationWarning,
 | 
			
		||||
                    stacklevel=2,
 | 
			
		||||
                )
 | 
			
		||||
                return enum[name]
 | 
			
		||||
    raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class _imagingft_not_installed:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -130,8 +130,27 @@ class Blend(IntEnum):
 | 
			
		|||
    """
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
globals().update({"APNG_DISPOSE_" + k: v for k, v in Disposal.__members__.items()})
 | 
			
		||||
globals().update(Blend.__members__)
 | 
			
		||||
def __getattr__(name):
 | 
			
		||||
    deprecated = "deprecated and will be removed in Pillow 10 (2023-07-01). "
 | 
			
		||||
    for enum, prefix in {Disposal: "APNG_DISPOSE_", Blend: "APNG_BLEND_"}.items():
 | 
			
		||||
        if name.startswith(prefix):
 | 
			
		||||
            name = name[len(prefix) :]
 | 
			
		||||
            if name in enum.__members__:
 | 
			
		||||
                warnings.warn(
 | 
			
		||||
                    prefix
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " is "
 | 
			
		||||
                    + deprecated
 | 
			
		||||
                    + "Use "
 | 
			
		||||
                    + enum.__name__
 | 
			
		||||
                    + "."
 | 
			
		||||
                    + name
 | 
			
		||||
                    + " instead.",
 | 
			
		||||
                    DeprecationWarning,
 | 
			
		||||
                    stacklevel=2,
 | 
			
		||||
                )
 | 
			
		||||
                return enum[name]
 | 
			
		||||
    raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _safe_zlib_decompress(s):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user