# HG changeset patch # User Atul Varma # Date 1261683906 28800 # Node ID f717ecd3ede131f14e39a7fe67a09925ba13ad66 # Parent 057f6f0eac227b16020c4788906e661d3f339e7f 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. diff -r 057f6f0eac22 -r f717ecd3ede1 bzapi.py --- 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):