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

1from typing import Optional # noqa: F401 

2 

3import datetime 

4import humanfriendly 

5# ------------------------------------------------------------------------------ 

6 

7 

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] 

17 

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() 

25 

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() 

33 

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 

41 

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())