commit 4de52eecbbb87e7476cb0c9901e8d4e2e6f5e45b
parent 9684a00072c9e3ae02056fa2d3ce5e1dbbba496d
Author: lash <dev@holbrook.no>
Date: Sun, 17 May 2026 12:34:30 -0600
Implement new cli context for view command
Diffstat:
2 files changed, 15 insertions(+), 77 deletions(-)
diff --git a/dummy/usawa/runnable/recalc.py b/dummy/usawa/runnable/recalc.py
@@ -46,6 +46,7 @@ def main():
entry.parent = ctx.ledger.cur
logg.info('entry parent override {}'.format(entry.parent.hex()))
ctx.store.add_entry(entry, overwrite=True)
+ ctx.ledger.serial = entry.serial
prev = entry
ctx.store.load(entry_callback_pre=override_parent)
diff --git a/dummy/usawa/runnable/view.py b/dummy/usawa/runnable/view.py
@@ -8,6 +8,7 @@ import datetime
#import getpass
import usawa.config
+from usawa.context import UsawaContext
from usawa import Ledger, Entry, EntryPart, DemoWallet, UnitIndex, load, ACL
from usawa.constant import CATEGORIES
from usawa.store import LedgerStore
@@ -19,96 +20,32 @@ logging.basicConfig(level=logging.WARNING)
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:
- ctx.output = os.path.realpath(args.output)
- else:
- ctx.output = '<stdout>'
-
- ctx.valkey_host = args.valkey_host
- ctx.valkey_port = args.valkey_port
-
- return ctx
-
-
def main():
argp = argparse.ArgumentParser()
argp.add_argument('-o', type=str, dest='output', help='output file for resulting XML document')
#argp.add_argument('-p', action='store_true', help='prompt for password to open wallet')
argp.add_argument('-c', type=str, help='override config dir')
argp.add_argument('-v', type=str, choices=['info','debug','warning','error'], help='be verbose')
- 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')
+ argp.add_argument('-i', type=str, help='input ledger state')
+ argp.add_argument('--resolve', action='store_true', help='verify that hash can be resolved')
arg = argp.parse_args()
if arg.v:
logg.setLevel(getattr(logging, arg.v.upper()))
- ctx = Context.from_args(arg)
+ cfg = usawa.config.load_config(config_dir=arg.c)
+ ctx = UsawaContext(cfg, signing=False)
+ ctx.init(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)
+ def check_resolve(entry):
+ if arg.resolve:
+ (digest, data) = entry.sum()
+ k = digest.hex()
+ logg.info('test resolve {}'.format(k))
+ ctx.resolver.get(k)
- cfg = usawa.config.load_config(config_dir=arg.c)
- store_type = cfg.get('STORE_TYPE')
- db = None
- if store_type == 'valkey':
- db = ValkeyStore(
- "",
- host=cfg.get("VALKEY_HOST"),
- port=cfg.get("VALKEY_PORT"),
- )
- elif store_type == 'fs':
- db = FsStore(
- base=cfg.get('FSSTORE_BASE', xdg_data_home()),
- dbname='usawa',
- )
- else:
- raise ValueError('invalid store type: ' + store_type)
- store = LedgerStore(db, ledger)
- #pk = store.get_key()
- #wallet = DemoWallet(privatekey=pk)
- #ops = int(cfg.get('WALLET_OPSLIMIT', 0))
- #mem = int(cfg.get('WALLET_MEMLIMIT', 0))
- #pw = cfg.get('WALLET_KEY_PASSPHRASE')
- #if arg.p and pw == None:
- # pw = getpass.getpass("passphrase: ")
- #logg.debug('ops {}'.format(ops))
- #wallet = store.get_key(DemoWallet, passphrase=pw, opslimit=ops, memlimit=mem)
- wallet = store.get_default_key(DemoWallet)
- acl = ACL.from_wallet(wallet)
- store.load(acl=acl)
- sys.stdout.write(ledger.to_string())
+ ctx.store.load(entry_callback_post=check_resolve)
+ sys.stdout.write(ctx.ledger.to_string())
if __name__ == '__main__':