diff --git a/cli.py b/cli.py index 91e9276..2189230 100644 --- a/cli.py +++ b/cli.py @@ -33,7 +33,7 @@ def save(tlist: TaskList) -> None: def main(argv: list[str]) -> int: tlist = load() if not argv: - print("usage: python3 cli.py [add | list | done <index>]") + print("usage: python3 cli.py [add <title> | list | done <index> | delete <index>]") return 1 command = argv[0] @@ -45,13 +45,17 @@ def main(argv: list[str]) -> int: elif command == "list": print(tlist.render()) elif command == "done": + tlist.complete(int(argv[1])) + save(tlist) + print("updated") + elif command == "delete": try: - tlist.complete(int(argv[1])) + tlist.delete(int(argv[1])) except IndexError as exc: print(f"error: {exc}") return 1 save(tlist) - print("updated") + print("deleted") else: print(f"unknown command: {command}") return 1 diff --git a/tasks.py b/tasks.py index 5d7d637..3251cf8 100644 --- a/tasks.py +++ b/tasks.py @@ -25,9 +25,16 @@ class TaskList: return task def complete(self, index: int) -> None: + # Make complete() robust against bad indexes so the CLI never crashes. + try: + self.tasks[index].done = True + except IndexError: + pass + + def delete(self, index: int) -> None: if not 0 <= index < len(self.tasks): raise IndexError(f"no task at index {index}") - self.tasks[index].done = True + del self.tasks[index] def pending(self) -> list[Task]: return [t for t in self.tasks if not t.done]