changeset 7:b788a347af03

better update logic
author Atul Varma <varmaa@toolness.com>
date Wed, 23 Dec 2009 14:45:39 -0800
parents c9a268d0fa74
children 9ca705d18849
files bzapi.py example.py
diffstat 2 files changed, 18 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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):
--- 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()])