From 72d69d3ec90c1e0a3565d475a092d0f2051bd776 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Wed, 8 Sep 2004 21:21:21 -0400 Subject: Python fixes; starting adding support for using item_handlers in python --- walk.cc | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) (limited to 'walk.cc') diff --git a/walk.cc b/walk.cc index 61c3fa30..0e0fd0ab 100644 --- a/walk.cc +++ b/walk.cc @@ -300,3 +300,125 @@ void dow_transactions::flush() } } // namespace ledger + +#ifdef USE_BOOST_PYTHON + +#include + +using namespace boost::python; +using namespace ledger; + +template +struct item_handler_wrap : public item_handler +{ + PyObject* self; + item_handler_wrap(PyObject * self_) : self(self_) {} + item_handler_wrap(PyObject * self_, const item_handler& handler) + : item_handler(const_cast *>(&handler)), self(self_) {} + + void flush() { + call_method(self, "flush"); + } + void default_flush() { + item_handler::flush(); + } + + void operator()(T& item) { + call_method(self, "__call__", item); + } + void default_call(T& item) { + item_handler::operator()(item); + } +}; + +void (subtotal_transactions::*subtotal_transactions_flush)() = + &subtotal_transactions::flush; + +void export_walk() +{ + class_< item_handler, + item_handler_wrap > ("TransactionHandler") + .def(init *>()) + + .def("flush", &item_handler::flush, + &item_handler_wrap::default_flush) + .def("__call__", &item_handler::operator(), + &item_handler_wrap::default_call) + ; + + class_< ignore_transactions > ("IgnoreTransactions") + .def("flush", &item_handler::flush) + .def("__call__", &ignore_transactions::operator()); + ; + + class_< clear_transaction_data > ("ClearTransactionData") + .def("flush", &item_handler::flush) + .def("__call__", &clear_transaction_data::operator()); + ; + + class_< set_account_value > + ("SetAccountValue", init *>()) + .def("flush", &item_handler::flush) + .def("__call__", &set_account_value::operator()); + ; + +#if 0 + class_< sort_transactions > + ("SortTransactions", init *>()) + .def("flush", &sort_transactions::flush) + .def("__call__", &sort_transactions::operator()); + ; +#endif + + class_< filter_transactions > + ("FilterTransactions", init *, std::string>()) + .def("flush", &item_handler::flush) + .def("__call__", &filter_transactions::operator()); + ; + + class_< calc_transactions > + ("CalcTransactions", init *, optional >()) + .def("flush", &item_handler::flush) + .def("__call__", &calc_transactions::operator()); + ; + + class_< collapse_transactions > + ("CollapseTransactions", init *>()) + .def("flush", &collapse_transactions::flush) + .def("__call__", &collapse_transactions::operator()); + ; + + class_< changed_value_transactions > + ("ChangeValueTransactions", init *, bool>()) + .def("flush", &changed_value_transactions::flush) + .def("__call__", &changed_value_transactions::operator()); + ; + + class_< subtotal_transactions > + ("SubtotalTransactions", init *>()) + .def("flush", subtotal_transactions_flush) + .def("__call__", &subtotal_transactions::operator()); + ; + +#if 0 + class_< interval_transactions > + ("IntervalTransactions", init *>()) + .def("flush", &item_handler::flush) + .def("__call__", &interval_transactions::operator()); + ; +#endif + + class_< dow_transactions > + ("DowTransactions", init *>()) + .def("flush", &dow_transactions::flush) + .def("__call__", &dow_transactions::operator()); + ; + + class_< related_transactions > + ("RelatedTransactions", init *, optional >()) + .def("flush", &item_handler::flush) + .def("__call__", &related_transactions::operator()); + ; +} + +#endif // USE_BOOST_PYTHON -- cgit v1.2.3