"""File for Score classes""" import time class Score: """Parent class for Scores. Used just to pass sql query information around.""" # no user setter, it should never change. def __init__(self, score_info: tuple) -> None: """ Default constructor for Score class. Populates class from sql query results. Tuple order is important. Args: user (str): Score's user value (int): Score's value """ self._user: str = score_info[0] self._value: int = score_info[1] self._category_id: int = score_info[2] @property def user(self) -> str: """ Getter for score user. Returns: str: user """ return self._user @property def value(self) -> int: """ Getter for score value. Returns: int: value """ return self._value @property def category_id(self) -> int: """ Getter for category id. Returns: int: category id """ return self._category_id def get_str(self) -> str: """ Gets score's value as string. Returns: str: Score's value """ return str(self._value) class ScoreTime(Score): """Class for a time based score. Inherits from Score.""" def __init__(self, score_info: tuple) -> None: """ Default constructor for ScoreTime class. Populates class from sql query results. Tuple order is important. Args: user (str): Score's user score (float): Score's value """ super().__init__(score_info) # store time score as seconds. self._score: float = score_info[1] @property def value(self) -> float: """ Getter for score value. Returns: float: value """ return self._score def get_str(self) -> str: """ Gets score's value as string. Turns seconds into MM:SS.ms format. Returns: str: value in time format. """ milliseconds = round((self.value - int(self.value)) * 10) return time.strftime(f"%-M:%S.{milliseconds}", time.gmtime(self.value))