Coverage for /home/ubuntu/lunchbox/python/lunchbox/stopwatch.py: 100%
20 statements
« prev ^ index » next coverage.py v7.9.0, created at 2025-06-13 03:03 +0000
« prev ^ index » next coverage.py v7.9.0, created at 2025-06-13 03:03 +0000
1from typing import Optional # noqa: F401
3import datetime
4import humanfriendly
5# ------------------------------------------------------------------------------
8class StopWatch():
9 '''
10 StopWatch is used for timing blocks of code.
11 '''
12 def __init__(self):
13 # type: () -> None
14 self._delta = None # type: Optional[datetime.timedelta]
15 self._start_time = None # type: Optional[datetime.datetime]
16 self._stop_time = None # type: Optional[datetime.datetime]
18 def start(self):
19 # type: () -> None
20 '''
21 Call this method directly before the code you wish to time.
22 '''
23 self._stop_time = None
24 self._start_time = datetime.datetime.now()
26 def stop(self):
27 # type: () -> None
28 '''
29 Call this method directly after the code you wish to time.
30 '''
31 if self._start_time is not None:
32 self._stop_time = datetime.datetime.now()
34 @property
35 def delta(self):
36 # type: () -> datetime.timedelta
37 '''
38 Time delta of stop - start.
39 '''
40 return self._stop_time - self._start_time # type: ignore
42 @property
43 def human_readable_delta(self):
44 # type: () -> str
45 '''
46 Time delta in human readable format.
47 '''
48 return humanfriendly.format_timespan(self.delta.total_seconds())