[GNC] Adding Transactions From Another Program

John Ralls jralls at ceridwen.us
Thu Apr 30 12:14:48 EDT 2020


We don't build the python bindings in the MacOS or Windows bundles because they must be linked to libpython, and it obviously has to be the same libpython to which the python executing the user's program is linked to. You can see where that's going: We'd have to include an entire python installation in the bundle.

For MacOS, Homebrew's Gnucash recipe is a fake: It just downloads our dmg. You could use it to build as many of the dependencies as it supports and then build the rest plus GnuCash. It *does* pollute your environment like MacPorts and Fink do. The simplest way around that is to create a separate user for whichever Linux-clone you want to use. That user's environment will be altered but your primary account won't be.

Another possibility, and the one we recommend for the python bindings, is to build GnuCash yourself. We have pretty well automated build systems at https://github.com/Gnucash/gnucash-on-osx and https://github.com/Gnucash/gnucash-on-windows.

The budget code is not wrapped for Python or Guile.

Regards,
John Ralls


> On Apr 30, 2020, at 7:18 AM, Stu Perlman <sgperlman at gmail.com> wrote:
> 
> David, are the Python bindings not supported in Windows?  I don't see any
> mention of Windows setup on this page:
> https://wiki.gnucash.org/wiki/Python_Bindings#Setting_things_up  I do have
> Python 3.8 on my Win 10 system.
> 
> My second question is with regard to budgets.  If I don't see anything
> regarding GC's budget module on these two pages:
> https://code.gnucash.org/docs/MAINT/gnucash__core_8py.html
> https://github.com/Gnucash/gnucash/tree/master/bindings/python/example_scripts
> 
> Does that absence of info on Python and budgets mean that bindings are not
> available for the budget module at this time?
> 
> 
> 
> On Tue, Apr 28, 2020 at 6:07 PM Stu Perlman <sgperlman at gmail.com> wrote:
> 
>> David, I did look at the Python bindings info a while back but at the time
>> did not feel like getting started with Python because I just wanted to get
>> done what I wanted to get done.  I'm mostly a .NET & SQL guy so I stuck
>> with what I knew.  Fast forward a few months and add in the bounty of extra
>> time that the quarantine has afforded and I have since started dipping my
>> toes into Python a bit.  I'm actually kind of excited now to take a fresh
>> look at the Python bindings capabilities for GC.  I agree with you 100%
>> that there may be no need for me nor for Hal to do our own things if there
>> is an existing way!
>> 
>> 
>> On Tue, Apr 28, 2020 at 5:59 PM David H <hellvee at gmail.com> wrote:
>> 
>>> Have you checked out the GnuCash Python Bindings -
>>> https://code.gnucash.org/docs/MAINT/python_bindings_page.html - no point
>>> in re-inventing the wheel :-)
>>> 
>>> Cheers David H.
>>> 
>>> What can Python Bindings be used for ?
>>> 
>>> The python bindings supply the ability to access a wide range of the core
>>> functions of GnuCash. You can read and write Transactions, Commodities,
>>> Lots, access the business stuff... You gain the ability to manipulate your
>>> financial data with a flexible scripting language.
>>> 
>>> Not everything GnuCash can is possible to access though. The bindings
>>> focus on basic accounting functions. Have a look at the examples to get an
>>> impression.
>>> 
>>> Some functions are broken because they have not been wrapped properly.
>>> They may crash the program or return unaccessible values. Please file a bug
>>> report if you find one to help support the development process.
>>> 
>>> On Wed, 29 Apr 2020 at 07:44, Stu Perlman <sgperlman at gmail.com> wrote:
>>> 
>>>> Hal,
>>>> 
>>>> I'm sort of doing a liter version of what you are describing. I do
>>>> manipulate some GC data from outside of GC.  I have GC setup with the
>>>> MySQL
>>>> backend and while I don't create any new transactions from outside of GC
>>>> I
>>>> do manipulate them. I have some SQL routines that I created to clean up
>>>> data points such as the Memo & Notes attributes that are part of each
>>>> transaction. I have not run into any problems or data corruption after a
>>>> few months of doing this.  I did put a circuit breaker into my bolt-on
>>>> app
>>>> that at startup the 1st thing it does it check the GC lock record and if
>>>> it
>>>> detects that GC may still be running it will not allow my SQL routines to
>>>> do anything.
>>>> 
>>>> INSERTING new transaction records using SQL on the surface appears like
>>>> it
>>>> should be simple enough but I would proceed with extreme caution and a
>>>> lot
>>>> of testing as you go.  I did not try creating any new transactions but I
>>>> did try to create my own little routine  (and then abandoned the effort)
>>>> to let me set monthly budget amounts. *The reasons for that attempt are
>>>> not
>>>> important to this thread but the outcome may be*.
>>>> 
>>>> I gave up after spending time creating the logic that I needed to insert
>>>> into and/or change records in the SQL table [budget_amounts].
>>>> Everything I
>>>> tested always looked perfect in the SQL backend until I went to work with
>>>> that data in GC.  It was like I did not change anything behind the scenes
>>>> once I opened up GC again.  I would go back to the SQL world and would
>>>> sometimes notice that my changes to [budget_amounts] were either being a)
>>>> ignored, b) wiped out or c) some other corruption.  Through trial and
>>>> error, I discovered that the SQL table [slots] (and it's various
>>>> pseudo-tables) also maintains budget amount data and that said data in
>>>> [slots] will persist when GC is restarted after my changes from SQL were
>>>> executed.  It was then that I decided that the amount of effort that I
>>>> would spend reverse engineering the logic that GC is using with the
>>>> [slots]
>>>> table was never going to be worth the reward nor the risk.
>>>> 
>>>> I don't know for a fact that for your particular use case that writing to
>>>> [slots] will even be required because I never dug into the transactions
>>>> that deeply.  Maybe [transactions] and [splits] are isolated from the
>>>> apparently superior related data that GC maintains in [slots].  If you
>>>> happen to know the languages that the GC engine is written in you might
>>>> be
>>>> able to get the answer with a little bit of code review instead of the
>>>> time
>>>> consumed doing a bunch of testing, observing, and evaluating.
>>>> 
>>>> Good luck!  I'd love to know how it goes for you if you end up pursuing
>>>> this idea.
>>>> 
>>>> - Stu
>>>> 
>>>> 
>>>> 
>>>> On Tue, Apr 28, 2020 at 3:15 PM Hal Vaughan <hal at hal.dance> wrote:
>>>> 
>>>>> I’ve done some research on this issue and I’m trying to determine if
>>>> it’s
>>>>> worth doing more or if I’d just spend time on this topic and find it
>>>> won’t
>>>>> work.
>>>>> 
>>>>> I have a situation I’ve been told GnuCash can’t handle, but I have a
>>>>> Python library that can handle it.  (It has to do with calculating
>>>> interest
>>>>> on a credit line with a variable balance.)
>>>>> 
>>>>> Years ago, I remember checking into GnuCash and reading the XML data
>>>> files
>>>>> and finding that each transaction seemed to have a UUID with it, but
>>>> that
>>>>> the other data in each entry would be easy to generate from my own
>>>> library
>>>>> written in Python.  I also know that now the data files can be in SQL,
>>>>> using several different engines, and that if it’s an XML file, it’s in
>>>> gzip
>>>>> format.
>>>>> 
>>>>> I do not need my program to run as a plug-in or anything like that.
>>>> (Last
>>>>> I looked, I had to install MacPorts for that, and last time I installed
>>>>> MacPorts, it made a mess of the libraries for my old Perl scripts and
>>>> some
>>>>> Python ones.)
>>>>> 
>>>>> But here’s what I’d like to do:
>>>>> 1. Enter my transactions involving the credit line normally in GnuCash.
>>>>> 2. Exit GnuCash
>>>>> 3. Run my Python script that would read the GnuCash data file and find
>>>> all
>>>>> transactions with any credit lines.
>>>>> 4. Do the interest calculations for my credit line
>>>>> 5. Add a debit transaction for the interest amount before each new
>>>>> transaction with the credit line
>>>>> 6. Edit the comment field for each transaction involving the credit
>>>> line
>>>>> to include notes on interest and totals
>>>>> 7. Save the ledger and exit my library script.
>>>>> 8. Run GnuCash again and have the new transactions included and their
>>>>> amounts included in any account totals.
>>>>> 
>>>>> Is this even possible?  I don’t mind doing the research to find out
>>>> how to
>>>>> generate a transaction ID and all the rest.  I just want to know if I
>>>> can
>>>>> use my own library to add transactions to a file (or edit comments in a
>>>>> transaction) and, when I’m done, for GnuCash to be able to read that
>>>> file,
>>>>> with my new transactions, in and to include the amounts in the added
>>>>> transactions in account totals.
>>>>> 
>>>>> 
>>>>> 
>>>>> Hal
>>>>> _______________________________________________
>>>>> gnucash-user mailing list
>>>>> gnucash-user at gnucash.org
>>>>> To update your subscription preferences or to unsubscribe:
>>>>> https://lists.gnucash.org/mailman/listinfo/gnucash-user
>>>>> If you are using Nabble or Gmane, please see
>>>>> https://wiki.gnucash.org/wiki/Mailing_Lists for more information.
>>>>> -----
>>>>> Please remember to CC this list on all your replies.
>>>>> You can do this by using Reply-To-List or Reply-All.
>>>>> 
>>>> _______________________________________________
>>>> gnucash-user mailing list
>>>> gnucash-user at gnucash.org
>>>> To update your subscription preferences or to unsubscribe:
>>>> https://lists.gnucash.org/mailman/listinfo/gnucash-user
>>>> If you are using Nabble or Gmane, please see
>>>> https://wiki.gnucash.org/wiki/Mailing_Lists for more information.
>>>> -----
>>>> Please remember to CC this list on all your replies.
>>>> You can do this by using Reply-To-List or Reply-All.
>>>> 
>>> 
> _______________________________________________
> gnucash-user mailing list
> gnucash-user at gnucash.org
> To update your subscription preferences or to unsubscribe:
> https://lists.gnucash.org/mailman/listinfo/gnucash-user
> If you are using Nabble or Gmane, please see https://wiki.gnucash.org/wiki/Mailing_Lists for more information.
> -----
> Please remember to CC this list on all your replies.
> You can do this by using Reply-To-List or Reply-All.



More information about the gnucash-user mailing list