Skip to content

Commit a115ec1

Browse files
committed
Save value in file named after key
1 parent f1f0c8b commit a115ec1

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

client/interactive/client.py

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
from textual.app import App, ComposeResult
88
from textual.binding import Binding
99
from textual.containers import Horizontal, Vertical
10+
from textual.reactive import reactive
1011
from 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+
4554
class 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

87115
class FossilDBClient(App):

client/interactive/db_connection.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ def listKeys(stub, collection, startAfterKey, limit):
4848
return reply.keys
4949

5050

51-
def getKey(stub, collection, key):
52-
reply = stub.Get(proto.GetRequest(collection=collection, key=key))
51+
def getKey(stub, collection, key, version):
52+
reply = stub.Get(proto.GetRequest(collection=collection, key=key, version=version))
5353
assertSuccess(reply)
5454
return reply.value
5555

0 commit comments

Comments
 (0)