Re: [GNC-dev] Python bindings: How to expose additional engine functions

Steve Brown <[email protected]>
Newsgroups gmane.comp.gnome.apps.gnucash.devel
Message-ID <[email protected]>
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 <[email protected]>
> > 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
[email protected]
https://lists.gnucash.org/mailman/listinfo/gnucash-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.