textual-debugger 0.0.2__tar.gz → 0.0.4__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 (55) hide show
  1. {textual_debugger-0.0.2/src/textual_debugger.egg-info → textual_debugger-0.0.4}/PKG-INFO +38 -17
  2. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/README.md +36 -16
  3. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/pyproject.toml +27 -2
  4. textual_debugger-0.0.4/src/tdb/README.md +661 -0
  5. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/__init__.py +1 -1
  6. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/cli.py +53 -15
  7. {textual_debugger-0.0.2 → textual_debugger-0.0.4/src/textual_debugger.egg-info}/PKG-INFO +38 -17
  8. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/textual_debugger.egg-info/SOURCES.txt +1 -0
  9. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/textual_debugger.egg-info/requires.txt +1 -0
  10. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/LICENSE +0 -0
  11. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/setup.cfg +0 -0
  12. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/__main__.py +0 -0
  13. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/app.py +0 -0
  14. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/app_handlers/__init__.py +0 -0
  15. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/app_handlers/dap_events.py +0 -0
  16. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/app_handlers/inspection.py +0 -0
  17. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/app_helpers.py +0 -0
  18. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/breakpoint_hook.py +0 -0
  19. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/dap/__init__.py +0 -0
  20. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/dap/client.py +0 -0
  21. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/dap/messages.py +0 -0
  22. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/dap/protocol.py +0 -0
  23. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/dap/types.py +0 -0
  24. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/inspection.py +0 -0
  25. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/keybindings/__init__.py +0 -0
  26. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/persist.py +0 -0
  27. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/post_mortem.py +0 -0
  28. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/server/__init__.py +0 -0
  29. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/server/app.py +0 -0
  30. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/server/event_handler.py +0 -0
  31. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/server/handlers.py +0 -0
  32. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/server/rpc_types.py +0 -0
  33. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/server/runner.py +0 -0
  34. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/session/__init__.py +0 -0
  35. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/session/controller.py +0 -0
  36. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/session/event_bus.py +0 -0
  37. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/session/messages.py +0 -0
  38. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/session/state.py +0 -0
  39. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/session/textual_handler.py +0 -0
  40. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/__init__.py +0 -0
  41. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/async_tasks_modal.py +0 -0
  42. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/breakpoint_view.py +0 -0
  43. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/code_view.py +0 -0
  44. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/console_view.py +0 -0
  45. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/evaluate_console.py +0 -0
  46. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/menu_bar.py +0 -0
  47. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/modals.py +0 -0
  48. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/processes_modal.py +0 -0
  49. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/stack_view.py +0 -0
  50. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/status_bar.py +0 -0
  51. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/threads_modal.py +0 -0
  52. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/tdb/widgets/variable_view.py +0 -0
  53. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/textual_debugger.egg-info/dependency_links.txt +0 -0
  54. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/textual_debugger.egg-info/entry_points.txt +0 -0
  55. {textual_debugger-0.0.2 → textual_debugger-0.0.4}/src/textual_debugger.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: textual-debugger
3
- Version: 0.0.2
3
+ Version: 0.0.4
4
4
  Summary: A TUI Python debugger based on textual and debugpy
5
5
  Author-email: Al Danial <al.danial@gmail.com>
6
6
  License: textual-debugger is licensed to you under the MIT/X Consortium license:
@@ -53,6 +53,7 @@ Requires-Dist: fastapi>=0.115.0
53
53
  Requires-Dist: uvicorn>=0.30.0
54
54
  Provides-Extra: dev
55
55
  Requires-Dist: pytest; extra == "dev"
56
+ Requires-Dist: pytest-cov; extra == "dev"
56
57
  Requires-Dist: pytest-asyncio; extra == "dev"
57
58
  Requires-Dist: httpx; extra == "dev"
58
59
  Requires-Dist: matplotlib; extra == "dev"
@@ -62,7 +63,7 @@ Requires-Dist: ruff; extra == "dev"
62
63
  Requires-Dist: ipython; extra == "dev"
63
64
  Dynamic: license-file
64
65
 
65
- # `textual-debugger`
66
+ # `textual-debugger` version 0.0.4 2026-05-10
66
67
 
67
68
  `textual-debugger` (the package) provides `tdb` (the command-line tool and module),
68
69
  a full-featured terminal-based Python debugger.
@@ -83,7 +84,7 @@ MIT License. Copyright 2026 by Al Danial.
83
84
 
84
85
  - supports debugging of synchronous, asynchronous, multi-threaded, and multi-process Python code.
85
86
  It specifically supports modules
86
- - `asyncio` (with a built-in async task inspector)
87
+ - `asyncio` (with a built-in async task inspector and task wait graph)
87
88
  - `threading` (with a thread inspector)
88
89
  - `multiprocessing` / `concurrent.futures` (with automatic child process attachment and a process inspector)
89
90
 
@@ -130,27 +131,46 @@ or (better):
130
131
  uv pip install textual-debugger
131
132
  ```
132
133
 
134
+ or run it without installing:
135
+
136
+ ```
137
+ uvx --from textual-debugger tdb
138
+ ```
139
+
133
140
 
134
141
  ## Quick Start
135
142
 
136
143
  ```bash
137
- # Debug a script (stops at first line by default)
144
+ # show comprehensive documentation in a terminal-based Markdown viewer
145
+ tdb --doc
146
+
147
+ # debug a script (stops at first line by default)
138
148
  tdb my_script.py
139
149
 
140
- # Debug with arguments
150
+ # debug with arguments
141
151
  tdb my_script.py arg1 arg2
142
152
 
143
- # Use a specific virtualenv
153
+ # add breakpoints at lines 20 and 35 of `my_script.py` and line 14 of `module.py`
154
+ tdb -k 20 -k 35 -k module.py:14 my_script.py arg1 arg2
155
+
156
+ # use a specific virtualenv
144
157
  tdb --python /path/to/venv/bin/python my_script.py
145
158
 
146
- # Don't stop on entry; run until first breakpoint or exit
159
+ # step into, or stop at tracebacks in library code
160
+ tdb --no-just-my-code /path/to/venv/bin/python my_script.py
161
+
162
+ # run until first breakpoint or exit
147
163
  tdb --no-stop-on-entry my_script.py
148
164
 
149
- > **Note:** Avoid `argparse` confusion by separating `tdb` switches from
150
- > the debuggee's switches by prefixing the debuggee with `--`.
165
+ # run the debuggee in an external terminal
166
+ tdb --terminal xterm my_script.py
151
167
 
152
- # `--` separates tdb's switches from the debuggee's switches
153
- tdb --python /path/to/venv/bin/python -- my_script.py -f 17 --max 23.3
168
+ # attach to a remote Python program that has a debugpy server on port 5678
169
+ tdb -r remotehost:5678 my_script.py
170
+
171
+ > prevent `argparse` confusion by separating `tdb` switches from
172
+ > the debuggee switches by prefixing the debuggee with `--`.
173
+ tdb --python /path/to/venv/bin/python -- my_script.py -k 17 --max 23.3
154
174
  ```
155
175
 
156
176
  Or use the module entry point:
@@ -505,7 +525,7 @@ This example assumes the debuggee runs on 192.168.1.10 and listens on port 5678:
505
525
 
506
526
  ```bash
507
527
  # Attach from tdb:
508
- tdb -r 5678
528
+ tdb -r 5678 # to localhost
509
529
  tdb -r 192.168.1.10:5678
510
530
 
511
531
  # With breakpoints:
@@ -643,18 +663,19 @@ Each is JSON with `event`, `data`, and `timestamp` fields.
643
663
  ## CLI Reference
644
664
 
645
665
  ```
646
- usage: tdb [-h] [-r [HOST:]PORT] [-k FILE:LINE] [--cwd CWD]
647
- [--no-stop-on-entry] [--no-just-my-code] [--no-subprocess]
648
- [--python PYTHON] [--keybindings {default,vim,emacs}]
666
+ usage: tdb [-h] [-v/--version] [-r [HOST:]PORT] [--cwd CWD] [--no-stop-on-entry]
667
+ [--no-just-my-code] [--no-subprocess] [--python PYTHON]
668
+ [-d/--doc] [--doc-text] [--keybindings {default,vim,emacs}]
649
669
  [--terminal {xterm,konsole,gnome-terminal,ghostty,kitty,iterm2,warp,wezterm,terminator}]
650
- [--server] [--headless] [--server-port PORT]
670
+ [--server] [--headless] [-k FILE:LINE|LINE] [--server-port SERVER_PORT]
651
671
  [program] [args ...]
672
+
652
673
  ```
653
674
 
654
675
  | Flag | Description |
655
676
  |------|-------------|
656
677
  | `-r`, `--remote-attach HOST:PORT` | Attach to a remote debugpy server |
657
- | `-k`, `--breakpoint FILE:LINE` | Set a breakpoint (may be repeated) |
678
+ | `-k`, `--breakpoint FILE:LINE|LINE` | Set a breakpoint (may be repeated) |
658
679
  | `--no-stop-on-entry` | Do not pause at the first line (default: stop on entry) |
659
680
  | `--cwd DIR` | Working directory for the debuggee |
660
681
  | `--python PATH` | Python interpreter for the debuggee |
@@ -1,4 +1,4 @@
1
- # `textual-debugger`
1
+ # `textual-debugger` version 0.0.4 2026-05-10
2
2
 
3
3
  `textual-debugger` (the package) provides `tdb` (the command-line tool and module),
4
4
  a full-featured terminal-based Python debugger.
@@ -19,7 +19,7 @@ MIT License. Copyright 2026 by Al Danial.
19
19
 
20
20
  - supports debugging of synchronous, asynchronous, multi-threaded, and multi-process Python code.
21
21
  It specifically supports modules
22
- - `asyncio` (with a built-in async task inspector)
22
+ - `asyncio` (with a built-in async task inspector and task wait graph)
23
23
  - `threading` (with a thread inspector)
24
24
  - `multiprocessing` / `concurrent.futures` (with automatic child process attachment and a process inspector)
25
25
 
@@ -66,27 +66,46 @@ or (better):
66
66
  uv pip install textual-debugger
67
67
  ```
68
68
 
69
+ or run it without installing:
70
+
71
+ ```
72
+ uvx --from textual-debugger tdb
73
+ ```
74
+
69
75
 
70
76
  ## Quick Start
71
77
 
72
78
  ```bash
73
- # Debug a script (stops at first line by default)
79
+ # show comprehensive documentation in a terminal-based Markdown viewer
80
+ tdb --doc
81
+
82
+ # debug a script (stops at first line by default)
74
83
  tdb my_script.py
75
84
 
76
- # Debug with arguments
85
+ # debug with arguments
77
86
  tdb my_script.py arg1 arg2
78
87
 
79
- # Use a specific virtualenv
88
+ # add breakpoints at lines 20 and 35 of `my_script.py` and line 14 of `module.py`
89
+ tdb -k 20 -k 35 -k module.py:14 my_script.py arg1 arg2
90
+
91
+ # use a specific virtualenv
80
92
  tdb --python /path/to/venv/bin/python my_script.py
81
93
 
82
- # Don't stop on entry; run until first breakpoint or exit
94
+ # step into, or stop at tracebacks in library code
95
+ tdb --no-just-my-code /path/to/venv/bin/python my_script.py
96
+
97
+ # run until first breakpoint or exit
83
98
  tdb --no-stop-on-entry my_script.py
84
99
 
85
- > **Note:** Avoid `argparse` confusion by separating `tdb` switches from
86
- > the debuggee's switches by prefixing the debuggee with `--`.
100
+ # run the debuggee in an external terminal
101
+ tdb --terminal xterm my_script.py
87
102
 
88
- # `--` separates tdb's switches from the debuggee's switches
89
- tdb --python /path/to/venv/bin/python -- my_script.py -f 17 --max 23.3
103
+ # attach to a remote Python program that has a debugpy server on port 5678
104
+ tdb -r remotehost:5678 my_script.py
105
+
106
+ > prevent `argparse` confusion by separating `tdb` switches from
107
+ > the debuggee switches by prefixing the debuggee with `--`.
108
+ tdb --python /path/to/venv/bin/python -- my_script.py -k 17 --max 23.3
90
109
  ```
91
110
 
92
111
  Or use the module entry point:
@@ -441,7 +460,7 @@ This example assumes the debuggee runs on 192.168.1.10 and listens on port 5678:
441
460
 
442
461
  ```bash
443
462
  # Attach from tdb:
444
- tdb -r 5678
463
+ tdb -r 5678 # to localhost
445
464
  tdb -r 192.168.1.10:5678
446
465
 
447
466
  # With breakpoints:
@@ -579,18 +598,19 @@ Each is JSON with `event`, `data`, and `timestamp` fields.
579
598
  ## CLI Reference
580
599
 
581
600
  ```
582
- usage: tdb [-h] [-r [HOST:]PORT] [-k FILE:LINE] [--cwd CWD]
583
- [--no-stop-on-entry] [--no-just-my-code] [--no-subprocess]
584
- [--python PYTHON] [--keybindings {default,vim,emacs}]
601
+ usage: tdb [-h] [-v/--version] [-r [HOST:]PORT] [--cwd CWD] [--no-stop-on-entry]
602
+ [--no-just-my-code] [--no-subprocess] [--python PYTHON]
603
+ [-d/--doc] [--doc-text] [--keybindings {default,vim,emacs}]
585
604
  [--terminal {xterm,konsole,gnome-terminal,ghostty,kitty,iterm2,warp,wezterm,terminator}]
586
- [--server] [--headless] [--server-port PORT]
605
+ [--server] [--headless] [-k FILE:LINE|LINE] [--server-port SERVER_PORT]
587
606
  [program] [args ...]
607
+
588
608
  ```
589
609
 
590
610
  | Flag | Description |
591
611
  |------|-------------|
592
612
  | `-r`, `--remote-attach HOST:PORT` | Attach to a remote debugpy server |
593
- | `-k`, `--breakpoint FILE:LINE` | Set a breakpoint (may be repeated) |
613
+ | `-k`, `--breakpoint FILE:LINE|LINE` | Set a breakpoint (may be repeated) |
594
614
  | `--no-stop-on-entry` | Do not pause at the first line (default: stop on entry) |
595
615
  | `--cwd DIR` | Working directory for the debuggee |
596
616
  | `--python PATH` | Python interpreter for the debuggee |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "textual-debugger"
3
- version = "0.0.2"
3
+ dynamic = ["version"]
4
4
  description = "A TUI Python debugger based on textual and debugpy"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -29,7 +29,7 @@
29
29
 
30
30
  # extras needed to run the examples and tests
31
31
  [project.optional-dependencies]
32
- dev = ["pytest", "pytest-asyncio", "httpx",
32
+ dev = ["pytest", "pytest-cov", "pytest-asyncio", "httpx",
33
33
  "matplotlib",
34
34
  "pyyaml",
35
35
  "toml",
@@ -48,12 +48,37 @@
48
48
  requires = ["setuptools>=68.0"]
49
49
  build-backend = "setuptools.build_meta"
50
50
 
51
+ [tool.setuptools.dynamic]
52
+ version = {attr = "tdb.__version__"}
53
+
51
54
  [tool.setuptools.packages.find]
52
55
  where = ["src"]
53
56
 
57
+ [tool.setuptools.package-data]
58
+ tdb = ["README.md"]
59
+
54
60
  [tool.pytest.ini_options]
55
61
  testpaths = ["tests"]
56
62
  asyncio_mode = "auto"
63
+ addopts = "--cov=tdb --cov-report=term-missing"
57
64
  filterwarnings = [
58
65
  "ignore::DeprecationWarning",
59
66
  ]
67
+
68
+ [tool.coverage.run]
69
+ source = ["src/tdb"]
70
+ branch = true
71
+ omit = [
72
+ "*/tests/*",
73
+ "src/tdb/__main__.py",
74
+ ]
75
+
76
+ [tool.coverage.report]
77
+ exclude_lines = [
78
+ "pragma: no cover",
79
+ "raise NotImplementedError",
80
+ "if TYPE_CHECKING:",
81
+ "if __name__ == .__main__.:",
82
+ ]
83
+ show_missing = true
84
+ skip_covered = false