From d0e9822ed16cb36de4cb1171a89d4049c615f1a0 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Fri, 27 Apr 2007 10:09:00 +0000 Subject: Moved around the Python code. --- py_xpath.cc | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 py_xpath.cc (limited to 'py_xpath.cc') diff --git a/py_xpath.cc b/py_xpath.cc new file mode 100644 index 00000000..6569ce7b --- /dev/null +++ b/py_xpath.cc @@ -0,0 +1,79 @@ +using namespace boost::python; +using namespace ledger; + +value_t py_calc_1(xpath_t::op_t& xpath_t, const details_t& item) +{ + value_t result; + xpath_t.calc(result, item); + return result; +} + +template +value_t py_calc(xpath_t::op_t& xpath_t, const T& item) +{ + value_t result; + xpath_t.calc(result, details_t(item)); + return result; +} + +xpath_t::op_t * py_parse_xpath_t_1(const string& str) +{ + return parse_xpath_t(str); +} + +#define EXC_TRANSLATOR(type) \ + void exc_translate_ ## type(const type& err) { \ + PyErr_SetString(PyExc_RuntimeError, err.what()); \ + } + +EXC_TRANSLATOR(xpath_t_error) +EXC_TRANSLATOR(calc_error) +#if 0 +EXC_TRANSLATOR(mask_error) +#endif + +void export_xpath() +{ + class_< details_t > ("Details", init()) + .def(init()) + .def(init()) + .add_property("entry", + make_getter(&details_t::entry, + return_value_policy())) + .add_property("xact", + make_getter(&details_t::xact, + return_value_policy())) + .add_property("account", + make_getter(&details_t::account, + return_value_policy())) + ; + + class_< xpath_t::op_t > ("ValueExpr", init()) + .def("calc", py_calc_1) + .def("calc", py_calc) + .def("calc", py_calc) + .def("calc", py_calc) + ; + + def("parse_xpath_t", py_parse_xpath_t_1, + return_value_policy()); + + class_< item_predicate > + ("TransactionPredicate", init()) + .def("__call__", &item_predicate::operator()) + ; + + class_< item_predicate > + ("AccountPredicate", init()) + .def("__call__", &item_predicate::operator()) + ; + +#define EXC_TRANSLATE(type) \ + register_exception_translator(&exc_translate_ ## type); + + EXC_TRANSLATE(xpath_t_error); + EXC_TRANSLATE(calc_error); +#if 0 + EXC_TRANSLATE(mask_error); +#endif +} -- cgit v1.2.3