summaryrefslogtreecommitdiff
path: root/py_xpath.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2007-04-27 10:09:00 +0000
committerJohn Wiegley <johnw@newartisans.com>2008-04-13 03:38:32 -0400
commitd0e9822ed16cb36de4cb1171a89d4049c615f1a0 (patch)
treefa48eba60a56dee5bcf1ebd266d822c5a96e4323 /py_xpath.cc
parent0eb597a681115d6d5dd2ea4511fa3b8c7b3d9c9f (diff)
downloadfork-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.cc79
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
+}