From 33e304ed66851ed7cbd6e9018764ec9ec089c25f Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 22 May 2024 19:43:00 +1000 Subject: [PATCH] Use @cached_property --- src/PIL/GifImagePlugin.py | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index eede4154994..962a9283464 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -30,6 +30,7 @@ import os import subprocess from enum import IntEnum +from functools import cached_property from . import ( Image, @@ -112,8 +113,7 @@ def _open(self) -> None: self._fp = self.fp # FIXME: hack self.__rewind = self.fp.tell() - self._n_frames = None - self._is_animated = None + self._n_frames: int | None = None self._seek(0) # get ready to read first frame @property @@ -128,24 +128,23 @@ def n_frames(self): self.seek(current) return self._n_frames - @property - def is_animated(self): - if self._is_animated is None: - if self._n_frames is not None: - self._is_animated = self._n_frames != 1 - else: - current = self.tell() - if current: - self._is_animated = True - else: - try: - self._seek(1, False) - self._is_animated = True - except EOFError: - self._is_animated = False - - self.seek(current) - return self._is_animated + @cached_property + def is_animated(self) -> bool: + if self._n_frames is not None: + return self._n_frames != 1 + + current = self.tell() + if current: + return True + + try: + self._seek(1, False) + is_animated = True + except EOFError: + is_animated = False + + self.seek(current) + return is_animated def seek(self, frame: int) -> None: if not self._seek_check(frame):