File tree Expand file tree Collapse file tree 1 file changed +19
-20
lines changed
Expand file tree Collapse file tree 1 file changed +19
-20
lines changed Original file line number Diff line number Diff line change 3030import os
3131import subprocess
3232from enum import IntEnum
33+ from functools import cached_property
3334
3435from . import (
3536 Image ,
@@ -112,8 +113,7 @@ def _open(self) -> None:
112113
113114 self ._fp = self .fp # FIXME: hack
114115 self .__rewind = self .fp .tell ()
115- self ._n_frames = None
116- self ._is_animated = None
116+ self ._n_frames : int | None = None
117117 self ._seek (0 ) # get ready to read first frame
118118
119119 @property
@@ -128,24 +128,23 @@ def n_frames(self):
128128 self .seek (current )
129129 return self ._n_frames
130130
131- @property
132- def is_animated (self ):
133- if self ._is_animated is None :
134- if self ._n_frames is not None :
135- self ._is_animated = self ._n_frames != 1
136- else :
137- current = self .tell ()
138- if current :
139- self ._is_animated = True
140- else :
141- try :
142- self ._seek (1 , False )
143- self ._is_animated = True
144- except EOFError :
145- self ._is_animated = False
146-
147- self .seek (current )
148- return self ._is_animated
131+ @cached_property
132+ def is_animated (self ) -> bool :
133+ if self ._n_frames is not None :
134+ return self ._n_frames != 1
135+
136+ current = self .tell ()
137+ if current :
138+ return True
139+
140+ try :
141+ self ._seek (1 , False )
142+ is_animated = True
143+ except EOFError :
144+ is_animated = False
145+
146+ self .seek (current )
147+ return is_animated
149148
150149 def seek (self , frame : int ) -> None :
151150 if not self ._seek_check (frame ):
You can’t perform that action at this time.
0 commit comments