fix bug in queue preventing actions with null values from being purged

This commit is contained in:
Alan Hamlett 2014-05-26 14:53:54 -07:00
parent a1cfa5eee0
commit 60095b4668
1 changed files with 42 additions and 21 deletions

View File

@ -14,6 +14,7 @@
import logging
import os
import sqlite3
import traceback
from time import sleep
@ -24,7 +25,6 @@ class Queue(object):
DB_FILE = os.path.join(os.path.expanduser('~'), '.wakatime.db')
def connect(self):
exists = os.path.exists(self.DB_FILE)
conn = sqlite3.connect(self.DB_FILE)
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS action (
@ -41,27 +41,34 @@ class Queue(object):
def push(self, data, plugin):
conn, c = self.connect()
action = {
'file': data.get('file'),
'time': data.get('time'),
'project': data.get('project'),
'language': data.get('language'),
'lines': data.get('lines'),
'branch': data.get('branch'),
'is_write': 1 if data.get('is_write') else 0,
'plugin': plugin,
}
c.execute('INSERT INTO action VALUES (:file,:time,:project,:language,:lines,:branch,:is_write,:plugin)', action)
conn.commit()
conn.close()
try:
conn, c = self.connect()
action = {
'file': data.get('file'),
'time': data.get('time'),
'project': data.get('project'),
'language': data.get('language'),
'lines': data.get('lines'),
'branch': data.get('branch'),
'is_write': 1 if data.get('is_write') else 0,
'plugin': plugin,
}
c.execute('INSERT INTO action VALUES (:file,:time,:project,:language,:lines,:branch,:is_write,:plugin)', action)
conn.commit()
conn.close()
except sqlite3.Error, e:
log.error(str(e))
def pop(self):
tries = 3
wait = 0.1
action = None
conn, c = self.connect()
try:
conn, c = self.connect()
except sqlite3.Error, e:
log.debug(traceback.format_exc())
return None
loop = True
while loop and tries > -1:
try:
@ -69,9 +76,20 @@ class Queue(object):
c.execute('SELECT * FROM action LIMIT 1')
row = c.fetchone()
if row is not None:
c.execute('''DELETE FROM action WHERE
file=? AND time=? AND project=? AND language=? AND
lines=? AND branch=? AND is_write=?''', row[0:7])
values = []
clauses = []
index = 0
for row_name in ['file', 'time', 'project', 'language', 'lines', 'branch', 'is_write']:
if row[index] is not None:
clauses.append('{0}=?'.format(row_name))
values.append(row[index])
else:
clauses.append('{0} IS NULL'.format(row_name))
index += 1
if len(values) > 0:
c.execute('DELETE FROM action WHERE {0}'.format(u' AND '.join(clauses)), values)
else:
c.execute('DELETE FROM action WHERE {0}'.format(u' AND '.join(clauses)))
conn.commit()
if row is not None:
action = {
@ -86,8 +104,11 @@ class Queue(object):
}
loop = False
except sqlite3.Error, e:
log.debug(str(e))
log.debug(traceback.format_exc())
sleep(wait)
tries -= 1
conn.close()
try:
conn.close()
except sqlite3.Error, e:
log.debug(traceback.format_exc())
return action