O'Reilly logo

Python Programming On Win32 by Mark Hammond, Andy Robinson

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

A User-Defined View: The Backend

Now we can write a new View, a simple one that keeps track of the month-end balances of an account. The array has two columns; the first entry to show year and month, and the second the month-end balance. For a two-year data file, you thus get back about 24 rows:

class MonthlyAccountActivity(View): """Keeps track of activity in an account. Does smart recalculations.""" def __init__(self, anAccount): self.account = anAccount self.balances = doubletalk.datastruct.NumDict() def getDescription(self): return 'Month end balances for ' + self.account def didAdd(self, tran): effect = tran.effectOn(self.account) if effect == 0: return else: #year and month as the key yymm = time.gmtime(tran.date)[0:2] self.balances.inc(yymm, effect) print 'added %s, %0.2f' % (yymm, effect) def didRemove(self, index): tran = self.BookSet[index] self.didAdd(-tran) #invert and add def didEdit(self, index, newTran): oldTran = self.BookSet[index] self.didAdd(-oldTran) self.didAdd(newTran) def didChangeDrastically(self): self.recalc() def recalc(self): "Do it all quickly in one pass" self.balances.clear() for tran in self.BookSet: yymm = time.gmtime(tran.date)[0:2] for (acct, amount, etc) in tran.lines: if acct == self.account: self.balances.inc(yymm, amount) def getData(self): # numdict returns it all sorted; just need to format # the date column formatted = [] for (period, balance) in self.balances.items(): (year, month) = period #unpack tuple... monthname = doubletalk.dates.SHORT_MONTHS[month-1] ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required