improved Timer class
This commit is contained in:
parent
d14a649997
commit
4f0adc181a
@ -1,58 +1,81 @@
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
class Timer:
|
class SimpleTimer:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.start_seconds: float | None= None
|
self.start_seconds: float = 0
|
||||||
self.pause_timer: Timer | None = None
|
self.started = False
|
||||||
|
|
||||||
def start(self) -> None:
|
def start(self) -> None:
|
||||||
"""
|
"""
|
||||||
Start time measurement
|
Start time measurement
|
||||||
"""
|
"""
|
||||||
self.start_seconds = self.current_time()
|
if not self.started:
|
||||||
|
self.start_seconds = self.current_time()
|
||||||
|
self.started = True
|
||||||
|
|
||||||
def is_started(self) -> bool:
|
def is_started(self) -> bool:
|
||||||
"""
|
"""
|
||||||
:return: Weather time measurement has been started.
|
: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:
|
def pause(self) -> None:
|
||||||
"""
|
"""
|
||||||
Pause time measurement.
|
Pause time measurement.
|
||||||
"""
|
"""
|
||||||
self.pause_timer = Timer()
|
|
||||||
self.pause_timer.start()
|
self.pause_timer.start()
|
||||||
|
|
||||||
def is_paused(self) -> bool:
|
def is_paused(self) -> bool:
|
||||||
"""
|
"""
|
||||||
:return: Weather time measurement is paused.
|
:return: Weather time measurement is paused.
|
||||||
"""
|
"""
|
||||||
return self.pause_timer is not None
|
return self.pause_timer.is_started()
|
||||||
|
|
||||||
def resume(self) -> None:
|
def resume(self) -> None:
|
||||||
"""
|
"""
|
||||||
Resumes time measurement.
|
Resumes time measurement.
|
||||||
"""
|
"""
|
||||||
if self.pause_timer:
|
if self.is_paused():
|
||||||
pause_delta = self.pause_timer.read()
|
pause_delta = self.pause_timer.read()
|
||||||
self.start_seconds += pause_delta
|
self.start_seconds += pause_delta
|
||||||
self.pause_timer = None
|
self.pause_timer.reset()
|
||||||
|
|
||||||
def read(self) -> float:
|
def read(self) -> float:
|
||||||
"""
|
"""
|
||||||
Return measured time in seconds.
|
Return measured time in seconds.
|
||||||
"""
|
"""
|
||||||
end_seconds = self.current_time()
|
delta = SimpleTimer.read(self)
|
||||||
delta = end_seconds - self.start_seconds
|
|
||||||
|
|
||||||
if self.is_paused():
|
if self.is_paused():
|
||||||
delta -= self.pause_timer.read()
|
delta -= self.pause_timer.read()
|
||||||
|
|
||||||
return delta
|
return delta
|
||||||
|
|
||||||
@classmethod
|
def reset(self) -> None:
|
||||||
def current_time(cls):
|
SimpleTimer.reset(self)
|
||||||
return time.time()
|
self.pause_timer.reset()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user