From 855d9ee0f8d0a9c302d8f80abbd9be51f71f0458 Mon Sep 17 00:00:00 2001 From: jpt Date: Fri, 11 Apr 2025 21:58:20 -0500 Subject: [PATCH] remove categories; not sure about summaries rn --- src/tt/controller/generators.py | 2 +- src/tt/controller/tasks.py | 18 ++++---------- src/tt/db.py | 11 +-------- src/tt/import_csv.py | 43 --------------------------------- src/tt/tui/tasks.py | 2 +- src/tt/utils.py | 6 ++--- 6 files changed, 11 insertions(+), 71 deletions(-) delete mode 100644 src/tt/import_csv.py diff --git a/src/tt/controller/generators.py b/src/tt/controller/generators.py index 0838a7b..3dc21f1 100644 --- a/src/tt/controller/generators.py +++ b/src/tt/controller/generators.py @@ -40,7 +40,7 @@ def generate_needed_tasks(): to_create.append( { "text": g.template.format(next=next), - "category": "recurring", + "project": "recurring", "due": next, } ) diff --git a/src/tt/controller/tasks.py b/src/tt/controller/tasks.py index fc547e4..e231b85 100644 --- a/src/tt/controller/tasks.py +++ b/src/tt/controller/tasks.py @@ -6,11 +6,6 @@ from ..db import db, Task, Category, SavedSearch from .. import config -def category_lookup(category): - if category: - category, _ = Category.get_or_create(name=category) - return category.id - def get_task(item_id: int) -> Task: return Task.get_by_id(item_id) @@ -18,19 +13,18 @@ def get_task(item_id: int) -> Task: def add_task( text: str, - category: str, status: str, due: datetime | None = None, type: str = "", + project: str = "", ) -> Task: """ Add a new task to the database. Returns the created task instance. """ with db.atomic(): - category_id = category_lookup(category) task = Task.create( - text=text, type=type, status=status, due=due, category_id=category_id + text=text, type=type, status=status, due=due, project=project ) return task @@ -40,8 +34,6 @@ def update_task( **kwargs, ) -> Task: with db.atomic(): - if category := kwargs.pop("category", None): - kwargs["category_id"] = category_lookup(category) query = Task.update(kwargs).where(Task.id == item_id) query.execute() task = Task.get_by_id(item_id) @@ -82,18 +74,18 @@ def _parse_sort_string(sort_string, status_order): def get_tasks( search_text: str | None = None, - category: int | None = None, statuses: tuple[str] | None = None, + projects: tuple[str] | None = None, sort: str = "", ) -> list[Task]: query = Task.select().where(~Task.deleted) if search_text: query = query.where(fn.Lower(Task.text).contains(search_text.lower())) - if category: - query = query.where(Task.category == Category.get(name=category)) if statuses: query = query.where(Task.status.in_(statuses)) + if projects: + query = query.where(Task.project.in_(projects)) sort_expressions = _parse_sort_string(sort, statuses) query = query.order_by(*sort_expressions) diff --git a/src/tt/db.py b/src/tt/db.py index 1c38e69..6dd6a21 100644 --- a/src/tt/db.py +++ b/src/tt/db.py @@ -26,18 +26,11 @@ class BaseModel(Model): database = db -class Category(BaseModel): - name = CharField(unique=True) - - def __str__(self): - return self.name - class Task(BaseModel): text = TextField() status = CharField() due = DateTimeField(null=True) - category = ForeignKeyField(Category, backref="tasks", null=True) type = CharField() project = CharField() created_at = DateTimeField(default=datetime.now) @@ -112,7 +105,5 @@ class TaskGenerator(BaseModel): def initialize_db(): db.connect() - db.create_tables([Category, Task, SavedSearch, TaskGenerator]) - if not Category.select().exists(): - Category.create(name="default") + db.create_tables([Task, SavedSearch, TaskGenerator]) db.close() diff --git a/src/tt/import_csv.py b/src/tt/import_csv.py deleted file mode 100644 index 911f7b2..0000000 --- a/src/tt/import_csv.py +++ /dev/null @@ -1,43 +0,0 @@ -import csv -from datetime import datetime -from tt.db import initialize_db, Task, Category -from tt.config import STATUSES - - -def import_tasks_from_csv(filename: str): - initialize_db() - - with open(filename, "r") as f: - reader = csv.DictReader(f) - - for row in reader: - # Parse the due date if it exists and isn't empty - due_date = None - if row["due"] and row["due"].strip(): - try: - due_date = datetime.strptime(row["due"].strip(), "%Y-%m-%d") - except ValueError: - print(f"Warning: Couldn't parse '{row['due']}', skipping due date") - - # Validate status - status = row["status"].lower() if row["status"] else "zero" - if status not in STATUSES: - print(f"Warning: Invalid status '{status}', defaulting to 'zero'") - status = "zero" - - category_id = None - if row["category"].strip(): - category_name = row["category"].strip() - category, _ = Category.get_or_create( - name=category_name, defaults={"description": None} - ) - category_id = category.id - - Task.create( - text=row["task"], - type=row["type"], - status=status, - due=due_date, - category_id=category_id, - ) - print(f"Imported task: {row['task']}") diff --git a/src/tt/tui/tasks.py b/src/tt/tui/tasks.py index da99652..f392d40 100644 --- a/src/tt/tui/tasks.py +++ b/src/tt/tui/tasks.py @@ -71,7 +71,7 @@ class TT(TableEditor): def refresh_items(self): items = get_tasks( self.search_query, - category=self.filters.get("category"), + projects=self.filters.get("project", "").split(","), statuses=self.filters.get("status", "").split(",") if "status" in self.filters else None, diff --git a/src/tt/utils.py b/src/tt/utils.py index 831c7bd..ab8ef34 100644 --- a/src/tt/utils.py +++ b/src/tt/utils.py @@ -7,10 +7,10 @@ import subprocess def filter_to_string(filters, search_query): pieces = [] - category = filters.get("category") + project = filters.get("project") status = filters.get("status") - if category: - pieces += [f" category:{category}"] + if project: + pieces += [f" project:{project}"] if status: pieces += [f" status:{status}"] if search_query: