diff --git a/pyproject.toml b/pyproject.toml index 511f5e8..7b6708a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name="chore-manager" dynamic = ["version"] -dependencies = [] +dependencies = ["textual"] requires-python = ">=3.13" readme = "README.md" diff --git a/src/chore_manager/database.py b/src/chore_manager/database.py new file mode 100644 index 0000000..53d07a1 --- /dev/null +++ b/src/chore_manager/database.py @@ -0,0 +1,52 @@ +import sqlite3 +from pathlib import Path +import os +from dataclasses import dataclass, fields + +@dataclass +class Task: + title: str + is_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() + + for i in range(0, 15): + self.create_task(f"task{i}", bool(i%2)) + def initialize_table(self): + self.cur.execute("CREATE TABLE tasks(title TEXT, is_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()) diff --git a/src/chore_manager/main.py b/src/chore_manager/main.py index 74106cf..ced5536 100644 --- a/src/chore_manager/main.py +++ b/src/chore_manager/main.py @@ -1,3 +1,5 @@ - +from .tui import ChoreManagerTui def main_tui() -> None: - print("Hello World") + app = ChoreManagerTui() + app.run() + diff --git a/src/chore_manager/tui.py b/src/chore_manager/tui.py new file mode 100644 index 0000000..06f0987 --- /dev/null +++ b/src/chore_manager/tui.py @@ -0,0 +1,19 @@ +from textual.app import App, ComposeResult +from textual.widgets import Header, Checkbox +from textual.containers import VerticalScroll +from .database import Database + +class ChoreManagerTui(App): + + def __init__(self): + super().__init__() + self.database = Database("DEBUG") + + def compose(self) -> ComposeResult: + yield Header() + tasks = self.database.get_all_tasks() + with VerticalScroll(): + for task in tasks: + yield Checkbox(task.title, task.is_done) + +