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