Hello John,
I have submitted a PR (https://github.com/Gnucash/gnucash/pull/2066). I
added type translators for all the types that were supported by the
typemap(out) for GList but have only tested with lists of GncLot objects, as I
am not sure where to find existing C functions that take some of the other
types of lists. This at least fixes the issue with Customer.ApplyPayment not
working at all from Python.
Thanks,
Oliver Trevor
________________________________
From: John Ralls <[email protected]>
Sent: Saturday, March 8, 2025 11:26 PM
To: Oliver Trevor <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: Issues with GList Arguments in Python Bindings?
On Mar 8, 2025, at 14:57, Oliver Trevor <[email protected]> wrote:
Hello Gnucash developers,
I was attempting to use the Gnucash Python bindings to apply payments to
a list of invoices using Customer.ApplyPayment (which maps to
gncOwnerApplyPaymentSecs on the C side), but it gives an error "TypeError: in
method 'gncOwnerApplyPaymentSecs', argument 3 of type 'GList *'" when I attempt
to pass a Python list of lots as the second argument "lots" (third argument on
the C side).
Looking at how the SWIG bindings were written, I think the issue may be
that there is not a type translator that turns Python lists into GList.
base-typemaps.i has a SWIG type translator on line 269 that converts Python
lists into GSList objects, but as far as I can tell there isn't one that
converts Python lists into GList objects.
Am I correct that this is an issue, or am I missing how the bindings are
intended to be used? If it's an issue, I could work on a PR to add a type
translator for GList. Also, has anybody ever tried making bindings using
GObject introspection instead of SWIG, since Gnucash's API is already
GLib-based?
Oliver,
Looks to like you’re right. There are several SCM List <-> GList* typemaps but
only a typemap(out) for Python, not useful for passing arguments into a C
function. Go ahead and write a PR.
I don’t think anyone has considered GI. While somebody made a start on GI
bindings for Guile (https://github.com/spk121/guile-gi) it’s a fairly recent
(started in 2019) project and seems to have been abandoned a couple of years
ago. Meanwhile on the GnuCash side while it’s true that we have GObject-based
classes, their memory management wasn’t done correctly and probably wouldn’t
integrate well with GI. Our long-term goal is to reimplement them as C++
objects.
Regards,
John Ralls
_______________________________________________
gnucash-devel mailing list
[email protected]
https://lists.gnucash.org/mailman/listinfo/gnucash-devel