Source code for mitype.history

"""Handle with user history."""

import csv
import os
import time
from datetime import date


[docs]def history_file_absolute_path(): """Get full path of history file. This is required for later reading or modifying records from history file. Returns: str: The path of history file. """ history_filename = ".mitype_history.csv" return os.path.join(os.path.expanduser("~"), history_filename)
[docs]def get_history_records(number_of_records): """Get records from history. Defaults to -1 if argument value not provided on command line. Args: number_of_records (int): Number of last records to print. Returns: list: A list of records. The len of this list is `number_of_records` or all records """ history_file_path = history_file_absolute_path() if not os.path.exists(history_file_path): return [] with open(history_file_path, encoding="utf-8") as file: history_reader = csv.reader(file) try: # Skip csv header next(history_reader) except StopIteration: # No header found on the file, meaning the file is empty return [] data = list(history_reader) total_records = len(data) if number_of_records <= -1 or number_of_records >= total_records: number_of_records = total_records start_count = 0 if number_of_records < total_records and number_of_records != -1: start_count = total_records - number_of_records return data[start_count:total_records]
[docs]def show_history(number_of_records): """Show records from history. Defaults to -1 if argument value not provided on command line. Args: number_of_records (int): Number of last records to print. """ records = get_history_records(number_of_records) if len(records) == 0: print("0 records found") print("Last {} records:".format(len(records))) print("ID\tWPM\tDATE\t\tTIME\t\tACCURACY") for record in records: formatted_row_data = "\t".join(record) print(formatted_row_data + "%")
[docs]def save_history(text_id, current_speed_wpm, accuracy): """Save test stats to history file. Args: text_id (int): Row identifier of database text loaded. current_speed_wpm (float): Speed result from test. accuracy (str): Accuracy result from test. """ history_path = history_file_absolute_path() file_exists = os.path.isfile(history_path) with open(history_path, mode="a", newline="", encoding="utf-8") as history: csv_history = csv.writer(history) if not file_exists: row = ["ID", "WPM", "DATE", "TIME", "ACCURACY"] csv_history.writerow(row) current_time = time.strftime("%H:%M:%S", time.localtime()) test_data = [ text_id, current_speed_wpm, date.today(), current_time, accuracy, ] csv_history.writerow(test_data)