Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/PIL/AvifImagePlugin.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

__lazy_modules__ = {"io", "os", "typing"}

import os
from io import BytesIO
from typing import IO
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/BdfFontFile.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@

from __future__ import annotations

__lazy_modules__ = {"typing"}

from typing import BinaryIO

from . import FontFile, Image
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/BlpImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@

from __future__ import annotations

__lazy_modules__ = {"io", "os", "struct", "typing"}

import abc
import os
import struct
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/BmpImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"PIL._binary", "os", "typing"}

import os
from typing import IO, Any

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/BufrStubImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"os", "typing"}

import os
from typing import IO

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/ContainerIO.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"collections.abc", "io"}

import io
from collections.abc import Iterable
from typing import IO, AnyStr, NoReturn
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/CurImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"PIL._binary"}

from . import BmpImagePlugin, Image, ImageOps
from ._binary import i16le as i16
from ._binary import i32le as i32
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/DcxImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"PIL._binary", "PIL._util"}

from . import Image
from ._binary import i32le as i32
from ._util import DeferredError
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/DdsImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

from __future__ import annotations

__lazy_modules__ = {"PIL._binary", "struct", "typing"}

import struct
import sys
from enum import IntEnum, IntFlag
Expand Down
5 changes: 4 additions & 1 deletion src/PIL/EpsImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@
#
from __future__ import annotations

__lazy_modules__ = {"PIL._binary", "io", "os", "subprocess", "tempfile", "typing"}

import io
import os
import re
import subprocess
import sys
import tempfile
from typing import IO

from . import Image, ImageFile
Expand Down Expand Up @@ -92,6 +93,8 @@ def Ghostscript(
res_x = 72.0 * width / (bbox[2] - bbox[0])
res_y = 72.0 * height / (bbox[3] - bbox[1])

import tempfile

out_fd, outfile = tempfile.mkstemp()
os.close(out_fd)

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/FitsImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"gzip", "math"}

import gzip
import math

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/FliImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"PIL._binary", "PIL._util", "os"}

import os

from . import Image, ImageFile, ImagePalette
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/FontFile.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"os", "typing"}

import os
from typing import BinaryIO

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/FpxImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"PIL._binary"}

import olefile

from . import Image, ImageFile
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/FtexImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@

from __future__ import annotations

__lazy_modules__ = {"io", "struct"}

import struct
from enum import IntEnum
from io import BytesIO
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/GbrImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
# the color depth field. This is currently unsupported by Pillow.
from __future__ import annotations

__lazy_modules__ = {"PIL._binary"}

from . import Image, ImageFile
from ._binary import i32be as i32

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/GdImageFile.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ class is not registered for use with :py:func:`PIL.Image.open()`. To open a

from __future__ import annotations

__lazy_modules__ = {"PIL._binary", "PIL._typing", "typing"}

from typing import IO

from . import Image, ImageFile, ImagePalette, UnidentifiedImageError
Expand Down
10 changes: 10 additions & 0 deletions src/PIL/GifImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@
#
from __future__ import annotations

__lazy_modules__ = {
"PIL._binary",
"PIL._util",
"functools",
"itertools",
"math",
"os",
"subprocess",
}

import itertools
import math
import os
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/GimpGradientFile.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

from __future__ import annotations

__lazy_modules__ = {"PIL._binary", "math"}

from math import log, pi, sin, sqrt

from ._binary import o8
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/GimpPaletteFile.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"io", "re"}

import re
from io import BytesIO

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/GribStubImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"os", "typing"}

import os
from typing import IO

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/Hdf5StubImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"os", "typing"}

import os
from typing import IO

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/IcnsImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"io", "os", "struct", "typing"}

import io
import os
import struct
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/IcoImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
# * https://msdn.microsoft.com/en-us/library/ms997538.aspx
from __future__ import annotations

__lazy_modules__ = {"PIL._binary", "io", "math", "warnings"}

import warnings
from io import BytesIO
from math import ceil, log
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/ImImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"PIL._util", "os", "typing"}

import os
import re
from typing import IO, Any
Expand Down
29 changes: 18 additions & 11 deletions src/PIL/Image.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,17 @@

from __future__ import annotations

__lazy_modules__ = {
"PIL._binary",
"PIL._deprecate",
"PIL._util",
"io",
"math",
"os",
"re",
"struct",
}

import abc
import atexit
import builtins
Expand All @@ -36,7 +47,6 @@
import re
import struct
import sys
import tempfile
import warnings
from collections.abc import MutableMapping
from enum import IntEnum
Expand All @@ -57,16 +67,9 @@
from ._deprecate import deprecate
from ._util import DeferredError, is_path

ElementTree: ModuleType | None
try:
from defusedxml import ElementTree
except ImportError:
ElementTree = None

TYPE_CHECKING = False
if TYPE_CHECKING:
from collections.abc import Callable, Iterator, Sequence
from types import ModuleType
from typing import Any, Literal

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -738,6 +741,8 @@ def _dump(
if not filename.endswith(suffix):
filename += suffix
else:
import tempfile

f, filename = tempfile.mkstemp(suffix)
os.close(f)

Expand Down Expand Up @@ -1584,6 +1589,11 @@ def getxmp(self) -> dict[str, Any]:

:returns: XMP tags in a dictionary.
"""
try:
from defusedxml import ElementTree
except ImportError:
warnings.warn("XMP data cannot be read without defusedxml dependency")
return {}

def get_name(tag: str) -> str:
return re.sub("^{[^}]+}", "", tag)
Expand All @@ -1608,9 +1618,6 @@ def get_value(element: Element) -> str | dict[str, Any] | None:
return element.text
return value

if ElementTree is None:
warnings.warn("XMP data cannot be read without defusedxml dependency")
return {}
if "xmp" not in self.info:
return {}
root = ElementTree.fromstring(self.info["xmp"].rstrip(b"\x00 "))
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/ImageCms.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
# below for the original description.
from __future__ import annotations

__lazy_modules__ = {"PIL._deprecate"}

import operator
import sys
from enum import IntEnum, IntFlag
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/ImageColor.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"re"}

import re
from functools import lru_cache

Expand Down
2 changes: 2 additions & 0 deletions src/PIL/ImageDraw.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"collections.abc", "math", "struct", "typing"}

import math
import struct
from collections.abc import Sequence
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/ImageDraw2.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@

from __future__ import annotations

__lazy_modules__ = {"PIL._typing", "typing"}

from typing import Any, AnyStr, BinaryIO

from . import Image, ImageColor, ImageDraw, ImageFont, ImagePath
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/ImageFile.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"PIL._util", "io", "itertools", "os", "struct"}

import abc
import io
import itertools
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/ImageFilter.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#
from __future__ import annotations

__lazy_modules__ = {"collections.abc", "functools", "typing"}

import abc
import functools
from collections.abc import Sequence
Expand Down
2 changes: 2 additions & 0 deletions src/PIL/ImageFont.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@

from __future__ import annotations

__lazy_modules__ = {"PIL._typing", "base64", "io", "os", "types", "warnings"}

import abc
import base64
import os
Expand Down
Loading
Loading