usawa

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

commit 429c4b1022b4d1b4b476631c7b90adcddbdb1e09
parent b08e50e439a155777010ee58f9d0a9f3f4583b10
Author: lash <dev@holbrook.no>
Date:   Wed,  1 Apr 2026 11:14:44 -0600

Implement config, fs store for socket server.

Diffstat:
Mdummy/usawa/context.py | 7++++++-
Mdummy/usawa/resolve/base.py | 7++++++-
Mdummy/usawa/resolve/fs.py | 7++++---
Mdummy/usawa/runnable/server.py | 22++++++++++++++++++----
4 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/dummy/usawa/context.py b/dummy/usawa/context.py @@ -1,3 +1,4 @@ +import logging import getpass from whee.valkey import ValkeyStore @@ -7,7 +8,10 @@ from usawa.account import AccountIndex from usawa.store import LedgerStore, EntryStore, KeyStore from usawa.resolve.fs import FSResolver +logg = logging.getLogger('usawa.ctx') + +# TODO: move this code to a cli module def pwgetter(): return getpass.getpass('passphrase: ') @@ -16,7 +20,7 @@ class UsawaContext: pwget = pwgetter - def __init__(self, cfg, askpass=None): + def __init__(self, cfg, askpass=None, pwgetter=None): self.cfg = cfg self.db = None self.ledger = None @@ -135,6 +139,7 @@ class UsawaContext: self.resolver = FSResolver(resolver_path) else: logg.debug('missing resolver') + logg.info('created {}'.format(self.resolver)) diff --git a/dummy/usawa/resolve/base.py b/dummy/usawa/resolve/base.py @@ -45,8 +45,9 @@ class BaseResolver: :param verifier: Verifier function for checking keys and key/value relation. :type verifier: function, by default usawa.resolve.sha512_verify """ - def __init__(self, verifier=sha512_verify): + def __init__(self, base, verifier=sha512_verify): self.verifier = verifier + self.base = base """Get value for key. @@ -126,3 +127,7 @@ class BaseResolver: #logg.debug('getting parent {} {}'.format(k.hex(), v)) #entry_nolookup = Entry.from_string(v, ledger.uidx) #lookup = self.get(entry_nolookup.lookup) + + + def __str__(self): + return 'resolver base {}'.format(self.base) diff --git a/dummy/usawa/resolve/fs.py b/dummy/usawa/resolve/fs.py @@ -27,11 +27,12 @@ class FSResolver(BaseResolver): :seealso: usawa.resolve.BaseResolver """ def __init__(self, path, verifier=sha512_verify): - super(FSResolver, self).__init__(verifier=verifier) - self.path = os.path.realpath(path) + path = os.path.realpath(path) + super(FSResolver, self).__init__(path, verifier=verifier) + self.path = path os.makedirs(self.path, exist_ok=True) - + """Implements usawa.resolve.BaseResolver """ def get(self, k): diff --git a/dummy/usawa/runnable/server.py b/dummy/usawa/runnable/server.py @@ -10,7 +10,7 @@ from usawa.service import Handler, UnixServer from whee.valkey import ValkeyStore -logging.basicConfig(level=logging.DEBUG) +logging.basicConfig(level=logging.WARNING) logg = logging.getLogger() def parse(v): @@ -34,12 +34,17 @@ Public keys used to verify entries and ledger states are provided using the -k f epilog="Currently only UNIX socket are supported", ) argp.add_argument('-k', action='append', type=str, default=[], help='Add public key to list of valid signers') + argp.add_argument('-c', type=str, help='override config dir') argp.add_argument('-u', type=str, default='./usawa.socket', help='UNIX Socket file to listen on') - 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('-v', type=str, choices=['info','debug','warning','error'], help='be verbose') argp.add_argument('ledger_xml_file', type=str, help='load ledger metadata from XML file') arg = argp.parse_args() + if arg.v: + logg.setLevel(getattr(logging, arg.v.upper())) + + #ctx = UsawaContext(arg) + acl = ACL() for k in arg.k: acl.add(k) @@ -49,8 +54,17 @@ Public keys used to verify entries and ledger states are provided using the -k f uidx = UnitIndex.from_tree(ledger_tree) ledger = Ledger.from_tree(ledger_tree, acl=acl) - db = ValkeyStore('', host=arg.valkey_host, port=arg.valkey_port) + #db = ValkeyStore('', host=arg.valkey_host, port=arg.valkey_port) #srv = TCPServer(db, ledger, acl=acl) + db = None + if cfg.get('STORE_TYPE') == 'valkey': + dbid = cfg.get('VALKEY_ID') + host = self.cfg.get('VALKEY_HOST') + port = self.cfg.get('VALKEY_PORT') + db = ValkeyStore('', host=host, port=port) + elif self.cfg.get('STORE_TYPE') == 'fs': + base = self.cfg.get('FSSTORE_BASE') + db = FsStore(base=base, dbname='usawa') srv = UnixServer(db, ledger, acl=acl, path=arg.u) def stop_server(sig, stack):