fix bug in queue preventing actions with null values from being purged
This commit is contained in:
parent
a1cfa5eee0
commit
60095b4668
1 changed files with 42 additions and 21 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue