summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHombreLaser <sebastian-440@live.com>2024-03-12 11:27:28 -0600
committerHombreLaser <sebastian-440@live.com>2024-03-12 11:27:28 -0600
commit50dbd9007c03f3c0557ea264706216016971d1b3 (patch)
tree45b0953886eed6a82e1e07e28902e3ed21ee12be
parent24f30d7df1dae5a40c88cd2041aa4b91057bdaf7 (diff)
Añade table.py
-rw-r--r--.gitignore4
-rw-r--r--src/__init__.py0
-rw-r--r--src/exceptions.py3
-rw-r--r--src/table.py53
4 files changed, 59 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index ae412d6..743ae66 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
-env/ \ No newline at end of file
+env/
+*.csv
+*.pyc \ No newline at end of file
diff --git a/src/__init__.py b/src/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/__init__.py
diff --git a/src/exceptions.py b/src/exceptions.py
new file mode 100644
index 0000000..1c1b058
--- /dev/null
+++ b/src/exceptions.py
@@ -0,0 +1,3 @@
+class IncompatibleRowLengthError(Exception):
+ def __init__(self, row_len: int):
+ super().__init__(f"Incompatible row length, got {row_len}, expected 3") \ No newline at end of file
diff --git a/src/table.py b/src/table.py
new file mode 100644
index 0000000..798fc9f
--- /dev/null
+++ b/src/table.py
@@ -0,0 +1,53 @@
+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 \ No newline at end of file