doingapp 0.5.0__tar.gz → 0.5.1__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.
- {doingapp-0.5.0 → doingapp-0.5.1}/PKG-INFO +32 -4
- {doingapp-0.5.0 → doingapp-0.5.1}/README.md +31 -3
- {doingapp-0.5.0 → doingapp-0.5.1}/doing_cli/main.py +36 -2
- {doingapp-0.5.0 → doingapp-0.5.1}/doingapp.egg-info/PKG-INFO +32 -4
- {doingapp-0.5.0 → doingapp-0.5.1}/pyproject.toml +1 -1
- {doingapp-0.5.0 → doingapp-0.5.1}/LICENSE +0 -0
- {doingapp-0.5.0 → doingapp-0.5.1}/doing_cli/__init__.py +0 -0
- {doingapp-0.5.0 → doingapp-0.5.1}/doing_cli/api.py +0 -0
- {doingapp-0.5.0 → doingapp-0.5.1}/doing_cli/auth.py +0 -0
- {doingapp-0.5.0 → doingapp-0.5.1}/doingapp.egg-info/SOURCES.txt +0 -0
- {doingapp-0.5.0 → doingapp-0.5.1}/doingapp.egg-info/dependency_links.txt +0 -0
- {doingapp-0.5.0 → doingapp-0.5.1}/doingapp.egg-info/entry_points.txt +0 -0
- {doingapp-0.5.0 → doingapp-0.5.1}/doingapp.egg-info/requires.txt +0 -0
- {doingapp-0.5.0 → doingapp-0.5.1}/doingapp.egg-info/top_level.txt +0 -0
- {doingapp-0.5.0 → doingapp-0.5.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: doingapp
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: A fast CLI task tracker — track what you're doing from the terminal.
|
|
5
5
|
Author-email: Parker Grimes <parker@altellus.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -62,27 +62,55 @@ doing # See what's on your plate
|
|
|
62
62
|
doing done 1 # Mark task #1 as done
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
+
Or authenticate with an API key (get one from the web UI at Settings → API Keys):
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
doing apikey --key doing_xxxxx
|
|
69
|
+
```
|
|
70
|
+
|
|
65
71
|
## Commands
|
|
66
72
|
|
|
67
73
|
| Command | Description |
|
|
68
74
|
|---------|-------------|
|
|
69
75
|
| `doing` | Show active tasks (same as `doing ls`) |
|
|
70
76
|
| `doing add <title>` | Add a task (`-n` notes, `-c` context ID) |
|
|
77
|
+
| `doing get <id>` | Get a single task by ID |
|
|
71
78
|
| `doing done <id>` | Mark a task as done |
|
|
72
79
|
| `doing pause <id>` | Pause a task |
|
|
73
80
|
| `doing resume <id>` | Resume a paused task |
|
|
74
81
|
| `doing reopen <id>` | Reopen a completed task |
|
|
75
82
|
| `doing edit <id>` | Edit a task (`-t` title, `-n` notes, `-c` context, `--no-context`) |
|
|
76
83
|
| `doing rm <id>` | Delete a task |
|
|
77
|
-
| `doing ls` | List active tasks |
|
|
78
|
-
| `doing log` | Show tasks done today (`-d YYYY-MM-DD`
|
|
79
|
-
| `doing today` | Show all tasks grouped by status |
|
|
84
|
+
| `doing ls` | List active tasks (`-c` context ID) |
|
|
85
|
+
| `doing log` | Show tasks done today (`-d YYYY-MM-DD`, `-c` context ID) |
|
|
86
|
+
| `doing today` | Show all tasks grouped by status (`-c` context ID) |
|
|
80
87
|
| `doing clear` | Mark all active tasks as done |
|
|
81
88
|
| `doing contexts` | List contexts |
|
|
82
89
|
| `doing context add <name>` | Create a context |
|
|
83
90
|
| `doing context rm <id>` | Delete a context |
|
|
91
|
+
| `doing me` | Show current user info |
|
|
84
92
|
| `doing login` | Log in |
|
|
85
93
|
| `doing logout` | Log out |
|
|
94
|
+
| `doing apikey` | Save an API key (`-k` key) |
|
|
95
|
+
|
|
96
|
+
## JSON output
|
|
97
|
+
|
|
98
|
+
Every command supports `--json` (or `-j`) for machine-readable output. This is useful for scripting and AI coding agents like Claude Code or Codex CLI.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
doing --json ls # [{"id": 1, "title": "...", ...}]
|
|
102
|
+
doing --json add "New task" # {"id": 2, "title": "New task", ...}
|
|
103
|
+
doing --json done 2 # {"id": 2, "status": "done", ...}
|
|
104
|
+
doing --json contexts # [{"id": 1, "name": "Work", ...}]
|
|
105
|
+
doing --json get 2 # {"id": 2, "title": "...", ...}
|
|
106
|
+
doing --json me # {"id": 1, "email": "...", ...}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Errors also return structured JSON with a non-zero exit code:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
doing --json done 99999 # {"error": true, "status": 404, "detail": "Task not found"}
|
|
113
|
+
```
|
|
86
114
|
|
|
87
115
|
## Configuration
|
|
88
116
|
|
|
@@ -37,27 +37,55 @@ doing # See what's on your plate
|
|
|
37
37
|
doing done 1 # Mark task #1 as done
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
+
Or authenticate with an API key (get one from the web UI at Settings → API Keys):
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
doing apikey --key doing_xxxxx
|
|
44
|
+
```
|
|
45
|
+
|
|
40
46
|
## Commands
|
|
41
47
|
|
|
42
48
|
| Command | Description |
|
|
43
49
|
|---------|-------------|
|
|
44
50
|
| `doing` | Show active tasks (same as `doing ls`) |
|
|
45
51
|
| `doing add <title>` | Add a task (`-n` notes, `-c` context ID) |
|
|
52
|
+
| `doing get <id>` | Get a single task by ID |
|
|
46
53
|
| `doing done <id>` | Mark a task as done |
|
|
47
54
|
| `doing pause <id>` | Pause a task |
|
|
48
55
|
| `doing resume <id>` | Resume a paused task |
|
|
49
56
|
| `doing reopen <id>` | Reopen a completed task |
|
|
50
57
|
| `doing edit <id>` | Edit a task (`-t` title, `-n` notes, `-c` context, `--no-context`) |
|
|
51
58
|
| `doing rm <id>` | Delete a task |
|
|
52
|
-
| `doing ls` | List active tasks |
|
|
53
|
-
| `doing log` | Show tasks done today (`-d YYYY-MM-DD`
|
|
54
|
-
| `doing today` | Show all tasks grouped by status |
|
|
59
|
+
| `doing ls` | List active tasks (`-c` context ID) |
|
|
60
|
+
| `doing log` | Show tasks done today (`-d YYYY-MM-DD`, `-c` context ID) |
|
|
61
|
+
| `doing today` | Show all tasks grouped by status (`-c` context ID) |
|
|
55
62
|
| `doing clear` | Mark all active tasks as done |
|
|
56
63
|
| `doing contexts` | List contexts |
|
|
57
64
|
| `doing context add <name>` | Create a context |
|
|
58
65
|
| `doing context rm <id>` | Delete a context |
|
|
66
|
+
| `doing me` | Show current user info |
|
|
59
67
|
| `doing login` | Log in |
|
|
60
68
|
| `doing logout` | Log out |
|
|
69
|
+
| `doing apikey` | Save an API key (`-k` key) |
|
|
70
|
+
|
|
71
|
+
## JSON output
|
|
72
|
+
|
|
73
|
+
Every command supports `--json` (or `-j`) for machine-readable output. This is useful for scripting and AI coding agents like Claude Code or Codex CLI.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
doing --json ls # [{"id": 1, "title": "...", ...}]
|
|
77
|
+
doing --json add "New task" # {"id": 2, "title": "New task", ...}
|
|
78
|
+
doing --json done 2 # {"id": 2, "status": "done", ...}
|
|
79
|
+
doing --json contexts # [{"id": 1, "name": "Work", ...}]
|
|
80
|
+
doing --json get 2 # {"id": 2, "title": "...", ...}
|
|
81
|
+
doing --json me # {"id": 1, "email": "...", ...}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Errors also return structured JSON with a non-zero exit code:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
doing --json done 99999 # {"error": true, "status": 404, "detail": "Task not found"}
|
|
88
|
+
```
|
|
61
89
|
|
|
62
90
|
## Configuration
|
|
63
91
|
|
|
@@ -75,6 +75,30 @@ def _handle_api_error(exc: Exception):
|
|
|
75
75
|
raise typer.Exit(code=1)
|
|
76
76
|
|
|
77
77
|
|
|
78
|
+
def _validation_error(detail: str):
|
|
79
|
+
"""Print a validation error (JSON or Rich) and exit with code 1."""
|
|
80
|
+
if _json_mode:
|
|
81
|
+
_output_json({"error": True, "detail": detail})
|
|
82
|
+
console.print(f"[bold red]{detail}[/bold red]")
|
|
83
|
+
raise typer.Exit(code=1)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _validate_title(title: str) -> str:
|
|
87
|
+
"""Strip whitespace and newlines from title, validate non-empty."""
|
|
88
|
+
cleaned = title.replace("\n", " ").replace("\r", " ").strip()
|
|
89
|
+
if not cleaned:
|
|
90
|
+
_validation_error("Title cannot be empty")
|
|
91
|
+
return cleaned
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _validate_name(name: str) -> str:
|
|
95
|
+
"""Strip and validate non-empty name for contexts."""
|
|
96
|
+
cleaned = name.strip()
|
|
97
|
+
if not cleaned:
|
|
98
|
+
_validation_error("Name cannot be empty")
|
|
99
|
+
return cleaned
|
|
100
|
+
|
|
101
|
+
|
|
78
102
|
def _print_notes(task: dict) -> None:
|
|
79
103
|
if task.get("notes"):
|
|
80
104
|
console.print(f" [dim]{task['notes']}[/dim]")
|
|
@@ -197,6 +221,7 @@ def add(
|
|
|
197
221
|
context: int = typer.Option(None, "--context", "-c", help="Context ID"),
|
|
198
222
|
):
|
|
199
223
|
"""Add something to your plate."""
|
|
224
|
+
title = _validate_title(title)
|
|
200
225
|
try:
|
|
201
226
|
task = api.create_task(title, notes, context)
|
|
202
227
|
except Exception as exc:
|
|
@@ -331,6 +356,16 @@ def edit(
|
|
|
331
356
|
no_context: bool = typer.Option(False, "--no-context", help="Remove context"),
|
|
332
357
|
):
|
|
333
358
|
"""Edit a task's title, notes, or context."""
|
|
359
|
+
if no_context and context is not None:
|
|
360
|
+
_validation_error("--no-context and --context cannot be used together")
|
|
361
|
+
|
|
362
|
+
if title is None and notes is None and context is None and not no_context:
|
|
363
|
+
_validation_error("No changes specified. Use --title, --notes, --context, or --no-context.")
|
|
364
|
+
|
|
365
|
+
# BUG-8: Validate title if provided
|
|
366
|
+
if title is not None:
|
|
367
|
+
title = _validate_title(title)
|
|
368
|
+
|
|
334
369
|
try:
|
|
335
370
|
task = api.update_task(task_id, title=title, notes=notes,
|
|
336
371
|
context_id=context, clear_context=no_context)
|
|
@@ -447,7 +482,7 @@ def context_add(
|
|
|
447
482
|
name: str = typer.Argument(..., help="Context name"),
|
|
448
483
|
):
|
|
449
484
|
"""Create a new context."""
|
|
450
|
-
|
|
485
|
+
name = _validate_name(name)
|
|
451
486
|
try:
|
|
452
487
|
ctx = api.create_context(name)
|
|
453
488
|
except Exception as exc:
|
|
@@ -462,7 +497,6 @@ def context_rm(
|
|
|
462
497
|
context_id: int = typer.Argument(..., help="Context ID to delete"),
|
|
463
498
|
):
|
|
464
499
|
"""Delete a context (tasks keep their data, just lose the context)."""
|
|
465
|
-
_require_auth()
|
|
466
500
|
try:
|
|
467
501
|
api.delete_context(context_id)
|
|
468
502
|
except Exception as exc:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: doingapp
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: A fast CLI task tracker — track what you're doing from the terminal.
|
|
5
5
|
Author-email: Parker Grimes <parker@altellus.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -62,27 +62,55 @@ doing # See what's on your plate
|
|
|
62
62
|
doing done 1 # Mark task #1 as done
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
+
Or authenticate with an API key (get one from the web UI at Settings → API Keys):
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
doing apikey --key doing_xxxxx
|
|
69
|
+
```
|
|
70
|
+
|
|
65
71
|
## Commands
|
|
66
72
|
|
|
67
73
|
| Command | Description |
|
|
68
74
|
|---------|-------------|
|
|
69
75
|
| `doing` | Show active tasks (same as `doing ls`) |
|
|
70
76
|
| `doing add <title>` | Add a task (`-n` notes, `-c` context ID) |
|
|
77
|
+
| `doing get <id>` | Get a single task by ID |
|
|
71
78
|
| `doing done <id>` | Mark a task as done |
|
|
72
79
|
| `doing pause <id>` | Pause a task |
|
|
73
80
|
| `doing resume <id>` | Resume a paused task |
|
|
74
81
|
| `doing reopen <id>` | Reopen a completed task |
|
|
75
82
|
| `doing edit <id>` | Edit a task (`-t` title, `-n` notes, `-c` context, `--no-context`) |
|
|
76
83
|
| `doing rm <id>` | Delete a task |
|
|
77
|
-
| `doing ls` | List active tasks |
|
|
78
|
-
| `doing log` | Show tasks done today (`-d YYYY-MM-DD`
|
|
79
|
-
| `doing today` | Show all tasks grouped by status |
|
|
84
|
+
| `doing ls` | List active tasks (`-c` context ID) |
|
|
85
|
+
| `doing log` | Show tasks done today (`-d YYYY-MM-DD`, `-c` context ID) |
|
|
86
|
+
| `doing today` | Show all tasks grouped by status (`-c` context ID) |
|
|
80
87
|
| `doing clear` | Mark all active tasks as done |
|
|
81
88
|
| `doing contexts` | List contexts |
|
|
82
89
|
| `doing context add <name>` | Create a context |
|
|
83
90
|
| `doing context rm <id>` | Delete a context |
|
|
91
|
+
| `doing me` | Show current user info |
|
|
84
92
|
| `doing login` | Log in |
|
|
85
93
|
| `doing logout` | Log out |
|
|
94
|
+
| `doing apikey` | Save an API key (`-k` key) |
|
|
95
|
+
|
|
96
|
+
## JSON output
|
|
97
|
+
|
|
98
|
+
Every command supports `--json` (or `-j`) for machine-readable output. This is useful for scripting and AI coding agents like Claude Code or Codex CLI.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
doing --json ls # [{"id": 1, "title": "...", ...}]
|
|
102
|
+
doing --json add "New task" # {"id": 2, "title": "New task", ...}
|
|
103
|
+
doing --json done 2 # {"id": 2, "status": "done", ...}
|
|
104
|
+
doing --json contexts # [{"id": 1, "name": "Work", ...}]
|
|
105
|
+
doing --json get 2 # {"id": 2, "title": "...", ...}
|
|
106
|
+
doing --json me # {"id": 1, "email": "...", ...}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Errors also return structured JSON with a non-zero exit code:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
doing --json done 99999 # {"error": true, "status": 404, "detail": "Task not found"}
|
|
113
|
+
```
|
|
86
114
|
|
|
87
115
|
## Configuration
|
|
88
116
|
|
|
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
|