improved Timer class
This commit is contained in:
parent
d14a649997
commit
4f0adc181a
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user