commit 761532d2fac616dd5160cc8030e71a6bc1e26e34
parent 4de52eecbbb87e7476cb0c9901e8d4e2e6f5e45b
Author: lash <dev@holbrook.no>
Date: Sun, 17 May 2026 15:12:27 -0600
Add linker object
Diffstat:
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