# HG changeset patch # User Atul Varma # Date 1261608339 28800 # Node ID b788a347af032e5feac188b6103abb430b22ee8b # Parent c9a268d0fa74ce7f321853a8b2c36e3df73c459e better update logic diff -r c9a268d0fa74 -r b788a347af03 bzapi.py --- a/bzapi.py Wed Dec 23 14:06:26 2009 -0800 +++ b/bzapi.py Wed Dec 23 14:45:39 2009 -0800 @@ -6,6 +6,11 @@ import pymongo import simplejson as json +def normalize_bug(bug): + for name in ['last_change_time', 'creation_time']: + bug[name] = datetime_from_iso(bug[name]) + bug['_id'] = bug['id'] + def datetime_from_rfc1123(timestamp): return datetime.strptime(timestamp, '%a, %d %b %Y %H:%M:%S GMT') @@ -52,10 +57,8 @@ 'history': '1'} bugs = self.api.get('/bug', **params)['data']['bugs'] for bug in bugs: - logging.debug('processing bug %s' % bug['id']) - for name in ['last_change_time', 'creation_time']: - bug[name] = datetime_from_iso(bug[name]) - bug['_id'] = bug['id'] + logging.debug('updating bug %s' % bug['id']) + normalize_bug(bug) self.bugs.save(bug) def update(self): @@ -64,8 +67,16 @@ if self.last_update: params['changed_after'] = self.last_update bugs = self.api.get('/bug', **params)['data']['bugs'] - self._get_full_bugs([bug['id'] for bug in bugs]) - self._update_last_update() + 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']) + if valid_bugs: + self._get_full_bugs(valid_bugs) + self._update_last_update() class BugzillaApi(object): def __init__(self, base_url, collection, username=None, password=None): diff -r c9a268d0fa74 -r b788a347af03 example.py --- a/example.py Wed Dec 23 14:06:26 2009 -0800 +++ b/example.py Wed Dec 23 14:45:39 2009 -0800 @@ -26,7 +26,7 @@ ) search.update() -#print search.bugs.find_one({'id': '530169'})['history'] +#print search.bugs.find_one({'id': '530169'}) #print len([bug for bug in search.bugs.itervalues()])