usawa

Signed, immutable accounting.
Log | Files | Refs | Submodules | LICENSE

commit 761532d2fac616dd5160cc8030e71a6bc1e26e34
parent 4de52eecbbb87e7476cb0c9901e8d4e2e6f5e45b
Author: lash <dev@holbrook.no>
Date:   Sun, 17 May 2026 15:12:27 -0600

Add linker object

Diffstat:
Adummy/tests/link.py | 33+++++++++++++++++++++++++++++++++
Adummy/usawa/link.py | 22++++++++++++++++++++++
2 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/dummy/tests/link.py b/dummy/tests/link.py @@ -0,0 +1,33 @@ +import logging +import datetime +import unittest +import os + +from usawa import Entry, Ledger, UnitIndex +from usawa.link import EntryLink + +logging.basicConfig(level=logging.DEBUG) +logg = logging.getLogger() + +testdir = os.path.realpath(os.path.dirname(__file__)) + +class TestLink(unittest.TestCase): + + def setUp(self): + uidx = UnitIndex() + ledger = Ledger(uidx) + self.linker = EntryLink(ledger) + + + def test_register(self): + o = Entry(serial=42, tx_date=datetime.datetime.now(datetime.UTC)) + self.linker.link(o) + o = Entry(serial=666, tx_date=datetime.datetime.now(datetime.UTC)) + self.linker.link(o) + o = Entry(serial=42, tx_date=datetime.datetime.now(datetime.UTC)) + with self.assertRaises(FileExistsError): + self.linker.link(o) + + +if __name__ == '__main__': + unittest.main() diff --git a/dummy/usawa/link.py b/dummy/usawa/link.py @@ -0,0 +1,22 @@ +import uuid + + +class EntryLink: + + def __init__(self, ledger): + self.ledger = ledger + self.idx = {} + self.links = {} + + + def link(self, entry, link_uuid=None): + v = self.idx.get(entry.serial) + if v != None: + raise FileExistsError('link {} already has entry {}'.format(v, entry)) + if link_uuid == None: + link_uuid = uuid.uuid4() + s = str(link_uuid) + if self.links.get(s) == None: + self.links[s] = [] + self.links[s].append(entry.serial) + self.idx[entry.serial] = s