]> asedeno.scripts.mit.edu Git - bluechips.git/commitdiff
little performance tweaks
authorScott Torborg <scott@crookedmedia.com>
Tue, 3 Nov 2009 05:06:36 +0000 (19:06 -1000)
committerScott Torborg <scott@crookedmedia.com>
Tue, 3 Nov 2009 05:06:36 +0000 (19:06 -1000)
bluechips/controllers/history.py
bluechips/controllers/status.py
bluechips/model/expenditure.py

index e0a501b8f38edd5139afe90321979ff3a2d99dcc..833e34d4529ec9db63064a463dfaa41643906c75 100644 (file)
@@ -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')
index d19dd4ad6139853300356c57afc891b63b05ed32..2532dfac2da2d7189dc5bc15acdd1b22100d2c3a 100644 (file)
@@ -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_(
index 296ecf04929aa2c3c66790d3f5a86a76cdcd88b9..9d0fc7e0f981ad2719f2435789199a934b5c5bca 100644 (file)
@@ -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']