aboutsummaryrefslogtreecommitdiffstats
path: root/bots/todo-py
diff options
context:
space:
mode:
Diffstat (limited to 'bots/todo-py')
l---------bots/todo-py/index.yaml1
-rw-r--r--bots/todo-py/tools.py65
2 files changed, 66 insertions, 0 deletions
diff --git a/bots/todo-py/index.yaml b/bots/todo-py/index.yaml
new file mode 120000
index 0000000..0d19c11
--- /dev/null
+++ b/bots/todo-py/index.yaml
@@ -0,0 +1 @@
+../todo-sh/index.yaml \ No newline at end of file
diff --git a/bots/todo-py/tools.py b/bots/todo-py/tools.py
new file mode 100644
index 0000000..29e13ea
--- /dev/null
+++ b/bots/todo-py/tools.py
@@ -0,0 +1,65 @@
+import json
+import sys
+import os
+from json import JSONDecodeError
+
+
+def add_todo(desc: str):
+ """Add a new todo item
+ Args:
+ desc: The task description
+ """
+ todos_file = _get_todos_file()
+ try:
+ with open(todos_file, "r") as f:
+ data = json.load(f)
+ except (FileNotFoundError, JSONDecodeError):
+ data = []
+ num = max([item["id"] for item in data] + [0]) + 1
+ data.append({"id": num, "desc": desc})
+ with open(todos_file, "w") as f:
+ json.dump(data, f)
+ print(f"Successfully added todo id={num}")
+
+
+def del_todo(id: int):
+ """Delete an existing todo item
+ Args:
+ id: The task id
+ """
+ todos_file = _get_todos_file()
+ try:
+ with open(todos_file, "r") as f:
+ data = json.load(f)
+ except (FileNotFoundError, JSONDecodeError):
+ _die("Empty todo list")
+ data = [item for item in data if item["id"] != id]
+ with open(todos_file, "w") as f:
+ json.dump(data, f)
+ print(f"Successfully deleted todo id={id}")
+
+
+def list_todos():
+ """Display the current todo list in json format."""
+ todos_file = _get_todos_file()
+ try:
+ with open(todos_file, "r") as f:
+ print(f.read())
+ except FileNotFoundError:
+ _die("Empty todo list")
+
+
+def clear_todos():
+ """Delete the entire todo list."""
+ os.remove(_get_todos_file())
+
+
+def _get_todos_file() -> str:
+ cache_dir=os.environ.get("LLM_BOT_CACHE_DIR", "/tmp")
+ if not os.path.exists(cache_dir):
+ os.makedirs(cache_dir, exist_ok=True)
+ return os.path.join(cache_dir, "todos.json")
+
+def _die(msg: str):
+ print(msg, file=sys.stderr)
+ exit(1) \ No newline at end of file