blob: 7275320e0154cb4bcd2b643dac7c8400c9d9dc75 [file] [log] [blame]
import sqlite3
import pickle
class RosterDB(object):
"""
Implements a roster persistence object (expected by sleekxmpp roster)
with a sqlite3 backend
"""
def __init__(self, name, table):
self.db = sqlite3.connect(name, check_same_thread=False)
self.table = table
try:
self.db.execute('create table {} (o varchar, k varchar, v blob)'.format(self.table))
except sqlite3.OperationalError as e:
pass
def entries(self, key, dblist={}):
if key is None:
r = self.db.execute('select distinct(o) from {}'.format(self.table)).fetchall()
r = map(lambda x : x[0], r)
print("DB ENTRIES AT TOP LEVEL", r)
return r
r = self.db.execute('select k from {} where o = ?'.format(self.table), (key,)).fetchall()
r = map(lambda x: x[0], r)
print("DB ENTRIES FOR KEY ", key, r)
return r
def load(self, owner, key, state):
print("TYPE OF OWNER", type(owner)," TYPE OF KEY ", type(key))
r = self.db.execute('select v from {} where o = ? and k = ?'.format(self.table), (owner, key)).fetchone()
print("DB LOAD ", owner, key, " = ", r);
if r is None:
return r
return pickle.loads(r[0])
def save(self, owner, key, item, state):
print("DB SAVE ", owner, key, " = ", item)
try:
self.db.execute('delete from {} where o = ? and k = ?'.format(self.table), (owner, key))
except sqlite3.OperationalError as e:
pass
p = pickle.dumps(item)
self.db.execute('insert into {} values (?, ?, ?)'.format(self.table),
(owner, key, p))
self.db.commit()