test db con sqlitedict

This commit is contained in:
mac12m99
2021-02-02 22:41:10 +01:00
parent e62f9fd51d
commit c07558e545
5 changed files with 640 additions and 122 deletions
+10 -44
View File
@@ -13,51 +13,17 @@ except:
# Connect to database
from . import filetools
from platformcode import config
import sqlite3, threading
db_name = filetools.join(config.get_data_path(), "kod_db.sqlite")
db_semaphore = threading.Semaphore()
from collections import defaultdict
from lib.sqlitedict import SqliteDict
class safeConn(sqlite3.Connection):
"""thread-safe sqlite3.Connection"""
def commit(self):
db_semaphore.acquire()
try:
super(safeConn, self).commit()
finally:
db_semaphore.release()
class nested_dict_sqlite(defaultdict):
'like defaultdict but default_factory receives the key'
def __missing__(self, key):
self[key] = value = self.default_factory(key)
return value
class safeCur(sqlite3.Cursor):
"""thread-safe sqlite3.Cursor"""
def execute(self, *args, **kwargs):
db_semaphore.acquire()
try:
super(safeCur, self).execute(*args, **kwargs)
finally:
db_semaphore.release()
def executescript(self, *args, **kwargs):
db_semaphore.acquire()
try:
super(safeCur, self).executescript(*args, **kwargs)
finally:
db_semaphore.release()
def executemany(self, *args, **kwargs):
db_semaphore.acquire()
try:
super(safeCur, self).executemany(*args, **kwargs)
finally:
db_semaphore.release()
db_conn = sqlite3.connect(db_name, factory=safeConn, timeout=15, check_same_thread=False)
db = db_conn.cursor(safeCur)
# Create tables if not already exists
db.execute('CREATE TABLE IF NOT EXISTS tmdb_cache (url TEXT PRIMARY KEY, response TEXT, added TEXT);')
db.execute('CREATE TABLE IF NOT EXISTS viewed (tmdb_id TEXT PRIMARY KEY, season INT, episode INT, played_time REAL);')
db.execute('CREATE TABLE IF NOT EXISTS dnscache(domain TEXT NOT NULL UNIQUE, ip TEXT NOT NULL, PRIMARY KEY(domain));')
db_conn.commit()
db_name = filetools.join(config.get_data_path(), "db.sqlite")
db = nested_dict_sqlite(lambda table: SqliteDict(db_name, table, 'c', True))