Mercurial > bzapi
changeset 27:f717ecd3ede1
refactored so that we keep track of what bugs need a full update in the DB rather than temporarily in memory; this way bugs we haven't retrieved are partially saved and queued for later retrieval if something goes wrong.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Thu, 24 Dec 2009 11:45:06 -0800 |
parents | 057f6f0eac22 |
children | ce19838a318d |
files | bzapi.py |
diffstat | 1 files changed, 12 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/bzapi.py Thu Dec 24 06:45:30 2009 -0800 +++ b/bzapi.py Thu Dec 24 11:45:06 2009 -0800 @@ -68,8 +68,8 @@ else: self.last_update = bugs[0]['retrieved_time'] - def _get_full_bugs(self, bugs): - params = {'id': ','.join(bugs), + def _retrieve_full_bugs(self, bug_ids): + params = {'id': ','.join(bug_ids), 'id_mode': 'include', 'comments': '1', 'history': '1'} @@ -79,6 +79,7 @@ logging.debug('updating bug %s' % bug['id']) normalize_bug(bug) bug['retrieved_time'] = response['date'] + bug['needs_full_update'] = False self.bugs.save(bug) for observer in self.observers: observer.notify({'bug': bug['id']}) @@ -90,18 +91,20 @@ params['changed_after'] = self.last_update response = self.api.get('/bug', **params) bugs = response['data']['bugs'] - valid_bugs = [] for bug in bugs: normalize_bug(bug) old_bug = self.bugs.find_one({'id': bug['id']}) if ((old_bug is None) or (bug['last_change_time'] > old_bug['last_change_time'])): - valid_bugs.append(bug['id']) - else: - old_bug['retrieved_time'] = response['date'] - self.bugs.save(old_bug) - if valid_bugs: - self._get_full_bugs(valid_bugs) + if not old_bug: + old_bug = bug + old_bug['needs_full_update'] = True + old_bug['retrieved_time'] = response['date'] + self.bugs.save(old_bug) + bugs_to_update = self.bugs.find({'needs_full_update': True}) + bug_ids = [bug['id'] for bug in bugs_to_update] + if bug_ids: + self._retrieve_full_bugs(bug_ids) self._update_last_update() class BugzillaApi(object):