On Wed, Dec 24, 2014 at 12:25:23PM +0100, Geert Janssens wrote:
> If I understand you correctly you want to separate the options from the 
> report generating code ? 
> So your wrapper script would be responsible for displaying the options to the 
> user and the 
> actual report script only gets the values passed in ?
> 
> The way I understand the code that will already be a big work because the 
> options for each 
> report are also defined in the same report scheme file. And the whole options 
> handling code is 
> 90% scheme code. The options themselves live in the guile context, not in C. 
> Displaying the 
> options dialog is about 70% guile code which expects the options to live in 
> guile. (I happened to 
> look at that code flow yesterday, that's why I know).
> 

I have been following the various conversations about python - something I am 
more than interested in.
(I did try to allow python calls from guile using a guile module I found by 
googling - and returning
data to guile using another such module - but had issues with random crashes so 
gave that up - the
modules were also not being maintained).

However I then found the python module and used that as the basis so that I now 
have the ability
to write reports in python 

The only change I made to gnucash was in the python module init script to call 
another python script
stored in a users .gnucash directory under a python directory - all python and 
compiled python
modules are stored there (ie no need for distribution in gnucash).

There are 5 compiled modules currently based on pre-gobject introspection 
codegen (as used for eg pygtk),
pygkeyfile (as apparently there are no distributed GKeyFile python bindings), 
python bindings
generated by codegen for GncPluginPage (for subclassing in python to create 
report pages),
GncHtml and GncHtmlWebkit - for final report output. there is also a swighelper 
python module for
moving objects between python ctypes and swig instances (python ctypes is also 
used to access some
functionality/data). These are setup for compiling in a gnucash source 
distribution
- currently in a plugin directory under the python module.

The rest is all python - and yes this does mean I re-implemented options in 
python - although in a JIT
way so options I have not needed are not implemented. GnuCash objects are 
accessed using the
distributed python binding classes.
This needs pygtk installed in order to insert into GnuCashs Gtk based GUI - but 
the python code is
able to install additional menus for the python reports.
(By the way note that GnuCash is multithreaded because Gtk is multi-threaded - 
in the initial
implementation attempts I had issues with python GIL crashes but these 
dissappeared when I started
using proper pygobject based implementations of GnuCashs GTypes).

So far I have the basic hello world report in python (with all options 
implemented that it uses),
cash_flow and a multi-commodity price_scatter (which is what started all this - 
around gnucash 1.8 I had
a multi-commodity price scatter plot in scheme (the distributed version only 
did 1 commodity) which
failed (as I know now) when the plotting switched to Javascript based graphs - 
the python reports are
able to use the Javascript plotting features.

The HTML is generated using the python ElementTree library - all scheme ignored 
here
although there is a partial implementation of stylesheets
- the access to GncHtmlWebkit is used for the final display of the HTML string.

I have also ignored the KVP code for options - note that options in the python 
reports do not
apply to the scheme reports - there is no cross-over.

This is all done under OSX (Snow Leopard) using MacPorts as the primary 
installer of GnuCash,
python 2.7, pygtk etc. - although I have had a small look at working under 
Linux - my laptop
dual boots OSX/Linux.

The code is in a git repository which can be available if there is interest - 
although it
contains a lot of history as tried differing approaches.

David
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to