Hi John, Thanks for the swig link. That's exactly what I need.
I added the typemaps.i include and the following to gnucash_core.i. gboolean gncOwnerGetOwnerFromTxn(Transaction *INPUT, GncOwner *OUTPUT); The *OUTPUT was ignored and arg2 is processed according the GncOwner(in) typemap. OTOH: gboolean gncOwnerGetOwnerFromTxn(Transaction *INPUT, int *OUTPUT); The value of arg2 after the call is appended to the return as a tuple. That seems correct. Any idea? === The issue with gnc_get_current_session() is very minor. I do use a context manager like the example. However, if I call gnc_get_current_session(), it doesn't know that a session already exists and creates a new one. That wasn't the behavior I expected. On the surface, it seems unnecessary to call that function at all. However, my environment is a plugin with an embedded Python interpreter. Calls to gnc_get_current_session() are useful and work just fine. The Python scripts are easier to debug standalone. As this is unlikely to be an issue for anybody, but me, I can work around it. Thanks, Steve On Tue, 2023-01-24 at 14:37 -0800, John Ralls wrote: > > > > On Jan 24, 2023, at 2:03 PM, Steve Brown <sbr...@opensat.com> > > wrote: > > > > My use case is accessing owner name and address from a transaction. > > The transaction is found by guid. > > > > Exposing guid_from_string() was pretty straightforward as was > > GetLot() > > and GetFirstAPARAcctSplit(). > > > > I also need GetOwnerFromTxn or GetOwnerFromLot. However, this and > > many > > similar functions return the result through an argument and > > indicate > > success or failure by returning a boolean. It's not clear whether > > there > > is an general way with swig to deal with this other than adding a > > wrapper to return the result and indicate failure by returning > > NULL. > > Yes, but SWIG makes it pretty simple, see > https://www.swig.org/Doc3.0/Python.html#Python_nn46. > Note that you can still have the bool rv to test success. > > > I also noticed that there is a problem with gnc- > > session.c:gnc_get_current_session() using the bindings. In the > > executable, gnc_set_current_session() is called in gnc_file.c after > > each qof_session_new(). But with the Python bindings, the swig- > > generated code calls qof_session_new(). So, current_session isn't > > initialized and the first call subtly creates a new session. I > > added a > > gnc_set_current_session() call to qof_session_new() and that fixed > > things for me . I don't think that's the best solution. > > Neither set_ nor get_current_session are wrapped. You should be > creating a Python Session object, > bindings/python/examples/simple_book.py. > > Regards, > John Ralls > _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel