From ab721c16258d58b71716936d2a6f6caa7103d2eb Mon Sep 17 00:00:00 2001 From: imcompiling Date: Fri, 10 Mar 2023 16:27:40 -0500 Subject: [PATCH] create format_score_string function. --- utilities/utils.py | 51 +++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/utilities/utils.py b/utilities/utils.py index be41bbb..074bf28 100644 --- a/utilities/utils.py +++ b/utilities/utils.py @@ -231,20 +231,12 @@ def format_highscore_message(session: Session, group: CategoryGroup) -> str: # add each score to list for ind in range(max_cat_size): # need to subtract to deal with category name string if ind in processed_group.index: - user_length = group.UsernameLength - username = processed_group["UserName"][ind][:user_length].ljust(user_length, " ") + username = processed_group["UserName"][ind] + score = processed_group["Score"][ind] - # get score, pad to correct length - if category.IsTimeRecord: - # MM:SS.ms is 7 characters long - # if there are single digit minutes, add a space for formatting. - score = get_time_str(processed_group["Score"][ind]) - if score.find(":") and len(score.split(":", maxsplit=1)[0]) < 2: - score = " " + score - else: - score = str(int(processed_group["Score"][ind])).rjust(7, " ") - - str_list[ind + 1] += f"{ind + 1}: {username} - {score}".ljust(pad_length, " ") + str_list[ind + 1] += format_score_string( + username, score, group.UsernameLength, group.IsTimeRecord, ind + 1, pad_length + ) else: # if not enough entries, pad out if ind + 1 <= category.Size: @@ -262,7 +254,6 @@ def format_highscore_message(session: Session, group: CategoryGroup) -> str: # need to use index to allow for modifying the list for ind, line in enumerate(str_list): if len(line) > MAX_LINE_LENGTH: - split_loc = int(MAX_LINE_LENGTH / pad_length) * pad_length new_line = line[split_loc:] str_list[ind] = line[:split_loc] @@ -283,6 +274,38 @@ def format_highscore_message(session: Session, group: CategoryGroup) -> str: return ret_string + "```" +def format_score_string( + username: str, score: float, username_length: int, is_time_record: bool, rank: int, pad_length: int +) -> str: + """ + Builds the string to show a user's score. + + Args: + username (str): username. + score (int): score in int form. + username_length (float): limit to how long username is allowed to be. + is_time_record (bool): if the score represents an number or a time record. + rank (int): the user's rank. + pad_length (int): limit to how long the string can be. + + Returns: + str: string to show user's score. + """ + username = username[:username_length].ljust(username_length, " ") + + # get score, pad to correct length + if is_time_record: + # MM:SS.ms is 7 characters long + # if there are single digit minutes, add a space for formatting. + score = get_time_str(score) + if score.find(":") and len(score.split(":", maxsplit=1)[0]) < 2: + score = " " + score + else: + score = str(int(score)).rjust(7, " ") + + return f"{rank}: {username} - {score}".ljust(pad_length, " ") + + def get_time_str(time_in: float) -> str: """ Formats a float value into the desired string format for a timestamp.