Stop invalidating the entire session before generating the page...
[zzz-spline-frontpage.git] / splinext / frontpage / controllers / frontpage.py
index a77edb2..900c87b 100644 (file)
@@ -2,7 +2,7 @@ import datetime
 import logging
 
 from pylons import config, request, response, session, tmpl_context as c, url
-from pylons.controllers.util import abort, redirect_to
+from pylons.controllers.util import abort, redirect
 from routes import request_config
 from sqlalchemy.orm.exc import NoResultFound
 
@@ -79,9 +79,9 @@ class FrontPageController(BaseController):
                 times.append( int(source['frontpage-last-seen-time']) )
             except (KeyError, ValueError):
                 pass
-        last_seen_time = datetime.datetime.fromtimestamp(max(times))
 
-        if last_seen_time:
+        if times:
+            last_seen_time = datetime.datetime.fromtimestamp(max(times))
             for update in updates:
                 if update.time > last_seen_time:
                     c.last_seen_item = update
@@ -93,11 +93,16 @@ class FrontPageController(BaseController):
         if c.user:
             c.user.stash['frontpage-last-seen-time'] = now
             meta.Session.add(c.user)
-            meta.Session.commit()
         else:
             response.set_cookie('frontpage-last-seen-time', now)
 
         # Done!  Feed to template
         c.updates = updates
 
-        return render('/index.mako')
+        ret = render('/index.mako')
+
+        # Commit AFTER rendering the template!  Committing invalidates
+        # everything in the session, undoing any eagerloading that may have
+        # been done by sources
+        meta.Session.commit()
+        return ret