Add partial save and load
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import pickle
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from tkinter import StringVar, filedialog, messagebox, ttk
|
from tkinter import StringVar, filedialog, messagebox, ttk
|
||||||
|
|
||||||
@@ -73,6 +74,9 @@ class MainWindow(ThemedTk):
|
|||||||
menu_file.add_command(label="Save Rules", command=self.do_save_rules)
|
menu_file.add_command(label="Save Rules", command=self.do_save_rules)
|
||||||
menu_file.add_command(label="Reload Rules", command=self.do_reload_rules)
|
menu_file.add_command(label="Reload Rules", command=self.do_reload_rules)
|
||||||
menu_file.add_separator()
|
menu_file.add_separator()
|
||||||
|
menu_file.add_command(label="Save Partial Transactions", command=self.do_save_partial)
|
||||||
|
menu_file.add_command(label="Load Partial Transactions", command=self.do_load_partial)
|
||||||
|
menu_file.add_separator()
|
||||||
menu_file.add_command(label="Exit", command=lambda: self.destroy())
|
menu_file.add_command(label="Exit", command=lambda: self.destroy())
|
||||||
self.menubar.add_cascade(menu=menu_file, label="File")
|
self.menubar.add_cascade(menu=menu_file, label="File")
|
||||||
|
|
||||||
@@ -359,3 +363,49 @@ class MainWindow(ThemedTk):
|
|||||||
"""
|
"""
|
||||||
self.ruleset.reload_rules()
|
self.ruleset.reload_rules()
|
||||||
self.regenerate_rows()
|
self.regenerate_rows()
|
||||||
|
|
||||||
|
def do_save_partial(self):
|
||||||
|
"""
|
||||||
|
Save all partial entries to be loaded later.
|
||||||
|
"""
|
||||||
|
flattened = {
|
||||||
|
"converter": self.converter.qual_name(),
|
||||||
|
"rows": self.rows,
|
||||||
|
"custom": self.custom,
|
||||||
|
}
|
||||||
|
result = pickle.dumps(flattened)
|
||||||
|
path = filedialog.asksaveasfilename(
|
||||||
|
defaultextension=".pickle",
|
||||||
|
filetypes=[
|
||||||
|
("All Files", "*.*"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
if path:
|
||||||
|
with open(path, "wb") as f:
|
||||||
|
f.write(result)
|
||||||
|
message = f"Saved progress to {path}"
|
||||||
|
else:
|
||||||
|
message = "Save cancelled"
|
||||||
|
self.update_status(message)
|
||||||
|
|
||||||
|
def do_load_partial(self):
|
||||||
|
# Prompt for file to ingest
|
||||||
|
path = filedialog.askopenfilename(
|
||||||
|
defaultextension=".pickle",
|
||||||
|
filetypes=[("Pickle Files", ".pickle"), ("All Files", "*.*")],
|
||||||
|
)
|
||||||
|
with open(path, "rb") as f:
|
||||||
|
result = pickle.load(f)
|
||||||
|
|
||||||
|
if result["converter"] != self.converter.qual_name():
|
||||||
|
messagebox.showerror(
|
||||||
|
"Load Error",
|
||||||
|
f"Cannot load partial data for converter '{result['converter']}'"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
self.rows |= result["rows"]
|
||||||
|
self.custom |= result["custom"]
|
||||||
|
|
||||||
|
self.rowtree.update_rows(self.rows)
|
||||||
|
self.show_ingest_summary([path], self.rows)
|
||||||
|
self.rebuild_account_cache()
|
||||||
|
|||||||
Reference in New Issue
Block a user