From 3b29386bdc08ac1568938dba8d96715fa82d5abd Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Wed, 9 Mar 2016 09:04:04 -0800 Subject: [PATCH] Handle more than one change result when searching ...by change ID. Change-Id: Ie8fb11bf0a52b13870db5d4f9c407f775b93e939 --- gertty/app.py | 25 +++++++++++++------------ gertty/db.py | 4 ++-- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/gertty/app.py b/gertty/app.py index edf6b48..19b9f4d 100644 --- a/gertty/app.py +++ b/gertty/app.py @@ -463,12 +463,12 @@ class App(object): return with self.db.getSession() as session: if number: - change = session.getChangeByNumber(number) + changes = [session.getChangeByNumber(number)] elif changeid: - change = session.getChangeByChangeID(changeid) - change_key = change and change.key or None - restid = change and change.id or None - if change_key is None: + changes = session.getChangesByChangeID(changeid) + change_keys = [c.key for c in changes if c] + restids = [c.id for c in changes if c] + if not change_keys: if self.sync.offline: raise Exception('Can not sync change while offline.') dialog = mywid.SystemMessage("Syncing change...") @@ -489,14 +489,15 @@ class App(object): self.backScreen() with self.db.getSession() as session: if number: - change = session.getChangeByNumber(number) + changes = [session.getChangeByNumber(number)] elif changeid: - change = session.getChangeByChangeID(changeid) - change_key = change and change.key or None - elif restid: - task = sync.SyncChangeTask(restid, sync.HIGH_PRIORITY) - self.sync.submitTask(task) - if change_key is None: + changes = session.getChangesByChangeID(changeid) + change_keys = [c.key for c in changes if c] + elif restids: + for restid in restids: + task = sync.SyncChangeTask(restid, sync.HIGH_PRIORITY) + self.sync.submitTask(task) + if not change_keys: raise Exception('Change is not in local database.') def doSearch(self, query): diff --git a/gertty/db.py b/gertty/db.py index 4a92e31..3cfbd85 100644 --- a/gertty/db.py +++ b/gertty/db.py @@ -794,9 +794,9 @@ class DatabaseSession(object): return set([]) return set([r[0] for r in self.session().query(Change.id).filter(Change.id.in_(ids)).all()]) - def getChangeByChangeID(self, change_id): + def getChangesByChangeID(self, change_id): try: - return self.session().query(Change).filter_by(change_id=change_id).one() + return self.session().query(Change).filter_by(change_id=change_id) except sqlalchemy.orm.exc.NoResultFound: return None