| 285 | return json.dumps(self._load(tid), indent=2) |
| 286 | |
| 287 | def update(self, tid: int, status: str = None, |
| 288 | add_blocked_by: list = None, remove_blocked_by: list = None) -> str: |
| 289 | task = self._load(tid) |
| 290 | if status: |
| 291 | task["status"] = status |
| 292 | if status == "completed": |
| 293 | for f in TASKS_DIR.glob("task_*.json"): |
| 294 | t = json.loads(f.read_text()) |
| 295 | if tid in t.get("blockedBy", []): |
| 296 | t["blockedBy"].remove(tid) |
| 297 | self._save(t) |
| 298 | if status == "deleted": |
| 299 | (TASKS_DIR / f"task_{tid}.json").unlink(missing_ok=True) |
| 300 | return f"Task {tid} deleted" |
| 301 | if add_blocked_by: |
| 302 | task["blockedBy"] = list(set(task["blockedBy"] + add_blocked_by)) |
| 303 | if remove_blocked_by: |
| 304 | task["blockedBy"] = [x for x in task["blockedBy"] if x not in remove_blocked_by] |
| 305 | self._save(task) |
| 306 | return json.dumps(task, indent=2) |
| 307 | |
| 308 | def list_all(self) -> str: |
| 309 | tasks = [json.loads(f.read_text()) for f in sorted(TASKS_DIR.glob("task_*.json"))] |