mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-31 14:33:54 -04:00
Make the legacy db.prefs object thread safe
This commit is contained in:
parent
f4e1d5cc01
commit
4e766ab401
@ -5,7 +5,7 @@
|
|||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
|
__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||||
|
|
||||||
import os, traceback
|
import os, traceback, weakref
|
||||||
from polyglot.builtins import iteritems, zip
|
from polyglot.builtins import iteritems, zip
|
||||||
|
|
||||||
from calibre import force_unicode, isbytestring
|
from calibre import force_unicode, isbytestring
|
||||||
@ -52,6 +52,93 @@ def set_global_state(db):
|
|||||||
set_saved_searches(db, 'saved_searches')
|
set_saved_searches(db, 'saved_searches')
|
||||||
|
|
||||||
|
|
||||||
|
class ThreadSafePrefs:
|
||||||
|
|
||||||
|
def __init__(self, db):
|
||||||
|
self.db = weakref.ref(db)
|
||||||
|
|
||||||
|
def has_setting(self, key):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.has_setting(key)
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.__getitem__(key)
|
||||||
|
|
||||||
|
def __delitem__(self, key):
|
||||||
|
db = self.db()
|
||||||
|
with db.write_lock:
|
||||||
|
prefs = db.backend.prefs
|
||||||
|
prefs.__delitem__(key)
|
||||||
|
|
||||||
|
def __setitem__(self, key, val):
|
||||||
|
db = self.db()
|
||||||
|
with db.write_lock:
|
||||||
|
prefs = db.backend.prefs
|
||||||
|
prefs.__setitem__(key, val)
|
||||||
|
|
||||||
|
def __contains__(self, key):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.__contains__(key)
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.__iter__()
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.__len__()
|
||||||
|
|
||||||
|
def __bool__(self):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.__bool__()
|
||||||
|
|
||||||
|
def copy(self):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.copy()
|
||||||
|
|
||||||
|
def items(self):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.items()
|
||||||
|
iteritems = items
|
||||||
|
|
||||||
|
def keys(self):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.keys()
|
||||||
|
iterkeys = keys
|
||||||
|
|
||||||
|
def values(self):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.values()
|
||||||
|
itervalues = values
|
||||||
|
|
||||||
|
@property
|
||||||
|
def defaults(self):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.defaults
|
||||||
|
|
||||||
|
@property
|
||||||
|
def disable_setting(self):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.disable_setting
|
||||||
|
|
||||||
|
@disable_setting.setter
|
||||||
|
def disable_setting(self, val):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
prefs.disable_setting = val
|
||||||
|
|
||||||
|
def set(self, key, val):
|
||||||
|
self.__setitem__(key, val)
|
||||||
|
|
||||||
|
def get_namespaced(self, namespace, key, default=None):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.get_namespaced(namespace, key, default)
|
||||||
|
|
||||||
|
def set_namespaced(self, namespace, key, val):
|
||||||
|
prefs = self.db().backend.prefs
|
||||||
|
return prefs.set_namespaced(namespace, key, val)
|
||||||
|
|
||||||
|
|
||||||
class LibraryDatabase(object):
|
class LibraryDatabase(object):
|
||||||
|
|
||||||
''' Emulate the old LibraryDatabase2 interface '''
|
''' Emulate the old LibraryDatabase2 interface '''
|
||||||
@ -112,7 +199,7 @@ class LibraryDatabase(object):
|
|||||||
# Library wide properties {{{
|
# Library wide properties {{{
|
||||||
@property
|
@property
|
||||||
def prefs(self):
|
def prefs(self):
|
||||||
return self.new_api.backend.prefs
|
return ThreadSafePrefs(self.new_api)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def field_metadata(self):
|
def field_metadata(self):
|
||||||
|
@ -189,7 +189,7 @@ class LegacyTest(BaseTest):
|
|||||||
db = self.init_old()
|
db = self.init_old()
|
||||||
newstag = ndb.new_api.get_item_id('tags', 'news')
|
newstag = ndb.new_api.get_item_id('tags', 'news')
|
||||||
|
|
||||||
self.assertEqual(dict(db.prefs), dict(ndb.prefs))
|
self.assertEqual(dict(db.prefs), ndb.prefs.copy())
|
||||||
|
|
||||||
for meth, args in iteritems({
|
for meth, args in iteritems({
|
||||||
'find_identical_books': [(Metadata('title one', ['author one']),), (Metadata('unknown'),), (Metadata('xxxx'),)],
|
'find_identical_books': [(Metadata('title one', ['author one']),), (Metadata('unknown'),), (Metadata('xxxx'),)],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user