diff --git a/gertty/db.py b/gertty/db.py index 17b58cf..1a5b131 100644 --- a/gertty/db.py +++ b/gertty/db.py @@ -24,7 +24,7 @@ import six import sqlalchemy from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Boolean, DateTime, Text, UniqueConstraint from sqlalchemy.schema import ForeignKey -from sqlalchemy.orm import mapper, sessionmaker, relationship, scoped_session +from sqlalchemy.orm import mapper, sessionmaker, relationship, scoped_session, joinedload from sqlalchemy.orm.session import Session from sqlalchemy.sql import exists from sqlalchemy.sql.expression import and_ @@ -815,9 +815,12 @@ class DatabaseSession(object): except sqlalchemy.orm.exc.NoResultFound: return self.createSyncQuery(name) - def getChange(self, key): + def getChange(self, key, lazy=True): + query = self.session().query(Change).filter_by(key=key) + if not lazy: + query = query.options(joinedload(Change.revisions).joinedload(Revision.files).joinedload(File.comments)) try: - return self.session().query(Change).filter_by(key=key).one() + return query.one() except sqlalchemy.orm.exc.NoResultFound: return None diff --git a/gertty/view/change.py b/gertty/view/change.py index 5953faa..7dd41bd 100644 --- a/gertty/view/change.py +++ b/gertty/view/change.py @@ -618,7 +618,7 @@ class ChangeView(urwid.WidgetWrap): def refresh(self): with self.app.db.getSession() as session: - change = session.getChange(self.change_key) + change = session.getChange(self.change_key, lazy=False) # When we first open the change, update its last_seen # time. if not self.marked_seen: