taskai-cli 1.4.0__tar.gz → 1.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/PKG-INFO +1 -1
  2. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/pyproject.toml +1 -1
  3. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/cli.py +32 -4
  4. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/.github/workflows/publish-to-pypi.yml +0 -0
  5. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/.gitignore +0 -0
  6. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/DEVLOG.md +0 -0
  7. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/README.md +0 -0
  8. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/docs/index.md +0 -0
  9. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/mkdocs.yml +0 -0
  10. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/scripts/bump_version.py +0 -0
  11. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/config.py +0 -0
  12. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/help_menu.py +0 -0
  13. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/json_dir_database.py +0 -0
  14. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/models.py +0 -0
  15. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/services/ai.py +0 -0
  16. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/services/pomodoro.py +0 -0
  17. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/services/repair_database.py +0 -0
  18. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/services/user_setup.py +0 -0
  19. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/views.py +0 -0
  20. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/test/test_cli.py +0 -0
  21. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/test/test_execution.py +0 -0
  22. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/test/test_json_dir_database.py +0 -0
  23. {taskai_cli-1.4.0 → taskai_cli-1.4.2}/test/test_view.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskai-cli
3
- Version: 1.4.0
3
+ Version: 1.4.2
4
4
  Author-email: Alex Paskal <alexcpaskal@gmail.com>
5
5
  Requires-Python: >=3.12
6
6
  Requires-Dist: google-genai>=2.8
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "taskai-cli"
3
- version = "1.4.0"
3
+ version = "1.4.2"
4
4
  description = ""
5
5
  authors = [{name = "Alex Paskal", email = "alexcpaskal@gmail.com"}]
6
6
  readme = "README.md"
@@ -58,6 +58,19 @@ class Controller:
58
58
  else:
59
59
  return Controller._find_model_by_stringmatch("name", identifier)
60
60
 
61
+ def _flatten_item_descendants(item: TodoItem, existing=None) -> list[int]:
62
+ """DFS through children"""
63
+ if existing is None:
64
+ existing = []
65
+
66
+ existing.append(item.id)
67
+ for child_id in item.child_ids:
68
+ child = db.get_item(child_id)
69
+ child_descendants = Controller._flatten_item_descendants(child, existing=existing)
70
+
71
+ return existing
72
+
73
+
61
74
  def _parse_item_kwargs(kwargs):
62
75
  for k, v in kwargs.copy().items():
63
76
  if v is None:
@@ -144,8 +157,16 @@ class Controller:
144
157
  else:
145
158
  Controller.throw_error("Cannot find list by name")
146
159
 
147
- def delete_completed():
148
- for item_id in db.get_item_ids():
160
+ def delete_completed(parent_identifier=None):
161
+
162
+
163
+ if parent_identifier is None:
164
+ ids_to_check = db.get_item_ids()
165
+ else:
166
+ parent = Controller._find_item_by_identifier(parent_identifier)
167
+ ids_to_check = Controller._flatten_item_descendants(parent)
168
+
169
+ for item_id in ids_to_check:
149
170
  try:
150
171
  item: TodoItem = db.get_item(item_id)
151
172
  except:
@@ -409,7 +430,11 @@ def execute_commands(*args, **kwargs) -> int:
409
430
  Controller.repair_service()
410
431
 
411
432
  case "clear":
412
- Controller.delete_completed()
433
+ if len(args) > 1:
434
+ parent_identifier = args[1]
435
+ else:
436
+ parent_identifier = None
437
+ Controller.delete_completed(parent_identifier=parent_identifier)
413
438
 
414
439
  case "move":
415
440
  Controller.move_item(args[1], args[2])
@@ -432,7 +457,10 @@ def execute_commands(*args, **kwargs) -> int:
432
457
  print_json(json.dumps(db.get_item(int(args[1])).model_dump()).decode())
433
458
 
434
459
  case "status":
435
- item_id, status_val = args[1:3]
460
+ if len(args) < 3:
461
+ item_id, status_val = args[1], ""
462
+ else:
463
+ item_id, status_val = args[1:3]
436
464
  Controller.update_item(item_id, status=status_val)
437
465
 
438
466
  case "exit" | "exit()" | "quit":
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes