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:
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]