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.
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/PKG-INFO +1 -1
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/pyproject.toml +1 -1
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/cli.py +32 -4
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/.github/workflows/publish-to-pypi.yml +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/.gitignore +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/DEVLOG.md +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/README.md +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/docs/index.md +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/mkdocs.yml +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/scripts/bump_version.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/config.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/help_menu.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/json_dir_database.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/models.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/services/ai.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/services/pomodoro.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/services/repair_database.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/services/user_setup.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/taskai/views.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/test/test_cli.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/test/test_execution.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/test/test_json_dir_database.py +0 -0
- {taskai_cli-1.4.0 → taskai_cli-1.4.2}/test/test_view.py +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|