@@ -768,6 +768,55 @@ def print(self, pretty: bool = True, metadata: bool = False) -> Self:
768
768
metadata = metadata ,
769
769
)
770
770
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
+
771
820
def compose (
772
821
self ,
773
822
sink : Optional [Callable [[Any , Any , int , Any ], None ]] = None ,
0 commit comments