Without committing or closing the db, settings were not being saved. Also, adds a run_in_thread decorator to simplify the code.
115 lines
3.3 KiB
Python
115 lines
3.3 KiB
Python
import binascii
|
|
import functools
|
|
import json
|
|
import logging
|
|
import os
|
|
|
|
from twisted.internet import threads, defer
|
|
import unqlite
|
|
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def run_in_thread(fn):
|
|
@functools.wraps(fn)
|
|
def wrapped(*args, **kwargs):
|
|
return threads.deferToThread(fn, *args, **kwargs)
|
|
return wrapped
|
|
|
|
|
|
class LBRYSettings(object):
|
|
NAME = "settings.db"
|
|
def __init__(self, db_dir):
|
|
self.db_dir = db_dir
|
|
self.db = None
|
|
|
|
def start(self):
|
|
return self._open_db()
|
|
|
|
def stop(self):
|
|
self.db.close()
|
|
self.db = None
|
|
return defer.succeed(True)
|
|
|
|
def _open_db(self):
|
|
filename = os.path.join(self.db_dir, self.NAME)
|
|
log.debug("Opening %s as the settings database", filename)
|
|
self.db = unqlite.UnQLite(filename)
|
|
return defer.succeed(True)
|
|
|
|
@run_in_thread
|
|
def save_lbryid(self, lbryid):
|
|
self.db['lbryid'] = binascii.hexlify(lbryid)
|
|
self.db.commit()
|
|
|
|
@run_in_thread
|
|
def get_lbryid(self):
|
|
if 'lbryid' in self.db:
|
|
return binascii.unhexlify(self.db['lbryid'])
|
|
else:
|
|
return None
|
|
|
|
@run_in_thread
|
|
def get_server_running_status(self):
|
|
if 'server_running' in self.db:
|
|
return json.loads(self.db['server_running'])
|
|
else:
|
|
return True
|
|
|
|
@run_in_thread
|
|
def save_server_running_status(self, running):
|
|
self.db['server_running'] = json.dumps(running)
|
|
self.db.commit()
|
|
|
|
def get_default_data_payment_rate(self):
|
|
return self._get_payment_rate("default_data_payment_rate")
|
|
|
|
def save_default_data_payment_rate(self, rate):
|
|
return self._save_payment_rate("default_data_payment_rate", rate)
|
|
|
|
def get_server_data_payment_rate(self):
|
|
return self._get_payment_rate("server_data_payment_rate")
|
|
|
|
def save_server_data_payment_rate(self, rate):
|
|
return self._save_payment_rate("server_data_payment_rate", rate)
|
|
|
|
def get_server_crypt_info_payment_rate(self):
|
|
return self._get_payment_rate("server_crypt_info_payment_rate")
|
|
|
|
def save_server_crypt_info_payment_rate(self, rate):
|
|
return self._save_payment_rate("server_crypt_info_payment_rate", rate)
|
|
|
|
@run_in_thread
|
|
def _get_payment_rate(self, rate_type):
|
|
if rate_type in self.db:
|
|
return json.loads(self.db[rate_type])
|
|
else:
|
|
return None
|
|
|
|
@run_in_thread
|
|
def _save_payment_rate(self, rate_type, rate):
|
|
if rate is not None:
|
|
self.db[rate_type] = json.dumps(rate)
|
|
elif rate_type in self.db:
|
|
del self.db[rate_type]
|
|
self.db.commit()
|
|
|
|
@run_in_thread
|
|
def get_query_handler_status(self, query_identifier):
|
|
if json.dumps(('q_h', query_identifier)) in self.db:
|
|
return json.loads(self.db[(json.dumps(('q_h', query_identifier)))])
|
|
else:
|
|
return True
|
|
|
|
def enable_query_handler(self, query_identifier):
|
|
return self._set_query_handler_status(query_identifier, True)
|
|
|
|
def disable_query_handler(self, query_identifier):
|
|
return self._set_query_handler_status(query_identifier, False)
|
|
|
|
@run_in_thread
|
|
def _set_query_handler_status(self, query_identifier, status):
|
|
self.db[json.dumps(('q_h', query_identifier))] = json.dumps(status)
|
|
self.db.commit()
|