usawa

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

commit 055d703a1c30762d046570766b00508fe82558c0
parent b094026187059f7442bb57714161831b51658213
Author: lash <dev@holbrook.no>
Date:   Fri, 13 Feb 2026 12:59:07 +0000

Add attach to add CLI tool (breaks verify from store retrieve)

Diffstat:
Mdummy/tests/entry.py | 4++++
Mdummy/usawa/entry.py | 18++++++++++++------
Mdummy/usawa/runnable/add.py | 11+++++++++--
3 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/dummy/tests/entry.py b/dummy/tests/entry.py @@ -122,6 +122,10 @@ class TestEntry(unittest.TestCase): wallet = DemoWallet() o.sign(wallet) tree = o.to_tree() + + s = lxml.etree.tostring(tree) + tree = lxml.etree.fromstring(s) + entry = Entry.from_tree(tree, self.uidx) if __name__ == '__main__': diff --git a/dummy/usawa/entry.py b/dummy/usawa/entry.py @@ -11,6 +11,7 @@ from .constant import DEFAULTPARENT, NSPREFIX from .crypto import DemoWallet from .error import ACLError, VerifyError from .xml import nsmap +from .asset import Asset logg = logging.getLogger('usawa.entry') @@ -189,6 +190,7 @@ class Entry: :type asset: usawa.Asset """ def attach(self, asset): + logg.debug('attach {} to {}'.format(asset, self)) self.attachment.append(asset) @@ -216,6 +218,7 @@ class Entry: :raises ValueError: serial is less than min :returns: Entry object. :rtype: usawa.Entry + :todo: Support multiple debit, credit """ @staticmethod def from_tree(tree, unitindex, min=0): @@ -235,17 +238,20 @@ class Entry: src_tree = o.find('debit', namespaces=nsmap()) dst_tree = o.find('credit', namespaces=nsmap()) - o = Entry(serial, dt, ref=ref, parent=parent, tx_datereg=dtreg, description=description, unitindex=unitindex) - + entry = Entry(serial, dt, ref=ref, parent=parent, tx_datereg=dtreg, description=description, unitindex=unitindex) src = EntryPart.from_tree(src_tree, debit=True) dst = EntryPart.from_tree(dst_tree) - o.add_part(src, debit=True) - o.add_part(dst) + entry.add_part(src, debit=True) + entry.add_part(dst) + + for v in o.findall('attachment', namespaces=nsmap()): + asset = Asset.from_tree(v) + entry.attach(asset) for sig in tree.iter(NSPREFIX + 'sig'): - o.add_signature(sig.get('keyid'), bytes.fromhex(sig.text)) + entry.add_signature(sig.get('keyid'), bytes.fromhex(sig.text)) - return o + return entry """Generate the simple data structure used for rencode serialization. diff --git a/dummy/usawa/runnable/add.py b/dummy/usawa/runnable/add.py @@ -6,7 +6,7 @@ import argparse import uuid import datetime -from usawa import Ledger, Entry, EntryPart, DemoWallet, UnitIndex, load +from usawa import Ledger, Entry, EntryPart, DemoWallet, UnitIndex, load, Asset from usawa.constant import CATEGORIES from usawa.store import LedgerStore from whee.valkey import ValkeyStore @@ -28,7 +28,7 @@ class Context: self.part = [] self.output = None self.f = None - self.attachments = [] + self.attach = [] def close(self): @@ -67,6 +67,11 @@ class Context: ctx.output = os.path.realpath(args.output) else: ctx.output = '<stdout>' + + for v in args.attachment: + o = Asset.from_file(v) + ctx.attach.append(o) + return ctx @@ -178,6 +183,8 @@ ctx.validate() entry = Entry(ledger.next_serial(), dt, parent=ledger.current(), description=ctx.description, ref=ctx.ref, unitindex=ctx.uidx) entry.add_part(ctx.part[0], debit=True) entry.add_part(ctx.part[1]) +for o in ctx.attach: + entry.attach(o) entry.sign(wallet) logg.debug('storing entry {}'.format(entry)) store.add_entry(entry, update_ledger=True)