usawa

Signed, immutable accounting.
Log | Files | Refs | Submodules | LICENSE

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:
Mdummy/usawa/runnable/recalc.py | 1+
Mdummy/usawa/runnable/view.py | 91+++++++++++++-------------------------------------------------------------------
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__':