From 9458527642fab328a945d06daed04404c1ae2091 Mon Sep 17 00:00:00 2001 From: Scott Torborg Date: Mon, 2 Nov 2009 19:06:36 -1000 Subject: [PATCH] little performance tweaks --- bluechips/controllers/history.py | 6 ++++-- bluechips/controllers/status.py | 2 ++ bluechips/model/expenditure.py | 16 +++++----------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/bluechips/controllers/history.py b/bluechips/controllers/history.py index e0a501b..833e34d 100644 --- a/bluechips/controllers/history.py +++ b/bluechips/controllers/history.py @@ -8,6 +8,7 @@ from bluechips.lib.base import * from bluechips.lib.totals import * import sqlalchemy +from sqlalchemy import orm log = logging.getLogger(__name__) @@ -15,7 +16,8 @@ class HistoryController(BaseController): def index(self): c.title = 'History' - c.expenditures = meta.Session.query(model.Expenditure).all() + c.expenditures = meta.Session.query(model.Expenditure).\ + options(orm.eagerload('splits')).all() c.transfers = meta.Session.query(model.Transfer).all() - + return render('/history/index.mako') diff --git a/bluechips/controllers/status.py b/bluechips/controllers/status.py index d19dd4a..2532dfa 100644 --- a/bluechips/controllers/status.py +++ b/bluechips/controllers/status.py @@ -8,6 +8,7 @@ from bluechips.lib.base import * from bluechips.lib.totals import * import sqlalchemy +from sqlalchemy import orm from datetime import date, timedelta @@ -45,6 +46,7 @@ class StatusController(BaseController): sqlalchemy.and_( model.Split.user == request.environ['user'], model.Split.share != 0)))).\ + options(orm.eagerload('splits')).\ limit(10).all() c.transfers = meta.Session.query(model.Transfer).\ filter(sqlalchemy.or_( diff --git a/bluechips/model/expenditure.py b/bluechips/model/expenditure.py index 296ecf0..9d0fc7e 100644 --- a/bluechips/model/expenditure.py +++ b/bluechips/model/expenditure.py @@ -88,19 +88,13 @@ class Expenditure(object): def involves(self, user): "Returns True if ``user`` is involved in this expenditure." - return (meta.Session.query(Split.id).\ - filter(Split.expenditure == self).\ - filter(Split.user == user).\ - filter(Split.share != 0).first() is not None) + return any((split.user == user) and (split.share != 0) + for split in self.splits) def share(self, user): "Return the share corresponding to ``user``." - share = meta.Session.query(Split.share).\ - filter(Split.expenditure == self).\ - filter(Split.user == user).scalar() - if share is None: - return Currency(0) - else: - return share + shares = dict((split.user, split.share) + for split in self.splits) + return shares.get(user, Currency(0)) __all__ = ['Expenditure'] -- 2.45.2