Merge pull request #8037 from radarhere/cached_property

This commit is contained in:
Hugo van Kemenade 2024-05-24 14:19:54 +03:00 committed by GitHub
commit 3c2d36e113
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -30,6 +30,7 @@ import math
import os
import subprocess
from enum import IntEnum
from functools import cached_property
from . import (
Image,
@ -112,8 +113,7 @@ class GifImageFile(ImageFile.ImageFile):
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 @@ class GifImageFile(ImageFile.ImageFile):
self.seek(current)
return self._n_frames
@property
def is_animated(self):
if self._is_animated is None:
@cached_property
def is_animated(self) -> bool:
if self._n_frames is not None:
self._is_animated = self._n_frames != 1
else:
return self._n_frames != 1
current = self.tell()
if current:
self._is_animated = True
else:
return True
try:
self._seek(1, False)
self._is_animated = True
is_animated = True
except EOFError:
self._is_animated = False
is_animated = False
self.seek(current)
return self._is_animated
return is_animated
def seek(self, frame: int) -> None:
if not self._seek_check(frame):