mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-07-10 16:22:22 +03:00
Removed ImageMath eval and options parameters
This commit is contained in:
parent
0a29d6392a
commit
4301c1fde6
|
@ -2,8 +2,6 @@ from __future__ import annotations
|
||||||
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
from PIL import Image, ImageMath
|
from PIL import Image, ImageMath
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,11 +53,6 @@ def test_sanity() -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_options_deprecated() -> None:
|
|
||||||
with pytest.warns(DeprecationWarning, match="ImageMath.lambda_eval options"):
|
|
||||||
assert ImageMath.lambda_eval(lambda args: 1, images) == 1
|
|
||||||
|
|
||||||
|
|
||||||
def test_ops() -> None:
|
def test_ops() -> None:
|
||||||
assert pixel(ImageMath.lambda_eval(lambda args: args["A"] * -1, **images)) == "I -1"
|
assert pixel(ImageMath.lambda_eval(lambda args: args["A"] * -1, **images)) == "I -1"
|
||||||
|
|
||||||
|
|
|
@ -35,16 +35,6 @@ def test_sanity() -> None:
|
||||||
assert pixel(ImageMath.unsafe_eval("int(float(A)+B)", **images)) == "I 3"
|
assert pixel(ImageMath.unsafe_eval("int(float(A)+B)", **images)) == "I 3"
|
||||||
|
|
||||||
|
|
||||||
def test_eval_deprecated() -> None:
|
|
||||||
with pytest.warns(DeprecationWarning, match="ImageMath.eval"):
|
|
||||||
assert ImageMath.eval("1") == 1
|
|
||||||
|
|
||||||
|
|
||||||
def test_options_deprecated() -> None:
|
|
||||||
with pytest.warns(DeprecationWarning, match="ImageMath.unsafe_eval options"):
|
|
||||||
assert ImageMath.unsafe_eval("1", images) == 1
|
|
||||||
|
|
||||||
|
|
||||||
def test_ops() -> None:
|
def test_ops() -> None:
|
||||||
assert pixel(ImageMath.unsafe_eval("-A", **images)) == "I -1"
|
assert pixel(ImageMath.unsafe_eval("-A", **images)) == "I -1"
|
||||||
assert pixel(ImageMath.unsafe_eval("+B", **images)) == "L 2"
|
assert pixel(ImageMath.unsafe_eval("+B", **images)) == "L 2"
|
||||||
|
|
|
@ -49,14 +49,6 @@ Deprecated Use instead
|
||||||
:py:data:`sys.version_info`, and ``PIL.__version__``
|
:py:data:`sys.version_info`, and ``PIL.__version__``
|
||||||
============================================ ====================================================
|
============================================ ====================================================
|
||||||
|
|
||||||
ImageMath eval()
|
|
||||||
^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. deprecated:: 10.3.0
|
|
||||||
|
|
||||||
``ImageMath.eval()`` has been deprecated. Use :py:meth:`~PIL.ImageMath.lambda_eval` or
|
|
||||||
:py:meth:`~PIL.ImageMath.unsafe_eval` instead.
|
|
||||||
|
|
||||||
Non-image modes in ImageCms
|
Non-image modes in ImageCms
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@ -94,15 +86,6 @@ ICNS (width, height, scale) sizes
|
||||||
Setting an ICNS image size to ``(width, height, scale)`` before loading has been
|
Setting an ICNS image size to ``(width, height, scale)`` before loading has been
|
||||||
deprecated. Instead, ``load(scale)`` can be used.
|
deprecated. Instead, ``load(scale)`` can be used.
|
||||||
|
|
||||||
ImageMath.lambda_eval and ImageMath.unsafe_eval options parameter
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. deprecated:: 11.0.0
|
|
||||||
|
|
||||||
The ``options`` parameter in :py:meth:`~PIL.ImageMath.lambda_eval()` and
|
|
||||||
:py:meth:`~PIL.ImageMath.unsafe_eval()` has been deprecated. One or more keyword
|
|
||||||
arguments can be used instead.
|
|
||||||
|
|
||||||
ExifTags.IFD.Makernote
|
ExifTags.IFD.Makernote
|
||||||
^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@ -179,6 +162,16 @@ Image isImageType()
|
||||||
``Image.isImageType(im)`` has been removed. Use ``isinstance(im, Image.Image)``
|
``Image.isImageType(im)`` has been removed. Use ``isinstance(im, Image.Image)``
|
||||||
instead.
|
instead.
|
||||||
|
|
||||||
|
ImageMath.lambda_eval and ImageMath.unsafe_eval options parameter
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. deprecated:: 11.0.0
|
||||||
|
.. versionremoved:: 12.0.0
|
||||||
|
|
||||||
|
The ``options`` parameter in :py:meth:`~PIL.ImageMath.lambda_eval()` and
|
||||||
|
:py:meth:`~PIL.ImageMath.unsafe_eval()` has been removed. One or more keyword
|
||||||
|
arguments can be used instead.
|
||||||
|
|
||||||
JpegImageFile.huffman_ac and JpegImageFile.huffman_dc
|
JpegImageFile.huffman_ac and JpegImageFile.huffman_dc
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@ -208,6 +201,15 @@ removed. They were used for obtaining raw pointers to ``ImagingCore`` internals.
|
||||||
interact with C code, you can use ``Image.Image.getim()``, which returns a ``Capsule``
|
interact with C code, you can use ``Image.Image.getim()``, which returns a ``Capsule``
|
||||||
object.
|
object.
|
||||||
|
|
||||||
|
ImageMath eval()
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. deprecated:: 10.3.0
|
||||||
|
.. versionremoved:: 12.0.0
|
||||||
|
|
||||||
|
``ImageMath.eval()`` has been removed. Use :py:meth:`~PIL.ImageMath.lambda_eval` or
|
||||||
|
:py:meth:`~PIL.ImageMath.unsafe_eval` instead.
|
||||||
|
|
||||||
BGR;15, BGR 16 and BGR;24
|
BGR;15, BGR 16 and BGR;24
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@ from types import CodeType
|
||||||
from typing import Any, Callable
|
from typing import Any, Callable
|
||||||
|
|
||||||
from . import Image, _imagingmath
|
from . import Image, _imagingmath
|
||||||
from ._deprecate import deprecate
|
|
||||||
|
|
||||||
|
|
||||||
class _Operand:
|
class _Operand:
|
||||||
|
@ -233,11 +232,7 @@ ops = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def lambda_eval(
|
def lambda_eval(expression: Callable[[dict[str, Any]], Any], **kw: Any) -> Any:
|
||||||
expression: Callable[[dict[str, Any]], Any],
|
|
||||||
options: dict[str, Any] = {},
|
|
||||||
**kw: Any,
|
|
||||||
) -> Any:
|
|
||||||
"""
|
"""
|
||||||
Returns the result of an image function.
|
Returns the result of an image function.
|
||||||
|
|
||||||
|
@ -246,23 +241,13 @@ def lambda_eval(
|
||||||
:py:func:`~PIL.Image.merge` function.
|
:py:func:`~PIL.Image.merge` function.
|
||||||
|
|
||||||
:param expression: A function that receives a dictionary.
|
:param expression: A function that receives a dictionary.
|
||||||
:param options: Values to add to the function's dictionary. Deprecated.
|
|
||||||
You can instead use one or more keyword arguments.
|
|
||||||
:param **kw: Values to add to the function's dictionary.
|
:param **kw: Values to add to the function's dictionary.
|
||||||
:return: The expression result. This is usually an image object, but can
|
:return: The expression result. This is usually an image object, but can
|
||||||
also be an integer, a floating point value, or a pixel tuple,
|
also be an integer, a floating point value, or a pixel tuple,
|
||||||
depending on the expression.
|
depending on the expression.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if options:
|
|
||||||
deprecate(
|
|
||||||
"ImageMath.lambda_eval options",
|
|
||||||
12,
|
|
||||||
"ImageMath.lambda_eval keyword arguments",
|
|
||||||
)
|
|
||||||
|
|
||||||
args: dict[str, Any] = ops.copy()
|
args: dict[str, Any] = ops.copy()
|
||||||
args.update(options)
|
|
||||||
args.update(kw)
|
args.update(kw)
|
||||||
for k, v in args.items():
|
for k, v in args.items():
|
||||||
if isinstance(v, Image.Image):
|
if isinstance(v, Image.Image):
|
||||||
|
@ -275,11 +260,7 @@ def lambda_eval(
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
def unsafe_eval(
|
def unsafe_eval(expression: str, **kw: Any) -> Any:
|
||||||
expression: str,
|
|
||||||
options: dict[str, Any] = {},
|
|
||||||
**kw: Any,
|
|
||||||
) -> Any:
|
|
||||||
"""
|
"""
|
||||||
Evaluates an image expression. This uses Python's ``eval()`` function to process
|
Evaluates an image expression. This uses Python's ``eval()`` function to process
|
||||||
the expression string, and carries the security risks of doing so. It is not
|
the expression string, and carries the security risks of doing so. It is not
|
||||||
|
@ -291,29 +272,19 @@ def unsafe_eval(
|
||||||
:py:func:`~PIL.Image.merge` function.
|
:py:func:`~PIL.Image.merge` function.
|
||||||
|
|
||||||
:param expression: A string containing a Python-style expression.
|
:param expression: A string containing a Python-style expression.
|
||||||
:param options: Values to add to the evaluation context. Deprecated.
|
|
||||||
You can instead use one or more keyword arguments.
|
|
||||||
:param **kw: Values to add to the evaluation context.
|
:param **kw: Values to add to the evaluation context.
|
||||||
:return: The evaluated expression. This is usually an image object, but can
|
:return: The evaluated expression. This is usually an image object, but can
|
||||||
also be an integer, a floating point value, or a pixel tuple,
|
also be an integer, a floating point value, or a pixel tuple,
|
||||||
depending on the expression.
|
depending on the expression.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if options:
|
|
||||||
deprecate(
|
|
||||||
"ImageMath.unsafe_eval options",
|
|
||||||
12,
|
|
||||||
"ImageMath.unsafe_eval keyword arguments",
|
|
||||||
)
|
|
||||||
|
|
||||||
# build execution namespace
|
# build execution namespace
|
||||||
args: dict[str, Any] = ops.copy()
|
args: dict[str, Any] = ops.copy()
|
||||||
for k in [*options, *kw]:
|
for k in kw:
|
||||||
if "__" in k or hasattr(builtins, k):
|
if "__" in k or hasattr(builtins, k):
|
||||||
msg = f"'{k}' not allowed"
|
msg = f"'{k}' not allowed"
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
|
||||||
args.update(options)
|
|
||||||
args.update(kw)
|
args.update(kw)
|
||||||
for k, v in args.items():
|
for k, v in args.items():
|
||||||
if isinstance(v, Image.Image):
|
if isinstance(v, Image.Image):
|
||||||
|
@ -337,32 +308,3 @@ def unsafe_eval(
|
||||||
return out.im
|
return out.im
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
def eval(
|
|
||||||
expression: str,
|
|
||||||
_dict: dict[str, Any] = {},
|
|
||||||
**kw: Any,
|
|
||||||
) -> Any:
|
|
||||||
"""
|
|
||||||
Evaluates an image expression.
|
|
||||||
|
|
||||||
Deprecated. Use lambda_eval() or unsafe_eval() instead.
|
|
||||||
|
|
||||||
:param expression: A string containing a Python-style expression.
|
|
||||||
:param _dict: Values to add to the evaluation context. You
|
|
||||||
can either use a dictionary, or one or more keyword
|
|
||||||
arguments.
|
|
||||||
:return: The evaluated expression. This is usually an image object, but can
|
|
||||||
also be an integer, a floating point value, or a pixel tuple,
|
|
||||||
depending on the expression.
|
|
||||||
|
|
||||||
.. deprecated:: 10.3.0
|
|
||||||
"""
|
|
||||||
|
|
||||||
deprecate(
|
|
||||||
"ImageMath.eval",
|
|
||||||
12,
|
|
||||||
"ImageMath.lambda_eval or ImageMath.unsafe_eval",
|
|
||||||
)
|
|
||||||
return unsafe_eval(expression, _dict, **kw)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user