kod_db unica connessione per tutto l'addon

This commit is contained in:
mac12m99
2021-01-30 18:25:57 +01:00
parent 154dfa469f
commit 9ee4c95453
5 changed files with 94 additions and 88 deletions
+52
View File
@@ -10,3 +10,55 @@ try:
import core
except:
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
# 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()
class safeConn(sqlite3.Connection):
"""thread-safe sqlite3.Connection"""
def commit(self):
db_semaphore.acquire()
try:
super(safeConn, self).commit()
finally:
db_semaphore.release()
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()
+9 -20
View File
@@ -12,16 +12,11 @@ else:
from lib.requests_toolbelt.adapters import host_header_ssl
from lib import doh
from platformcode import logger, config
from platformcode import logger
import requests
from core import scrapertools
from core import db, db_conn
try:
import _sqlite3 as sql
except:
import sqlite3 as sql
db = os.path.join(config.get_data_path(), 'kod_db.sqlite')
if 'PROTOCOL_TLS' in ssl.__dict__:
protocol = ssl.PROTOCOL_TLS
elif 'PROTOCOL_SSLv23' in ssl.__dict__:
@@ -48,8 +43,6 @@ class CustomContext(ssl.SSLContext):
class CipherSuiteAdapter(host_header_ssl.HostHeaderSSLAdapter):
def __init__(self, domain, CF=False, *args, **kwargs):
self.conn = sql.connect(db)
self.cur = self.conn.cursor()
self.ssl_context = CustomContext(protocol, domain)
self.CF = CF # if cloudscrape is in action
self.cipherSuite = kwargs.pop('cipherSuite', DEFAULT_CIPHERS)
@@ -57,15 +50,15 @@ class CipherSuiteAdapter(host_header_ssl.HostHeaderSSLAdapter):
super(CipherSuiteAdapter, self).__init__(**kwargs)
def flushDns(self, request, domain, **kwargs):
self.cur.execute('delete from dnscache where domain=?', (domain,))
self.conn.commit()
db.execute('delete from dnscache where domain=?', (domain,))
db_conn.commit()
return self.send(request, flushedDns=True, **kwargs)
def getIp(self, domain):
ip = None
try:
self.cur.execute('select ip from dnscache where domain=?', (domain,))
ip = self.cur.fetchall()[0][0]
db.execute('select ip from dnscache where domain=?', (domain,))
ip = db.fetchall()[0][0]
logger.info('Cache DNS: ' + domain + ' = ' + str(ip))
except:
pass
@@ -82,14 +75,10 @@ class CipherSuiteAdapter(host_header_ssl.HostHeaderSSLAdapter):
def writeToCache(self, domain, ip):
try:
self.cur.execute('insert into dnscache values(?,?)', (domain, ip))
db.execute('insert into dnscache values(?,?)', (domain, ip))
db_conn.commit()
except:
self.cur.execute("""CREATE TABLE IF NOT EXISTS dnscache(
"domain" TEXT NOT NULL UNIQUE,
"ip" TEXT NOT NULL,
PRIMARY KEY("domain")
);""")
self.conn.commit()
pass
def init_poolmanager(self, *args, **kwargs):
kwargs['ssl_context'] = self.ssl_context
+5 -29
View File
@@ -62,27 +62,7 @@ def_lang = info_language[config.get_setting("info_language", "videolibrary")]
# ------------------------------------------------- -------------------------------------------------- -----------
otmdb_global = None
fname = filetools.join(config.get_data_path(), "kod_db.sqlite")
def create_bd():
conn = sqlite3.connect(fname)
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS tmdb_cache (url TEXT PRIMARY KEY, response TEXT, added TEXT)')
conn.commit()
conn.close()
def drop_bd():
conn = sqlite3.connect(fname)
c = conn.cursor()
c.execute('DROP TABLE IF EXISTS tmdb_cache')
conn.commit()
conn.close()
return True
create_bd()
from core import db, db_conn
# The function name is the name of the decorator and receives the function that decorates.
@@ -148,13 +128,11 @@ def cache_response(fn):
result = fn(*args)
else:
conn = sqlite3.connect(fname, timeout=15)
c = conn.cursor()
url = re.sub('&year=-', '', args[0])
if PY3: url = str.encode(url)
url_base64 = base64.b64encode(url)
c.execute("SELECT response, added FROM tmdb_cache WHERE url=?", (url_base64,))
row = c.fetchone()
db.execute("SELECT response, added FROM tmdb_cache WHERE url=?", (url_base64,))
row = db.fetchone()
if row and check_expired(float(row[1])):
result = eval(base64.b64decode(row[0]))
@@ -165,12 +143,10 @@ def cache_response(fn):
result = str(result)
if PY3: result = str.encode(result)
result_base64 = base64.b64encode(result)
c.execute("INSERT OR REPLACE INTO tmdb_cache (url, response, added) VALUES (?, ?, ?)",
db.execute("INSERT OR REPLACE INTO tmdb_cache (url, response, added) VALUES (?, ?, ?)",
(url_base64, result_base64, time.time()))
conn.commit()
conn.close()
db_conn.commit()
# elapsed_time = time.time() - start_time
# logger.debug("TARDADO %s" % elapsed_time)