Bug #639906: Improve text output methods of python bindings

Patch by Christoph Holtermann:

For the more complex financial objects i chose a different approach.

The printing functions are located in one module. Importing this module adds
these functions as methods to the classes defined in gnucash_core.py.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@20145 57a11ea4-9604-0410-9ed3-97b8803252fd
pull/1/head
Christian Stimming 16 years ago
parent b922f000ec
commit dc4ae21d0b

@ -170,6 +170,7 @@ Jon Kåre Hellan <hellan@acm.org> misc core dump fixes
Hendrik-Jan Heins <hjh@passys.nl> Dutch translation
Joachim Herb <joachim.herb@gmx.de> Data table option for barchart reports
Claus Hindsgaul <claus_h@image.dk> messages Danish translation
Christoph Holtermann <c.holtermann@gmx.de> Python wrapper improvements
Ori Hoch <ori@uumpa.com> Hebrew translation
Péter Hosszú <hosszu@web.de> Hungarian translation
Edward J. Huff <ejhuff@huff20may77.us> Date handling in reports, quarterly option

@ -0,0 +1,82 @@
#!/usr/bin/env python
# str_methods.py -- Add __str__ and __unicode__ methods to financial objects
#
## @file
# @brief Add __str__ and __unicode__ methods to financial objects so that @code print object @endcode leads to human readable results
# @author Christoph Holtermann, c.holtermann@gmx.de
# @ingroup python_bindings_examples
import gnucash
def __split__unicode__(self):
"""__unicode__ method for split class"""
from gnucash import Split
import time
self=Split(instance=self)
lot=gnucash.GncLot(instance=self.GetLot())
if lot:
lot_str=lot.get_title()
else:
lot_str='---'
transaction=self.GetParent()
return u"{0:7}{1:20}{2:7}{3:7}{4:7}{5:30}{6:12}{7:15}{8:1}{9:30}{10:5}{11:10}{12:1}".format(
'Konto:',self.GetAccount().name,
'Value:',unicode(self.GetValue()),
'Memo:',self.GetMemo(),
'Transaction:',time.ctime(transaction.GetDate()),'-',transaction.GetDescription(),
'Lot: ',lot_str,'\n')
def __split__str__(self):
"""__str__ method for split class"""
from gnucash import Split
self=Split(instance=self)
return unicode(self).encode('utf-8')
gnucash.gnucash_core_c.__split__str__=__split__str__
gnucash.Split.add_method("__split__str__","__str__")
gnucash.gnucash_core_c.__split__unicode__=__split__unicode__
gnucash.Split.add_method("__split__unicode__","__str__")
def __transaction__str__(self):
"""__str__ method for Transaction class"""
from gnucash import Transaction
import time
self=Transaction(instance=self)
transaction_str = u"{0:7}{1:25}{2:14}{3:40}{4:7}{5:40}{6:1}".format(
'Datum:',str(time.ctime(self.GetDate())),
'Description:',str(self.GetDescription()),
'Notes:',str(self.GetNotes()),'\n')
splits_str=""
splitlist = self.GetSplitList()
for n,split in enumerate(splitlist):
if not type(split)==gnucash.Split:
split=gnucash.Split(instance=split)
splits_str += u"[{0:>2}] ".format(str(n))
splits_str += unicode(split)
return transaction_str + splits_str
def __transaction__unicode__(self):
"""__unicode__ method for Transaction class"""
from gnucash import Transaction
self=Transaction(instance=self)
return unicode(self).encode('utf-8')
# These lines add transaction_str as method __str__ to Transaction object
gnucash.gnucash_core_c.__transaction__str__=__transaction__str__
gnucash.Transaction.add_method("__transaction__str__","__str__")
gnucash.gnucash_core_c.__transaction__unicode__=__transaction__unicode__
gnucash.Transaction.add_method("__transaction__unicode__","__unicode__")
Loading…
Cancel
Save