Skip to content

Commit 6377321

Browse files
authored
Merge pull request #8351 from radarhere/type_hint
2 parents a2be72d + 31638ee commit 6377321

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

Tests/test_file_gif.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,9 @@ def test_lzw_bits() -> None:
13921392
),
13931393
),
13941394
)
1395-
def test_extents(test_file, loading_strategy) -> None:
1395+
def test_extents(
1396+
test_file: str, loading_strategy: GifImagePlugin.LoadingStrategy
1397+
) -> None:
13961398
GifImagePlugin.LOADING_STRATEGY = loading_strategy
13971399
try:
13981400
with Image.open("Tests/images/" + test_file) as im:

src/PIL/PngImagePlugin.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -370,21 +370,27 @@ def add_text(
370370
# PNG image stream (IHDR/IEND)
371371

372372

373+
class _RewindState(NamedTuple):
374+
info: dict[str | tuple[int, int], Any]
375+
tile: list[ImageFile._Tile]
376+
seq_num: int | None
377+
378+
373379
class PngStream(ChunkStream):
374-
def __init__(self, fp):
380+
def __init__(self, fp: IO[bytes]) -> None:
375381
super().__init__(fp)
376382

377383
# local copies of Image attributes
378-
self.im_info = {}
379-
self.im_text = {}
384+
self.im_info: dict[str | tuple[int, int], Any] = {}
385+
self.im_text: dict[str, str | iTXt] = {}
380386
self.im_size = (0, 0)
381-
self.im_mode = None
382-
self.im_tile = None
383-
self.im_palette = None
384-
self.im_custom_mimetype = None
385-
self.im_n_frames = None
386-
self._seq_num = None
387-
self.rewind_state = None
387+
self.im_mode = ""
388+
self.im_tile: list[ImageFile._Tile] = []
389+
self.im_palette: tuple[str, bytes] | None = None
390+
self.im_custom_mimetype: str | None = None
391+
self.im_n_frames: int | None = None
392+
self._seq_num: int | None = None
393+
self.rewind_state = _RewindState({}, [], None)
388394

389395
self.text_memory = 0
390396

@@ -398,16 +404,16 @@ def check_text_memory(self, chunklen: int) -> None:
398404
raise ValueError(msg)
399405

400406
def save_rewind(self) -> None:
401-
self.rewind_state = {
402-
"info": self.im_info.copy(),
403-
"tile": self.im_tile,
404-
"seq_num": self._seq_num,
405-
}
407+
self.rewind_state = _RewindState(
408+
self.im_info.copy(),
409+
self.im_tile,
410+
self._seq_num,
411+
)
406412

407413
def rewind(self) -> None:
408-
self.im_info = self.rewind_state["info"].copy()
409-
self.im_tile = self.rewind_state["tile"]
410-
self._seq_num = self.rewind_state["seq_num"]
414+
self.im_info = self.rewind_state.info.copy()
415+
self.im_tile = self.rewind_state.tile
416+
self._seq_num = self.rewind_state.seq_num
411417

412418
def chunk_iCCP(self, pos: int, length: int) -> bytes:
413419
# ICC profile
@@ -461,11 +467,11 @@ def chunk_IHDR(self, pos: int, length: int) -> bytes:
461467
def chunk_IDAT(self, pos: int, length: int) -> NoReturn:
462468
# image data
463469
if "bbox" in self.im_info:
464-
tile = [("zip", self.im_info["bbox"], pos, self.im_rawmode)]
470+
tile = [ImageFile._Tile("zip", self.im_info["bbox"], pos, self.im_rawmode)]
465471
else:
466472
if self.im_n_frames is not None:
467473
self.im_info["default_image"] = True
468-
tile = [("zip", (0, 0) + self.im_size, pos, self.im_rawmode)]
474+
tile = [ImageFile._Tile("zip", (0, 0) + self.im_size, pos, self.im_rawmode)]
469475
self.im_tile = tile
470476
self.im_idat = length
471477
msg = "image data found"

0 commit comments

Comments
 (0)