""" a interval time class Returns: Timer: class timer for basic time run calculations """ from datetime import datetime, timedelta class Timer: """ get difference between start and end date/time """ def __init__(self): """ init new start time and set end time to None """ self._overall_start_time = datetime.now() self._overall_end_time = None self._overall_run_time = None self._start_time = datetime.now() self._end_time = None self._run_time = None # MARK: overall run time def overall_run_time(self) -> timedelta: """ overall run time difference from class launch to call of this function Returns: timedelta: _description_ """ self._overall_end_time = datetime.now() self._overall_run_time = self._overall_end_time - self._overall_start_time return self._overall_run_time def get_overall_start_time(self) -> datetime: """ get set start time Returns: datetime: _description_ """ return self._overall_start_time def get_overall_end_time(self) -> datetime | None: """ get set end time or None for not set Returns: datetime|None: _description_ """ return self._overall_end_time def get_overall_run_time(self) -> timedelta | None: """ get run time or None if run time was not called Returns: datetime|None: _description_ """ return self._overall_run_time # MARK: set run time def run_time(self) -> timedelta: """ difference between start time and current time Returns: datetime: _description_ """ self._end_time = datetime.now() self._run_time = self._end_time - self._start_time return self._run_time def reset_run_time(self): """ reset start/end and run tine """ self._start_time = datetime.now() self._end_time = None self._run_time = None def get_start_time(self) -> datetime: """ get set start time Returns: datetime: _description_ """ return self._start_time def get_end_time(self) -> datetime | None: """ get set end time or None for not set Returns: datetime|None: _description_ """ return self._end_time def get_run_time(self) -> timedelta | None: """ get run time or None if run time was not called Returns: datetime|None: _description_ """ return self._run_time # __END__