usawa

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | Submodules | LICENSE

commit 4a04d9a8bcbbbf56f984eb785247a08ff2dc39af
parent 8d67c75f187669a4f3e87a03b5738fcdad8c50bb
Author: lash <dev@holbrook.no>
Date:   Mon,  5 Jan 2026 17:25:27 +0100

Add ledger create cli tool

Diffstat:
Mdummy/setup.py | 3++-
Mdummy/usawa/ledger.py | 4++--
Adummy/usawa/runnable/create.py | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdummy/usawa/store.py | 5+++++
4 files changed, 68 insertions(+), 3 deletions(-)

diff --git a/dummy/setup.py b/dummy/setup.py @@ -2,6 +2,7 @@ from setuptools import setup setup( install_requires=[ - "wheepy[valkey]~=0.0.3" + "wheepy[valkey]~=0.0.3", + "confini~=0.6.5" ], ) diff --git a/dummy/usawa/ledger.py b/dummy/usawa/ledger.py @@ -153,7 +153,7 @@ class Ledger: :todo: Add warnings for ignored parameters """ - def __init__(self, unitindex, tree=None, acl=None, serial=0, base=DEFAULTPARENT, topic=None): + def __init__(self, unitindex, tree=None, acl=None, serial=0, base=DEFAULTPARENT, topic=None, src=None): self.uidx = unitindex self.sigs = {} self.entries = {} @@ -161,7 +161,7 @@ class Ledger: self.tree = tree self.base = base self.base_serial = serial - self.src = None + self.src = src self.topic = topic self.acl = acl if self.topic == None: diff --git a/dummy/usawa/runnable/create.py b/dummy/usawa/runnable/create.py @@ -0,0 +1,59 @@ +import logging +import urllib.parse + +from usawa import Ledger, DemoWallet, UnitIndex + +logging.basicConfig(level=logging.DEBUG) +logg = logging.getLogger() + + +def parse_topic(v): + topic = None + if len(v) > 2: + if v[:2] == '0x': + v = v[2:] + try: + bytes.fromhex(v) + topic = v + except ValueError: + if not isinstance(v, str): + raise ValueError('invalid topic') + topic = v.encode('utf-8').hex() + + return topic + + +def parse_unit(v): + if not isinstance(v, str): + raise ValueError('invalid unit string') + return v.upper() + + +print("Creating new ledger") +v = input("Topic: ") +topic = None +if len(v) > 0: + r = parse_topic(v) + topic = bytes.fromhex(r) +logg.debug('topic {} -> {}'.format(v, topic)) + +v = input("Default unit: (default: BTC)") +if len(v) == 0: + v = 'BTC' +unit = parse_unit(v) + +v = input("Unit decimals (default: 2):") +if len(v) == 0: + v = 2 +dec = int(v) + +uidx = UnitIndex(unit, precision=dec) + +v = input("Source URI:") +src = None +if len(v) > 0: + o = urllib.parse.urlparse(v) + src = urllib.parse.urlunparse(o) + +ledger = Ledger(uidx, topic=topic, src=src) +print(ledger.to_string()) diff --git a/dummy/usawa/store.py b/dummy/usawa/store.py @@ -8,6 +8,7 @@ from .ledger import Ledger from .entry import Entry +PFX_KEY = b'\x00' PFX_LEDGER = b'\x01' PFX_LEDGER_LOCK = b'\x02' PFX_ENTRY = b'\x04' @@ -15,6 +16,10 @@ PFX_ENTRY = b'\x04' logg = logging.getLogger('usawa.store') +def pfx_key(): + return PFX_KEY + + def pfx_ledger_topic(topic): """Return ledger store prefix for topic.