From 926669f28f7bdcff46ed724061d356772ec0ddb9 Mon Sep 17 00:00:00 2001 From: Alexander Winkler Date: Mon, 18 May 2026 16:16:40 +0200 Subject: [PATCH] add basic database functionality --- src/chore_manager/database.py | 50 +++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/chore_manager/database.py diff --git a/src/chore_manager/database.py b/src/chore_manager/database.py new file mode 100644 index 0000000..ff96b9e --- /dev/null +++ b/src/chore_manager/database.py @@ -0,0 +1,50 @@ +import sqlite3 +from pathlib import Path +import os +from dataclasses import dataclass, fields + +@dataclass +class Task: + title: str + done: bool + def __post_init__(self): + for field in fields(self): + if field.type is bool: + value = getattr(self, field.name) + setattr(self, field.name, bool(value)) + +class Database: + def __init__(self, filepath: Path|str): + is_new_database = not Path(filepath).exists() + self.con = sqlite3.connect(filepath) + self.cur = self.con.cursor() + if is_new_database: + self.initialize_table() + + def initialize_table(self): + self.cur.execute("CREATE TABLE tasks(title TEXT, done INTEGER)") + + + def create_task(self, title: str, done:bool=False) -> None: + converted_done = "" + if done: + converted_done = "TRUE" + else: + converted_done = "FALSE" + + self.cur.execute(f"""INSERT INTO tasks VALUES ("{title}", {converted_done});""") + self.con.commit() + + def get_all_tasks(self) -> list[Task]: + self.cur.execute("SELECT * FROM tasks") + raw_data = self.cur.fetchall() + return [Task(*task) for task in raw_data] + +if __name__ == '__main__': + try: + os.remove("DEBUG.db") + except FileNotFoundError: + pass + database = Database("DEBUG.db") + database.create_task("test") + print(database.get_all_tasks())