usawa

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

commit 3fc43b9b888a66854414fd7933105fdf7f4f36fc
parent d57ce2a5b91a9606fb383fa13413469c12381b64
Author: lash <dev@holbrook.no>
Date:   Sun, 16 Nov 2025 17:05:20 +0000

Ensure running total and correct unit in entry tree load

Diffstat:
Mdummy/svcontas/__init__.py | 1-
Mdummy/svcontas/entry.py | 11+++++------
Mdummy/svcontas/ledger.py | 20+++++++++-----------
Mdummy/svcontas/unit.py | 5+++++
4 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/dummy/svcontas/__init__.py b/dummy/svcontas/__init__.py @@ -3,7 +3,6 @@ from lxml import etree from .ledger import Ledger from .entry import Entry, EntryPart from .crypto import DemoWallet, ACL -#from .state import State from .xml import nsmap from .unit import UnitIndex diff --git a/dummy/svcontas/entry.py b/dummy/svcontas/entry.py @@ -91,7 +91,8 @@ class Entry: @staticmethod def from_tree(tree, unitindex): o = tree.find('data', namespaces=nsmap()) - unit = unitindex.get(o.find('unit', namespaces=nsmap()).text) + unit = o.find('unit', namespaces=nsmap()).text + unitindex.sym(unit) serial = int(o.find('serial', namespaces=nsmap()).text) ref = o.find('ref', namespaces=nsmap()).text parent = o.find('parent', namespaces=nsmap()).text @@ -100,18 +101,16 @@ class Entry: description = description.text dt = datetime.date.fromisoformat(o.find('date', namespaces=nsmap()).text) dtreg = datetime.datetime.strptime(o.find('dateTimeRegistered', namespaces=nsmap()).text, '%Y-%m-%dT%H:%M:%SZ') - src = EntryPart.from_tree(o.find('src', namespaces=nsmap())) - dst = EntryPart.from_tree(o.find('dst', namespaces=nsmap()), credit=True) + src = EntryPart.from_tree(tree.find('src', namespaces=nsmap()), src=True) + dst = EntryPart.from_tree(tree.find('dst', namespaces=nsmap())) - r = Entry(tree.get('type'), amount, unit, serial, account, dt, ref=ref, parent=parent, tx_datereg=dtreg, description=description) + r = Entry(src, dst, unit, serial, dt, ref=ref, parent=parent, tx_datereg=dtreg, description=description) for sig in tree.iter(NSPREFIX + 'sig'): r.add_signature(sig.get('keyid'), bytes.fromhex(sig.text)) return r def serialize(self): - #src = self.src.serialize() - #dst = self.dst.serialize() src = [self.src.typ, self.src.account, self.src.amount] dst = [self.dst.typ, self.dst.account, self.dst.amount] d = [ diff --git a/dummy/svcontas/ledger.py b/dummy/svcontas/ledger.py @@ -5,7 +5,6 @@ import lxml from .crypto import DemoWallet from .xml import nsmap, XML_FORMAT_VERSION -#from .state import State from .constant import NSPREFIX, DEFAULTPARENT from .entry import Entry @@ -81,8 +80,6 @@ class Ledger: self.tree = tree if self.tree == None: self.reset() - #self.state = State() - #self.state.poke(serial, base) self.serial = serial self.base = base self.acl = acl @@ -168,7 +165,6 @@ class Ledger: valid_keys = list(entry.sigs.keys()) else: valid_keys = list(self.acl.pubkeys(binary=False)) - #for k in entry.sigs.keys(): for k in valid_keys: b = bytes.fromhex(k) try: @@ -191,14 +187,13 @@ class Ledger: except KeyError: self.entries[entry.serial] = [] #entries = self.entries[entry.serial] - #self.state.poke(entry.serial, entry.sum()) - self.state = entry.serial + self.serial = entry.serial self.base = entry.sum() self.entries[entry.serial].append(entry) self.running[entry.unit].apply_entry(entry) if self.tree != None and modify_tree: self.tree.append(entry.to_tree()) - logg.debug(self.running[entry.unit]) + logg.debug('entryunit {} {}'.format(entry.unit, self.running[entry.unit])) def add_signature(self, sigdata, identity): @@ -208,6 +203,8 @@ class Ledger: @staticmethod def from_tree(tree, unitindex, acl=None): + units = tree.find('units', namespaces=nsmap()) + unit = units.get('base') part = tree.find('incoming', namespaces=nsmap()) serial = int(part.get('serial')) o = part.find('digest', namespaces=nsmap()).text # verify that is sha512 @@ -221,8 +218,7 @@ class Ledger: o = part.find('real', namespaces=nsmap()) asset = int(o.find('asset', namespaces=nsmap()).text) liability = int(o.find('liability', namespaces=nsmap()).text) - r.real = RunningTotal('.', unitindex, asset=asset, liability=liability) - logg.debug(r.real) + r.real = RunningTotal(unit, unitindex, asset=asset, liability=liability) for v in part.iter(NSPREFIX + 'virt'): income = int(v.find('income', namespaces=nsmap()).text) @@ -233,12 +229,15 @@ class Ledger: r.running[sym] = RunningTotal(sym, unitindex, income=income, expense=expense, asset=asset, liability=liability) logg.debug(r.running[sym]) + if r.running.get(unit) == None: + r.running[unit] = RunningTotal(unit, unitindex) + r.apply_tree(tree) + logg.debug('loaded ledger tree last serial {}'.format(r.last)) return r.check() def apply_tree(self, tree): - #start = self.state.serial start = self.serial self.last = 0 for v in tree.iter(NSPREFIX + 'entry'): @@ -262,5 +261,4 @@ class Ledger: def __str__(self): - #return "state: " + self.state.base.hex() return "state: " + self.base.hex() diff --git a/dummy/svcontas/unit.py b/dummy/svcontas/unit.py @@ -40,6 +40,11 @@ class UnitIndex: return self.detail[k] + def sym(self, k): + _ = self.get(k) + return k + + def ex(self, k): return self.exchange[k]