Skip to content

Commit

Permalink
Merge pull request #7716 from radarhere/type_hints
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk committed Jan 15, 2024
2 parents ed9e29d + 575edbe commit fd5df78
Show file tree
Hide file tree
Showing 10 changed files with 40 additions and 21 deletions.
4 changes: 2 additions & 2 deletions src/PIL/Image.py
Original file line number Diff line number Diff line change
Expand Up @@ -3437,7 +3437,7 @@ def register_open(id, factory, accept=None) -> None:
OPEN[id] = factory, accept


def register_mime(id, mimetype):
def register_mime(id: str, mimetype: str) -> None:
"""
Registers an image MIME type by populating ``Image.MIME``. This function
should not be used in application code.
Expand All @@ -3452,7 +3452,7 @@ def register_mime(id, mimetype):
MIME[id.upper()] = mimetype


def register_save(id, driver):
def register_save(id: str, driver) -> None:
"""
Registers an image save function. This function should not be
used in application code.
Expand Down
2 changes: 1 addition & 1 deletion src/PIL/ImageFile.py
Original file line number Diff line number Diff line change
Expand Up @@ -514,7 +514,7 @@ def close(self):
# --------------------------------------------------------------------


def _save(im, fp, tile, bufsize=0):
def _save(im, fp, tile, bufsize=0) -> None:
"""Helper to save image based on tile list
:param im: Image object.
Expand Down
2 changes: 1 addition & 1 deletion src/PIL/ImagePalette.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ def save(self, fp):
# Internal


def raw(rawmode, data):
def raw(rawmode, data) -> ImagePalette:
palette = ImagePalette()
palette.rawmode = rawmode
palette.palette = data
Expand Down
8 changes: 5 additions & 3 deletions src/PIL/McIdasImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
from . import Image, ImageFile


def _accept(s):
return s[:8] == b"\x00\x00\x00\x00\x00\x00\x00\x04"
def _accept(prefix: bytes) -> bool:
return prefix[:8] == b"\x00\x00\x00\x00\x00\x00\x00\x04"


##
Expand All @@ -34,8 +34,10 @@ class McIdasImageFile(ImageFile.ImageFile):
format = "MCIDAS"
format_description = "McIdas area file"

def _open(self):
def _open(self) -> None:
# parse area file directory
assert self.fp is not None

s = self.fp.read(256)
if not _accept(s) or len(s) != 256:
msg = "not an McIdas area file"
Expand Down
8 changes: 6 additions & 2 deletions src/PIL/PcdImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,10 @@ class PcdImageFile(ImageFile.ImageFile):
format = "PCD"
format_description = "Kodak PhotoCD"

def _open(self):
def _open(self) -> None:
# rough
assert self.fp is not None

self.fp.seek(2048)
s = self.fp.read(2048)

Expand All @@ -47,9 +49,11 @@ def _open(self):
self._size = 768, 512 # FIXME: not correct for rotated images!
self.tile = [("pcd", (0, 0) + self.size, 96 * 2048, None)]

def load_end(self):
def load_end(self) -> None:
if self.tile_post_rotate:
# Handle rotated PCDs
assert self.im is not None

self.im = self.im.rotate(self.tile_post_rotate)
self._size = self.im.size

Expand Down
10 changes: 7 additions & 3 deletions src/PIL/PcxImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
logger = logging.getLogger(__name__)


def _accept(prefix):
def _accept(prefix: bytes) -> bool:
return prefix[0] == 10 and prefix[1] in [0, 2, 3, 5]


Expand All @@ -49,8 +49,10 @@ class PcxImageFile(ImageFile.ImageFile):
format = "PCX"
format_description = "Paintbrush"

def _open(self):
def _open(self) -> None:
# header
assert self.fp is not None

s = self.fp.read(128)
if not _accept(s):
msg = "not a PCX file"
Expand Down Expand Up @@ -141,7 +143,7 @@ def _open(self):
}


def _save(im, fp, filename):
def _save(im: Image.Image, fp: io.BytesIO, filename: str) -> None:
try:
version, bits, planes, rawmode = SAVE[im.mode]
except KeyError as e:
Expand Down Expand Up @@ -199,6 +201,8 @@ def _save(im, fp, filename):

if im.mode == "P":
# colour palette
assert im.im is not None

fp.write(o8(12))
palette = im.im.getpalette("RGB", "RGB")
palette += b"\x00" * (768 - len(palette))
Expand Down
6 changes: 4 additions & 2 deletions src/PIL/PixarImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
# helpers


def _accept(prefix):
def _accept(prefix: bytes) -> bool:
return prefix[:4] == b"\200\350\000\000"


Expand All @@ -39,8 +39,10 @@ class PixarImageFile(ImageFile.ImageFile):
format = "PIXAR"
format_description = "PIXAR raster image"

def _open(self):
def _open(self) -> None:
# assuming a 4-byte magic label
assert self.fp is not None

s = self.fp.read(4)
if not _accept(s):
msg = "not a PIXAR file"
Expand Down
6 changes: 4 additions & 2 deletions src/PIL/SunImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from ._binary import i32be as i32


def _accept(prefix):
def _accept(prefix: bytes) -> bool:
return len(prefix) >= 4 and i32(prefix) == 0x59A66A95


Expand All @@ -33,7 +33,7 @@ class SunImageFile(ImageFile.ImageFile):
format = "SUN"
format_description = "Sun Raster File"

def _open(self):
def _open(self) -> None:
# The Sun Raster file header is 32 bytes in length
# and has the following format:

Expand All @@ -49,6 +49,8 @@ def _open(self):
# DWORD ColorMapLength; /* Size of the color map in bytes */
# } SUNRASTER;

assert self.fp is not None

# HEAD
s = self.fp.read(32)
if not _accept(s):
Expand Down
6 changes: 4 additions & 2 deletions src/PIL/XVThumbImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
)


def _accept(prefix):
def _accept(prefix: bytes) -> bool:
return prefix[:6] == _MAGIC


Expand All @@ -45,8 +45,10 @@ class XVThumbImageFile(ImageFile.ImageFile):
format = "XVThumb"
format_description = "XV thumbnail image"

def _open(self):
def _open(self) -> None:
# check magic
assert self.fp is not None

if not _accept(self.fp.read(6)):
msg = "not an XV thumbnail file"
raise SyntaxError(msg)
Expand Down
9 changes: 6 additions & 3 deletions src/PIL/XbmImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from __future__ import annotations

import re
from io import BytesIO

from . import Image, ImageFile

Expand All @@ -36,7 +37,7 @@
)


def _accept(prefix):
def _accept(prefix: bytes) -> bool:
return prefix.lstrip()[:7] == b"#define"


Expand All @@ -48,7 +49,9 @@ class XbmImageFile(ImageFile.ImageFile):
format = "XBM"
format_description = "X11 Bitmap"

def _open(self):
def _open(self) -> None:
assert self.fp is not None

m = xbm_head.match(self.fp.read(512))

if not m:
Expand All @@ -67,7 +70,7 @@ def _open(self):
self.tile = [("xbm", (0, 0) + self.size, m.end(), None)]


def _save(im, fp, filename):
def _save(im: Image.Image, fp: BytesIO, filename: str) -> None:
if im.mode != "1":
msg = f"cannot write mode {im.mode} as XBM"
raise OSError(msg)
Expand Down

0 comments on commit fd5df78

Please sign in to comment.