usawa

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

commit 355a2e1ce20918f522be69e3078d66fb9c754a9a
parent 8667fb450d48c880fc69de2f779fd45921f67829
Author: lash <dev@holbrook.no>
Date:   Sat,  6 Dec 2025 19:19:31 +0000

Rehabilitate xml create and mirror ledger, entry imports

Diffstat:
Mdummy/create.py | 27++++++++++++++++++++++-----
Mdummy/empty.xml | 3++-
Mdummy/running.xml | 50+++++++++-----------------------------------------
Mdummy/svcontas/crypto.py | 5++++-
Mdummy/svcontas/entry.py | 4++--
Mdummy/svcontas/ledger.py | 1+
Mdummy/tests/test.xml | 64++++++++--------------------------------------------------------
7 files changed, 48 insertions(+), 106 deletions(-)

diff --git a/dummy/create.py b/dummy/create.py @@ -1,12 +1,22 @@ import argparse import datetime +import logging import lxml.etree import confini import nacl.signing -from svcontas import Entry, DemoWallet, ACL, get_units, init_ledger +from svcontas import Entry, EntryPart, DemoWallet, ACL, get_units, init_ledger +logging.basicConfig(level=logging.DEBUG) +logg = logging.getLogger() + +default_counter = { + 'income': 'asset', + 'asset': 'income', + 'expense': 'liability', + 'liability': 'expense', + } seed = bytes.fromhex('2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae') @@ -15,14 +25,18 @@ if __name__ == '__main__': argp = argparse.ArgumentParser() argp.add_argument('amount', type=str, help='value amount in decimal or whole units') argp.add_argument('-t', type=str, choices=['income', 'expense', 'asset', 'liability'], default='income', help='delta type') + argp.add_argument('--counter', type=str, choices=['income', 'expense', 'asset', 'liability'], help='delta type') argp.add_argument('-u', type=str, default='USD', help='unit of account') argp.add_argument('-r', type=str, help='reference') argp.add_argument('-p', type=str, help='parent') argp.add_argument('-a', type=str, default='Miscellaneous', help='account') argp.add_argument('--date', type=lambda d: datetime.date.fromisoformat(d), default=str(now.date()), help='date of transaction') - argp.add_argument('--xml-file', dest='xml_file', type=str, default='running.xml', help='xml file to manipulate') + argp.add_argument('--xml-file', dest='xml_file', type=str, default='empty.xml', help='xml file to manipulate') arg = argp.parse_args() + counter = arg.counter + if counter == None: + counter = default_counter[arg.t] tree = lxml.etree.parse(arg.xml_file) root = tree.getroot() units = get_units(root) @@ -31,10 +45,13 @@ if __name__ == '__main__': fakepub = bytes.fromhex('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730') acl.add(wallet.pubkey(), 1, label='foo') ledger = init_ledger(root, units, acl=acl) - - amount = units.from_floatstring(arg.u, arg.amount, allow_negative=False) + + amount = units.from_floatstring(arg.u, arg.amount) + src = EntryPart(arg.t, arg.a, amount, src=True) + dst = EntryPart(counter, arg.a, amount) + #amount = units.from_floatstring(arg.u, arg.amount, allow_negative=False) - entry = Entry(arg.t, amount, arg.u, ledger.state.serial + 1, arg.a, arg.date, parent=ledger.state.base) + entry = Entry(src, dst, arg.u, ledger.serial + 1, arg.date, parent=ledger.base) entry.sign(wallet) ledger.add_entry(entry) tree = ledger.to_tree() diff --git a/dummy/empty.xml b/dummy/empty.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<ledger xmlns="http://svcontas.defalsify.org"> +<ledger xmlns="http://svcontas.defalsify.org/"> + <topic>fca5eb40383af54fb270283251683f97f8804f35036264bb657e72f1d53b6bcf6afc532b02d2216dff01a2df69f5515c887833b98ed15a8bc6433fb28c5b4834</topic> <retrieved>2025-11-02T13:09:55Z</retrieved> <src>playalastunas.org</src> <units base="BTC"> diff --git a/dummy/running.xml b/dummy/running.xml @@ -1,6 +1,5 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> - -<ledger> +<?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> @@ -18,56 +17,25 @@ <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"> + <virt unit="USD"> <income>4213</income> <expense>77718</expense> <asset>11400</asset> <liability>22284</liability> </virt> - <virt symbol="BTC"> + <virt unit="BTC"> <income>3249191</income> <expense>0</expense> <asset>3249191</asset> <liability>0</liability> </virt> + <digest algo="sha512">b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944cb5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c</digest> + <sig type="ed25519" keyid="58851ae2166b3f1454193e0a7e821402dd1c1a91">1f74a9c0196a025f27d4e940c4abedfa2d37504f268aea359659cb65b85bd4d7974369507950006964c93391d3d4580ab8064f6d30a62908468ef771be952e95</sig> + <sig type="ed25519" keyid="566c38287d3f31c7e50836cae58e426c6bccc52d">117a57c72ed210b91469307a1c2e73fe2d5ee306cd8ccf1a9db4ecb15d38ecbbfc97d62fec4ab8aadb08c531f2d1ede34cb6e4d3987bcba63322a0767e532e13</sig> + </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> - <account>Donations</account> - <description>Alice</description> - <amount>524</amount> - <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> - <account>Construction</account> - <description>Install AC</description> - <amount>1000000</amount> - </data> - <sig type="ed25519" keyid="7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730">cc06808cbbee0510331aa97974132e8dc296aeb795be229d064bae784b0a87a5cf4281d82e8c99271b75db2148f08a026c1a60ed9cabdb8cac6d24242dac4063</sig> - </entry> -</ledger> +<entry><dst type="income"><account>Miscellaneous</account><amount>12300</amount></dst><dst type="asset"><account>Miscellaneous</account><amount>12300</amount></dst><data><parent>b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944cb5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c</parent><ref>76bc9066-bc31-45c1-a897-5f9c890a0ca0</ref><serial>1</serial><unit>USD</unit><date>2025-12-06</date><dateTimeRegistered>2025-12-06T19:11:09Z</dateTimeRegistered></data><sig type="ed25519" keyid="34d26579dbb456693e540672cf922f52dde0d6532e35bf06be013a7c532f20e0">49ea917dcf6267b736daf4a61b9e919eaddfc57f6fbf101a81ebc4159795e0e4283b3d63baf64db40e886dcae5ef0dc735b666c81926da15db8fedf36ece3509</sig></entry></ledger> diff --git a/dummy/svcontas/crypto.py b/dummy/svcontas/crypto.py @@ -85,6 +85,9 @@ class ACL: for k in self.axx.values(): v = k[0] if not binary: - v = v.hex() + try: + v = v.hex() + except AttributeError: + v = self.axx[self.rev[v]][0] r.append(v) return r 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(o.find('src', namespaces=nsmap()), src=True) - dst = EntryPart.from_tree(o.find('dst', namespaces=nsmap()), src=True) + src = EntryPart.from_tree(tree.find('src', namespaces=nsmap()), src=True) + dst = EntryPart.from_tree(tree.find('dst', namespaces=nsmap())) 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 @@ -186,6 +186,7 @@ class Ledger: valid_keys = list(entry.sigs.keys()) else: valid_keys = list(self.acl.pubkeys(binary=False)) + logg.debug('testing valid keys {}'.format(valid_keys)) for k in valid_keys: b = bytes.fromhex(k) try: diff --git a/dummy/tests/test.xml b/dummy/tests/test.xml @@ -1,5 +1,4 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> - +<?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> @@ -18,72 +17,25 @@ <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"> + <virt unit="USD"> <income>4213</income> <expense>77718</expense> <asset>11400</asset> <liability>22284</liability> </virt> - <virt symbol="BTC"> + <virt unit="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> + <digest algo="sha512">b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944cb5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c</digest> + <sig type="ed25519" keyid="58851ae2166b3f1454193e0a7e821402dd1c1a91">1f74a9c0196a025f27d4e940c4abedfa2d37504f268aea359659cb65b85bd4d7974369507950006964c93391d3d4580ab8064f6d30a62908468ef771be952e95</sig> + <sig type="ed25519" keyid="566c38287d3f31c7e50836cae58e426c6bccc52d">117a57c72ed210b91469307a1c2e73fe2d5ee306cd8ccf1a9db4ecb15d38ecbbfc97d62fec4ab8aadb08c531f2d1ede34cb6e4d3987bcba63322a0767e532e13</sig> - </data> - <sig type="ed25519" keyid="7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730">cc06808cbbee0510331aa97974132e8dc296aeb795be229d064bae784b0a87a5cf4281d82e8c99271b75db2148f08a026c1a60ed9cabdb8cac6d24242dac4063</sig> - </entry> -</ledger> + </incoming> +<entry><src type="income"><account>Miscellaneous</account><amount>12300</amount></src><dst type="asset"><account>Miscellaneous</account><amount>12300</amount></dst><data><parent>b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944cb5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c</parent><ref>ae559408-7663-4289-ba95-e861751c05a7</ref><serial>1</serial><unit>USD</unit><date>2025-12-06</date><dateTimeRegistered>2025-12-06T19:18:46Z</dateTimeRegistered></data><sig type="ed25519" keyid="34d26579dbb456693e540672cf922f52dde0d6532e35bf06be013a7c532f20e0">5e9e43c246e7a34aa47c54844d044111b940addde3cf952a2d622c92641307ee4e859e301ebe80dea3e3bc59cce633fa4fed80fd2dcf9c54b05b01dfdd0fae0d</sig></entry></ledger>