diff options
author | John Wiegley <johnw@newartisans.com> | 2007-04-27 10:09:00 +0000 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2008-04-13 03:38:32 -0400 |
commit | d0e9822ed16cb36de4cb1171a89d4049c615f1a0 (patch) | |
tree | fa48eba60a56dee5bcf1ebd266d822c5a96e4323 /py_xpath.cc | |
parent | 0eb597a681115d6d5dd2ea4511fa3b8c7b3d9c9f (diff) | |
download | fork-ledger-d0e9822ed16cb36de4cb1171a89d4049c615f1a0.tar.gz fork-ledger-d0e9822ed16cb36de4cb1171a89d4049c615f1a0.tar.bz2 fork-ledger-d0e9822ed16cb36de4cb1171a89d4049c615f1a0.zip |
Moved around the Python code.
Diffstat (limited to 'py_xpath.cc')
-rw-r--r-- | py_xpath.cc | 79 |
1 files changed, 79 insertions, 0 deletions
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 <typename T> +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<const entry_t&>()) + .def(init<const transaction_t&>()) + .def(init<const account_t&>()) + .add_property("entry", + make_getter(&details_t::entry, + return_value_policy<reference_existing_object>())) + .add_property("xact", + make_getter(&details_t::xact, + return_value_policy<reference_existing_object>())) + .add_property("account", + make_getter(&details_t::account, + return_value_policy<reference_existing_object>())) + ; + + class_< xpath_t::op_t > ("ValueExpr", init<xpath_t::op_t::kind_t>()) + .def("calc", py_calc_1) + .def("calc", py_calc<account_t>) + .def("calc", py_calc<entry_t>) + .def("calc", py_calc<transaction_t>) + ; + + def("parse_xpath_t", py_parse_xpath_t_1, + return_value_policy<manage_new_object>()); + + class_< item_predicate<transaction_t> > + ("TransactionPredicate", init<string>()) + .def("__call__", &item_predicate<transaction_t>::operator()) + ; + + class_< item_predicate<account_t> > + ("AccountPredicate", init<string>()) + .def("__call__", &item_predicate<account_t>::operator()) + ; + +#define EXC_TRANSLATE(type) \ + register_exception_translator<type>(&exc_translate_ ## type); + + EXC_TRANSLATE(xpath_t_error); + EXC_TRANSLATE(calc_error); +#if 0 + EXC_TRANSLATE(mask_error); +#endif +} |