From 723dd41df17d3c4730ebbe8d1b10e4cb577870c7 Mon Sep 17 00:00:00 2001 From: David Sklar <177495+davidsklar@users.noreply.github.com> Date: Sat, 14 Jan 2023 14:28:09 -0500 Subject: Fix python/c++ conversion for boost::optional Setters for types wrapped in boost::optional, such as item_t::note were broken, e.g. setting a note on a transaction resulted in garbled data that would cause Python to throw utf-8 errors when retrieving the note. (But setters that accessed strings directly, e.g. "payee" on a transaction worked fine.) This change alters the from-python conversion for optional-wrapped types based on the example at https://stackoverflow.com/questions/36485840/wrap-boostoptional-using-boostpython and a test case to verify the behavior. --- test/python/TransactionTest.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'test/python') diff --git a/test/python/TransactionTest.py b/test/python/TransactionTest.py index 6827720d..c87f8c4b 100644 --- a/test/python/TransactionTest.py +++ b/test/python/TransactionTest.py @@ -10,6 +10,7 @@ class TransactionTestCase(unittest.TestCase): def setUp(self): self.journal = read_journal_from_string(""" 2012-03-01 KFC + ;this is a note Expenses:Food $21.34 Assets:Cash 2012-03-02 MJT @@ -31,6 +32,14 @@ class TransactionTestCase(unittest.TestCase): self.assertEqual(len(x0_posts), 4) self.assertEqual(len(x1_posts), 0) + def testSetNote(self): + xacts = [xact for xact in self.journal] + self.assertEqual(xacts[0].note, 'this is a note') + xacts[0].note = 'this is also a note' + self.assertEqual(xacts[0].note, 'this is also a note') + xacts[0].note += 'so is this' + self.assertEqual(xacts[0].note, 'this is also a noteso is this') + def suite(): return unittest.TestLoader().loadTestsFromTestCase(TransactionTestCase) -- cgit v1.2.3