Files
agon/classes/score.py
T

97 lines
2.2 KiB
Python

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