From 6a5d6a88cd626ee563b344657faec2ceb62b7f59 Mon Sep 17 00:00:00 2001 From: Alexis Hildebrandt Date: Mon, 19 Nov 2012 23:00:58 +0100 Subject: [PATCH] Fix crash when accessing the transaction code via post.xact.code using python ledger would abort with the following error message: TypeError: No Python class registered for C++ class boost::optional The changes pass a CallPolicy to make_getter when adding the transaction code property for python, so that the correct to_python conversion is made. For details see: http://www.boost.org/doc/libs/1_52_0/libs/python/doc/v2/faq.html#topythonconversionfailed --- src/py_xact.cc | 6 ++++-- test/regress/xact_code.dat | 3 +++ test/regress/xact_code.py | 4 ++++ test/regress/xact_code_py.test | 3 +++ 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 test/regress/xact_code.dat create mode 100644 test/regress/xact_code.py create mode 100644 test/regress/xact_code_py.test diff --git a/src/py_xact.cc b/src/py_xact.cc index 3d792c7b..96674207 100644 --- a/src/py_xact.cc +++ b/src/py_xact.cc @@ -119,8 +119,8 @@ void export_xact() .def("__str__", py_xact_to_string) .add_property("code", - make_getter(&xact_t::code), - make_setter(&xact_t::code)) + make_getter(&xact_t::code, return_value_policy()), + make_setter(&xact_t::code, return_value_policy())) .add_property("payee", make_getter(&xact_t::payee), make_setter(&xact_t::payee)) @@ -157,6 +157,8 @@ void export_xact() make_getter(&period_xact_t::period_string), make_setter(&period_xact_t::period_string)) ; + + register_optional_to_python(); } } // namespace ledger diff --git a/test/regress/xact_code.dat b/test/regress/xact_code.dat new file mode 100644 index 00000000..60956a23 --- /dev/null +++ b/test/regress/xact_code.dat @@ -0,0 +1,3 @@ +2012-11-10 (C0-d3) Payee + Assets:Checking € -12,45 + Expenses:Expenditure diff --git a/test/regress/xact_code.py b/test/regress/xact_code.py new file mode 100644 index 00000000..64abb17d --- /dev/null +++ b/test/regress/xact_code.py @@ -0,0 +1,4 @@ +import ledger + +for post in ledger.read_journal('test/regress/xact_code.dat').query('expenses'): + print post.xact.code diff --git a/test/regress/xact_code_py.test b/test/regress/xact_code_py.test new file mode 100644 index 00000000..c22158e0 --- /dev/null +++ b/test/regress/xact_code_py.test @@ -0,0 +1,3 @@ +test python test/regress/xact_code.py +C0-d3 +end test