improved Timer class

This commit is contained in:
Daniel Langbein 2025-02-23 21:12:26 +01:00
parent d14a649997
commit 4f0adc181a
Signed by: langfingaz
GPG Key ID: 6C47C753F0823002

View File

@ -1,58 +1,81 @@
import time
class Timer:
class SimpleTimer:
def __init__(self) -> None:
self.start_seconds: float | None= None
self.pause_timer: Timer | None = None
self.start_seconds: float = 0
self.started = False
def start(self) -> None:
"""
Start time measurement
"""
if not self.started:
self.start_seconds = self.current_time()
self.started = True
def is_started(self) -> bool:
"""
:return: Weather time measurement has been started.
"""
return self.start_seconds is not None
return self.started
def read(self) -> float:
"""
Return measured time in seconds.
"""
if self.started:
end_seconds = self.current_time()
delta = end_seconds - self.start_seconds
return delta
else:
raise ValueError(f'{self.__class__.__name__} has to be started before there is a time measurement.')
def reset(self) -> None:
self.started = False
@classmethod
def current_time(cls):
return time.time()
class Timer(SimpleTimer):
def __init__(self) -> None:
super().__init__()
self.pause_timer = SimpleTimer()
def pause(self) -> None:
"""
Pause time measurement.
"""
self.pause_timer = Timer()
self.pause_timer.start()
def is_paused(self) -> bool:
"""
:return: Weather time measurement is paused.
"""
return self.pause_timer is not None
return self.pause_timer.is_started()
def resume(self) -> None:
"""
Resumes time measurement.
"""
if self.pause_timer:
if self.is_paused():
pause_delta = self.pause_timer.read()
self.start_seconds += pause_delta
self.pause_timer = None
self.pause_timer.reset()
def read(self) -> float:
"""
Return measured time in seconds.
"""
end_seconds = self.current_time()
delta = end_seconds - self.start_seconds
delta = SimpleTimer.read(self)
if self.is_paused():
delta -= self.pause_timer.read()
return delta
@classmethod
def current_time(cls):
return time.time()
def reset(self) -> None:
SimpleTimer.reset(self)
self.pause_timer.reset()