Skip to content

Commit c68503e

Browse files
committed
POC: inspect
1 parent fa6a496 commit c68503e

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

quixstreams/dataframe/dataframe.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,55 @@ def print(self, pretty: bool = True, metadata: bool = False) -> Self:
768768
metadata=metadata,
769769
)
770770

771+
def inspect(self, number: int = 10, maxlen: int = 30) -> Self:
772+
"""
773+
Creates an interactive debugging session that displays each value
774+
in a formatted Textual table.
775+
776+
Controls:
777+
- Press 'c' to continue to next value
778+
- Press 'q' to quit completely (exits Python)
779+
"""
780+
assert maxlen >= number # noqa
781+
782+
import sys
783+
from collections import deque
784+
785+
from textual.app import App
786+
from textual.containers import Container
787+
from textual.widgets import DataTable, Footer
788+
789+
class Inspector(App):
790+
def __init__(self, messages: deque):
791+
super().__init__()
792+
self.messages = messages
793+
self.table = DataTable()
794+
795+
def compose(self):
796+
yield Container(self.table)
797+
yield Footer()
798+
799+
def on_mount(self):
800+
self.table.add_columns("Key", "Timestamp", "Value", "Headers")
801+
for value, key, timestamp, headers in self.messages:
802+
self.table.add_row(key, timestamp, value, headers)
803+
804+
def on_key(self, event):
805+
if event.key == "c":
806+
self.exit()
807+
elif event.key == "q":
808+
sys.exit(0)
809+
810+
messages: deque = deque(maxlen=maxlen)
811+
812+
def _inspect(value, key, timestamp, headers):
813+
messages.append((value, key, timestamp, headers))
814+
if len(messages) >= number:
815+
app = Inspector(messages)
816+
app.run()
817+
818+
return self._add_update(_inspect, metadata=True)
819+
771820
def compose(
772821
self,
773822
sink: Optional[Callable[[Any, Any, int, Any], None]] = None,

requirements-dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
pre-commit>=3.4,<4.1
2+
textual-dev
23
-r requirements-mypy.txt

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ pydantic>=2.7,<2.11
77
pydantic-settings>=2.3,<2.7
88
jsonschema>=4.3.0
99
jsonlines>=4,<5
10+
textual

0 commit comments

Comments
 (0)