77from textual .app import App , ComposeResult
88from textual .binding import Binding
99from textual .containers import Horizontal , Vertical
10+ from textual .reactive import reactive
1011from textual .widget import Widget
11- from textual .widgets import Button , DataTable , Footer , Header , Input , RichLog
12+ from textual .widgets import (Button , DataTable , Footer , Header , Input , Label ,
13+ RichLog )
1214
1315# import logging
1416
@@ -42,13 +44,29 @@ def on_data_table_row_highlighted(self, event):
4244 self .refresh ()
4345
4446
47+ class FileNameHint (Widget ):
48+ filename = reactive ("none" )
49+
50+ def render (self ) -> str :
51+ return f"Press the button above to save the value at the key in { self .filename } "
52+
53+
4554class KeyInfoWidget (Widget ):
4655 key = ""
56+ key_save_filename = ""
57+ versions = []
58+
59+ def sanitize_filename (self , name ):
60+ import re
61+
62+ s = str (name ).strip ().replace (" " , "_" )
63+ return re .sub (r"(?u)[^-\w.]" , "" , s )
4764
4865 def update_key (self , key ):
4966 self .key = key
5067
5168 self .query_one ("#write-button" ).styles .visibility = "visible"
69+ self .query_one ("#write-label" ).styles .visibility = "visible"
5270
5371 log = self .query_one ("#key-info-label" )
5472
@@ -57,18 +75,24 @@ def update_key(self, key):
5775 log .write (key )
5876
5977 try :
60- versions = listVersions (stub , self .collection , key )
78+ self . versions = listVersions (stub , self .collection , key )
6179 log .write (Text ("Versions:" , style = "bold magenta" ))
62- log .write ("," .join (map (str , versions )))
80+ log .write ("," .join (map (str , self .versions )))
81+ self .key_save_filename = self .sanitize_filename (
82+ f"{ self .collection } _{ key } _{ self .versions [- 1 ]} "
83+ )
84+ self .query_one ("#write-label" ).filename = self .key_save_filename
6385 except Exception as e :
6486 log .write ("Could not load versions: " + str (e ))
6587
6688 def write_key (self ):
6789 try :
68- value = getKey (stub , self .collection , self .key )
69- with open ("out.bin" , "wb" ) as f :
90+ value = getKey (stub , self .collection , self .key , self . versions [ - 1 ] )
91+ with open (self . key_save_filename , "wb" ) as f :
7092 f .write (value )
71- self .query_one ("#key-info-label" ).write ("Wrote data to out.bin" )
93+ self .query_one ("#key-info-label" ).write (
94+ f"Wrote data to { self .key_save_filename } "
95+ )
7296 except Exception as e :
7397 self .query_one ("#key-info-label" ).write ("Could not write key: " + str (e ))
7498
@@ -79,9 +103,13 @@ def on_button_pressed(self, event):
79103 def compose (self ) -> ComposeResult :
80104 with Vertical ():
81105 yield RichLog (id = "key-info-label" , wrap = True )
82- writeButton = Button (label = "Write data to out.bin" , id = "write-button" )
106+
107+ writeButton = Button (label = "Save latest version in file" , id = "write-button" )
83108 writeButton .styles .visibility = "hidden"
109+ writeLabel = FileNameHint (id = "write-label" )
110+ writeLabel .styles .visibility = "hidden"
84111 yield writeButton
112+ yield writeLabel
85113
86114
87115class FossilDBClient (App ):
0 commit comments