import csv from secrets import token_hex from .exceptions import IncompatibleRowLengthError ROW_SIZE = 3 class Table: def __init__(self, file_path: str): self.csv_params = { 'delimiter': ',', 'quotechar': '"' } self.csv_file = open(file_path, 'r+', newline='') self.writer = csv.writer(self.csv_file, **self.csv_params) self.rows = [tuple(row) for row in csv.reader(self.csv_file, **self.csv_params)] def __del__(self): self.__write_changes() self.csv_file.close() def __write_changes(self): with open(f"new_{token_hex(8)}.csv", 'w', newline='') as new_table: writer = csv.writer(new_table, **self.csv_params) for row in self.rows: writer.writerow(row) def row_at(self, index: int): try: return self.rows[index] except IndexError: return None def get_rows(self, n: int): return self.rows[:n] def insert(self, new_row: tuple): if len(new_row) != ROW_SIZE: raise IncompatibleRowLengthError(len(new_row)) self.rows.append(new_row) self.writer.writerow(new_row) def delete_at(self, to_delete: int): try: self.rows.pop(to_delete) except IndexError: return None def search(self, lookup: str): for row in self.rows: if lookup in row: return row return None