commit 6778818f21d28e73f8068fdff505c54c56004b57
parent c8acc262fa7732872aacd9446b39b65b6e04dc88
Author: lash <dev@holbrook.no>
Date: Sun, 17 May 2026 17:30:44 -0600
Add entry linking to serializations
Diffstat:
3 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/dummy/tests/entry.py b/dummy/tests/entry.py
@@ -30,8 +30,10 @@ class TestEntry(unittest.TestCase):
o.add_part(dst)
s = o.serialize()
+ logg.debug('serialized first {}'.format(s.hex()))
o = Entry.deserialize(s)
ss = o.serialize()
+ logg.debug('serialized second {}'.format(ss.hex()))
self.assertEqual(s, ss)
diff --git a/dummy/tests/link.py b/dummy/tests/link.py
@@ -72,5 +72,17 @@ class TestLink(unittest.TestCase):
self.assertEqual(r[1], 666)
+ def test_entry_serialize(self):
+ uu = uuid.uuid4()
+ entry_a = Entry(serial=42, tx_date=datetime.datetime.now(datetime.UTC), ref=str(uu))
+ entry_b = Entry(serial=666, tx_date=datetime.datetime.now(datetime.UTC))
+ self.linker.link_to(entry_a, entry_b)
+ v = entry_a.serialize(linker=self.linker)
+ linker = EntryLink(self.ledger)
+ o = Entry.deserialize(v, linker=linker)
+ v = linker.get(o)
+ self.assertEqual(v, str(uu))
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/dummy/usawa/entry.py b/dummy/usawa/entry.py
@@ -391,7 +391,7 @@ class Entry(UsawaElement):
:rtype: list
:todo: Add time component to entry.
"""
- def to_list(self):
+ def to_list(self, linker=None):
debit = []
credit = []
attach = []
@@ -407,6 +407,13 @@ class Entry(UsawaElement):
if self.tags:
tags = self.tags
+ link = None
+ if linker != None:
+ link = linker.get(self)
+ if link != None:
+ link = uuid.UUID(link)
+ link = link.bytes
+
base = super(Entry, self).serialize()
logg.debug('serializing with parent {}'.format(self.parent.hex()))
d = [
@@ -422,6 +429,7 @@ class Entry(UsawaElement):
attach,
tags.serialize(),
self.extref,
+ link,
]
return d
@@ -431,8 +439,8 @@ class Entry(UsawaElement):
:returns: String representation of the entry, in rencode format.
:rtype: str
"""
- def serialize(self):
- b = self.to_list()
+ def serialize(self, linker=None):
+ b = self.to_list(linker=linker)
return rencode.dumps(b)
@@ -444,11 +452,18 @@ class Entry(UsawaElement):
:rtype: usawa.Entry
"""
@staticmethod
- def deserialize(data, unitindex=None, store=None):
+ def deserialize(data, unitindex=None, store=None, linker=None):
v = rencode.loads(data)
parent = v[1]
serial = v[2]
ref = v[3].decode('utf-8')
+ link = None
+ try:
+ link = uuid.UUID(bytes=v[12])
+ except IndexError:
+ pass
+ except TypeError:
+ pass
extref = None
try:
extref = v[11]
@@ -494,6 +509,10 @@ class Entry(UsawaElement):
for v in attach_data:
asset = Asset(digest=v)
o.attach(asset)
+
+ if link != None:
+ if linker != None:
+ linker.link(o, link_uuid=str(link))
logg.debug('deserialized entry {}'.format(o))