commit 56f718d1f95230bbc2af0080e94039048b512606
parent f505d46409c997d60582c35562b37a85edf2be50
Author: lash <dev@holbrook.no>
Date: Sun, 8 Mar 2026 14:40:02 -0600
Add export tool
Diffstat:
1 file changed, 79 insertions(+), 0 deletions(-)
diff --git a/dummy/usawa/runnable/export.py b/dummy/usawa/runnable/export.py
@@ -0,0 +1,79 @@
+import os
+import sys
+import logging
+import urllib.parse
+import argparse
+import uuid
+import datetime
+
+from usawa import Ledger, Entry, EntryPart, DemoWallet, UnitIndex, load, ACL
+from usawa.constant import CATEGORIES
+from usawa.store import LedgerStore
+from whee.valkey import ValkeyStore
+from usawa.resolve.fs import FSResolver
+
+logging.basicConfig(level=logging.DEBUG)
+logg = logging.getLogger()
+
+
+class Context:
+
+ def __init__(self):
+ self.unit = None
+ self.uidx = None
+ self.output = None
+ self.f = None
+ self.valkey_host = None
+ self.valkey_port = None
+
+
+ def close(self):
+ if self.f and self.f != sys.stdout:
+ self.f.close()
+
+
+ def open(self, output):
+ if output == '<stdout>':
+ self.f = sys.stdout.buffer
+ logg.debug('output is stdout')
+ else:
+ self.f = open(output, 'wb')
+ return self
+
+ @staticmethod
+ def from_args(args):
+ ctx = Context()
+ if args.output == None:
+ raise ValueError('invalid output dir')
+ ctx.output = os.path.realpath(args.output)
+
+ ctx.valkey_host = args.valkey_host
+ ctx.valkey_port = args.valkey_port
+
+ return ctx
+
+
+argp = argparse.ArgumentParser()
+argp.add_argument('-o', type=str, dest='output', help='output dir for resulting XML entry documents')
+argp.add_argument('--valkey-host', dest='valkey_host', type=str, default='localhost', help='Valkey host')
+argp.add_argument('--valkey-port', dest='valkey_port', type=int, default=6379, help='Valkey port')
+argp.add_argument('ledger_xml_file', type=str, help='load ledger metadata from XML file')
+arg = argp.parse_args()
+ctx = Context.from_args(arg)
+
+#ledger = None
+#ledger_tree = load(arg.ledger_xml_file)
+#uidx = UnitIndex.from_tree(ledger_tree)
+#ledger = Ledger.from_tree(ledger_tree)
+ledger = Ledger.from_file(arg.ledger_xml_file)
+
+storedb = ValkeyStore('', host=ctx.valkey_host, port=ctx.valkey_port)
+store = LedgerStore(storedb, ledger)
+pk = store.get_key()
+wallet = DemoWallet(privatekey=pk)
+acl = ACL.from_wallet(wallet)
+store.load(acl=acl)
+resolve = FSResolver(ctx.output)
+
+for k in ledger.entries:
+ r = resolve.put_entry(ledger.entries[k], lookup='sha512')