Am 2018-08-06 05:32, schrieb John Ralls:
On Aug 5, 2018, at 5:17 PM, c.holterm...@gmx.de wrote:
Hello,
after some time I get back to the gnucash python bindings.
I worked on a str method for GncNumeric. It's in the example_script
dir
(https://github.com/Gnucash/gnucash/blob/maint/bindings/python/example_scripts/str_methods.py)
I changed it to python3. Then I began to wonder about the
relationshipp of
the SwigObject and the wrapping object.
In this case it's something like
<gnucash.gnucash_core_c._gnc_numeric; proxy of <Swig Object of type
'_gnc_numeric *' at 0x7f11908da840> >
and
<gnucash.gnucash_core.GncNumeric object at 0x7f118f76d6d8>
When I have the GncNumeric object I can access the SwigObject through
its instance property.
The other way round seems not as simple.
My method __gncnumeric__str__ overwrites the __str__ method using
add_method.
In this method self points to the swig object. I cannot use the
methods of GncNumeric as
it is the layer of the wrapping object.
To access these methods I used to instantiate a
GncNumeric(instance=self) as a temporary self.
But that seems not right as this probably already exists.
I wondered if I could know about the wrapping object when I had the
instance only. I did not
find a way. I stumbled over an interesting comment in
https://github.com/Gnucash/gnucash/blob/69fef8277fde56e7d2df700b21c63c19c115852a/bindings/python/function_class.py#L50
# why reimpliment __new__? Because later on we're going to
# use new to avoid creating new instances when existing instances
# already exist with the same __instance value, or equivalent
__instance
# values, where this is desirable...
I did not find "later on". But if that works I can safely do
GncNumeric(instance=self) as it
would reuse the existing GncNumeric object.
But nevertheless I wondered if we could put a link to the GncNumeric
in the Swig Level. I tried
it:
https://github.com/c-holtermann/gnucash/commit/a6c2adf7d29c4367728a4fa920307ee595eefa5a
(link to my fork)
Interstingly some Swig objects can be added to and some others not.
GncNumeric works while
QofSession doesn't. So I made it a try block for now.
Having done that I can get to the GncNumeric (sort of higher self)
from the Swig object:
https://github.com/c-holtermann/gnucash/commit/2f35b550709ad4131aca0e7309f6bb4b0f984b84
Well I found it interesting to think these things through. Maybe
someone can tell me about
the mysterious "later on" in the cited comment. At this point I find
it useful to have a
way from the instance to the wrapping object through some kind of link
as I suggested in
the patch to function_class.
Christoph,
The person who wrote the first two lines of that, Mark Jenkins, was
the original source of the Python bindings. He was never a regular
dev, he just got 16 patches committed between 2007 and 2012, 10 of
which touched the python bindings. Your history with them is almost as
long as his--in fact you have *12* commits--and pretty much no one
else has done anything serious with them.
In other words, if anyone knows, it’s you!
Just to add some more confusion, there’s now a C++ class GncNumeric
that handles the actual implementation of many of the gnc_numeric.*
functions. I believe that SWIG can’t see it, only the C wrapper
functions are exposed to SWIG.
Regards,
John Ralls
John,
thank you for the insights and the friendly words. I like the python
bindings
for gnucash and use them to feed my bank data to gnucash using a
webscraping
script that fetches a CSV for me which I can then import using the
bindings.
This has worked quite well for me for years. At some point in time
gnucash
wouldn't build due to some segmentation error. The system was working
but I
only now came back to compile gnucash again when I made a big system
update.
I'm willing to now and then do something for the python bindings. I
don't feel
like an expert. But surely I'd like to talk and think things through
about
them. Maybe someone is interested. I saw that there were some people
asking
questions about the bindings on this list. Maybe they don't commit but
still
work with the bindings. So my question remains and maybe someone has an
idea.
I will continue to think about it anyway (depending on the time I can
spare
on this project :-).
I thought I will look through the python bindings and see if all files
are
compatible with python3. Thanks to you developers who made that step for
the bindings ! I suppose some of the example scripts are not yet
converted.
The information in the wiki should reflect the step to python3. I'll try
to
have a look at that.
Then you speak of c++ GncNumeric. As I understand you are moving the
source
from c to c++. So the python bindings need to reflect that. That sounds
like
another piece of work. Is there imminent need for change there ? Chances
of
breaking changes ?
regards,
Christoph Holtermann
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel