usawa

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

commit 8667fb450d48c880fc69de2f779fd45921f67829
parent 933ecbb807e82c8593f4823de35e26d2e040a054
Author: lash <dev@holbrook.no>
Date:   Sat,  6 Dec 2025 18:27:01 +0000

WIP update xml imports

Diffstat:
Mdummy/svcontas/entry.py | 4++--
Mdummy/svcontas/ledger.py | 14+++++++++++---
Mdummy/tests/ledger.py | 11+++++++++++
Adummy/tests/test.xml | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 113 insertions(+), 5 deletions(-)

diff --git a/dummy/svcontas/entry.py b/dummy/svcontas/entry.py @@ -109,8 +109,8 @@ 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(tree.find('src', namespaces=nsmap()), src=True) - dst = EntryPart.from_tree(tree.find('dst', namespaces=nsmap())) + src = EntryPart.from_tree(o.find('src', namespaces=nsmap()), src=True) + dst = EntryPart.from_tree(o.find('dst', namespaces=nsmap()), src=True) r = Entry(src, dst, unit, serial, dt, ref=ref, parent=parent, tx_datereg=dtreg, description=description) for sig in tree.iter(NSPREFIX + 'sig'): diff --git a/dummy/svcontas/ledger.py b/dummy/svcontas/ledger.py @@ -102,11 +102,16 @@ class Ledger: return self.serial - def reset(self, src='defalsify.org'): + def reset(self, src='defalsify.org', topic=None): self.entries[self.uidx.base] = [] self.running[self.uidx.base] = RunningTotal(self.uidx.base, self.uidx) self.tree = lxml.etree.XML('<ledger xmlns="http://svcontas.defalsify.org/" version="{}"></ledger>'.format(XML_FORMAT_VERSION)) #self.tree = lxml.etree.Element('ledger', nsmap=nsmap()) + o = lxml.etree.SubElement(self.tree, NSPREFIX + 'topic', nsmap=nsmap()) + if topic == None: + topic = os.urandom(64) + topic = topic.hex() + o.text = topic o = lxml.etree.SubElement(self.tree, NSPREFIX + 'retrieved', nsmap=nsmap()) o.text = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%dT%H:%M:%SZ') #self.tree.append(o) @@ -189,7 +194,7 @@ class Ledger: continue wallet = DemoWallet(publickey=b) v = entry.sum() - r = wallet.verify(v, sig) + r = wallet.verify(v[0], sig) have = True logg.debug('having sig {}'.format(r.hex())) return have @@ -221,12 +226,15 @@ class Ledger: @staticmethod def from_tree(tree, unitindex, acl=None): + topic_node = tree.find('topic', namespaces=nsmap()) + topic = bytes.fromhex(topic_node.text) + 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 - r = Ledger(unitindex, tree=tree, acl=acl, serial=serial, base=bytes.fromhex(o)) + r = Ledger(unitindex, topic=topic, tree=tree, acl=acl, serial=serial, base=bytes.fromhex(o)) for sig in part.iter(NSPREFIX + 'sig'): keyid = sig.get('keyid') diff --git a/dummy/tests/ledger.py b/dummy/tests/ledger.py @@ -4,6 +4,7 @@ import unittest import os import copy +import lxml.etree from whee.mem import MemStore from svcontas import Ledger, UnitIndex @@ -26,6 +27,16 @@ class TestLedger(unittest.TestCase): o = Ledger(uidx) store = LedgerStore(self.store, ledger=o) store.start() + print(o.to_string()) + + + def test_ledger_xml(self): + uidx = UnitIndex('USD') + + xml_file = os.path.join(testdir, 'test.xml') + tree = lxml.etree.parse(xml_file) + ledger = Ledger.from_tree(tree, uidx) + if __name__ == '__main__': diff --git a/dummy/tests/test.xml b/dummy/tests/test.xml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> + +<ledger xmlns="http://svcontas.defalsify.org/"> + <topic>fca5eb40383af54fb270283251683f97f8804f35036264bb657e72f1d53b6bcf6afc532b02d2216dff01a2df69f5515c887833b98ed15a8bc6433fb28c5b4834</topic> + <retrieved>2025-11-02T13:09:55Z</retrieved> + <src>playalastunas.org</src> + <units base="BTC"> + <unit sym="USD"> + <precision>2</precision> + <ex>10999310</ex> + </unit> + <unit sym="BTC"> + <precision>8</precision> + <ex>1</ex> + </unit> + </units> + <resolver algo="sha256" proto="https">g33k.holbrook.no</resolver> + <identity keyid="f1d2d2f924e986ac86fdf7b36c94bcdf32beec15" didtype="web">nondominium.org/lash/</identity> + <identity keyid="f1d2d2f924e986ac86fdf7b36c94bcdf32beec15" didtype="web">holbrook.no</identity> + <incoming serial="231"> + <digest algo="sha512">b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944cb5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c</digest> + <sig type='ed25519' keyid="58851ae2166b3f1454193e0a7e821402dd1c1a91">1f74a9c0196a025f27d4e940c4abedfa2d37504f268aea359659cb65b85bd4d7974369507950006964c93391d3d4580ab8064f6d30a62908468ef771be952e95</sig> + <sig type='ed25519' keyid="566c38287d3f31c7e50836cae58e426c6bccc52d">117a57c72ed210b91469307a1c2e73fe2d5ee306cd8ccf1a9db4ecb15d38ecbbfc97d62fec4ab8aadb08c531f2d1ede34cb6e4d3987bcba63322a0767e532e13</sig> + <real unit="BTC"> + <asset>6323141</asset> + <liability>0</liability> + </real> + <virt symbol="USD"> + <income>4213</income> + <expense>77718</expense> + <asset>11400</asset> + <liability>22284</liability> + </virt> + <virt symbol="BTC"> + <income>3249191</income> + <expense>0</expense> + <asset>3249191</asset> + <liability>0</liability> + </virt> + </incoming> + <entry type="income"> + <data> + <parent>b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c</parent> + <ref>8bcc1c17-f920-4641-a268-83d12e700555</ref> + <serial>246</serial> + <unit>USD</unit> + <date>2025-11-01</date> + <dateTimeRegistered>2025-11-05T12:24:05Z</dateTimeRegistered> + <src> + <account>Income</account> + <description>Alice</description> + <amount>524</amount> + </src> + <dst> + <account>Donations</account> + <description>Alice</description> + <amount>524</amount> + </dst> + <attachment mime="image/jpeg"> + <slug>troll</slug> + <description>The face of a troll</description> + <digest algo="sha512">777b30c8fc40aea3c717777831a05c9f29c7b6735f1573e9b0b55373c264f6f3777b30c8fc40aea3c717777831a05c9f29c7b6735f1573e9b0b55373c264f6f3</digest> + </attachment> + </data> + <sig type="ed25519" keyid="b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c">0cf9180a764aba863a67b6d72f0918bc131c6772642cb2dce5a34f0a702f9470ddc2bf125c12198b1995c233c34b4afd346c54a2334c350a948a51b6e8b4e6b6</sig> + </entry> + <entry type="liability"> + <data> + <parent>fa975b67586adb4ed8a937d383a0ef3eac3c06140253f94d2b563acada064c9f</parent> + <ref>7f6421434218e1a89ad69822e97d01017bd720cdfde1fa55673cb3133678b918</ref> + <serial>245</serial> + <unit>BTC</unit> + <date>2025-11-03</date> + <dateTimeRegistered>2025-11-05T12:24:05Z</dateTimeRegistered> + <src> + <account>Expenses</account> + <description>Install AC</description> + <amount>1000000</amount> + </src> + <dst> + <account>Construction</account> + <description>Install AC</description> + <amount>1000000</amount> + </dst> + + </data> + <sig type="ed25519" keyid="7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730">cc06808cbbee0510331aa97974132e8dc296aeb795be229d064bae784b0a87a5cf4281d82e8c99271b75db2148f08a026c1a60ed9cabdb8cac6d24242dac4063</sig> + </entry> +</ledger>