mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Changed from a context manager to a function
This commit is contained in:
parent
d86c664e69
commit
53417325af
@ -147,7 +147,6 @@ class FormatterFunction:
|
|||||||
def only_in_gui_error(self):
|
def only_in_gui_error(self):
|
||||||
raise ValueError(_('The function {} can be used only in the GUI').format(self.name))
|
raise ValueError(_('The function {} can be used only in the GUI').format(self.name))
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def get_database(self, mi):
|
def get_database(self, mi):
|
||||||
proxy = mi.get('_proxy_metadata', None)
|
proxy = mi.get('_proxy_metadata', None)
|
||||||
if proxy is None:
|
if proxy is None:
|
||||||
@ -164,7 +163,7 @@ class FormatterFunction:
|
|||||||
db = wr()
|
db = wr()
|
||||||
if db is None:
|
if db is None:
|
||||||
raise ValueError(_('In function {}: The database has been closed').format(self.name))
|
raise ValueError(_('In function {}: The database has been closed').format(self.name))
|
||||||
yield db
|
return db
|
||||||
|
|
||||||
|
|
||||||
class BuiltinFormatterFunction(FormatterFunction):
|
class BuiltinFormatterFunction(FormatterFunction):
|
||||||
@ -1291,9 +1290,8 @@ class BuiltinAnnotationCount(BuiltinFormatterFunction):
|
|||||||
'This function works only in the GUI.')
|
'This function works only in the GUI.')
|
||||||
|
|
||||||
def evaluate(self, formatter, kwargs, mi, locals):
|
def evaluate(self, formatter, kwargs, mi, locals):
|
||||||
with self.get_database(mi) as db:
|
c = self.get_database(mi).new_api.annotation_count_for_book(mi.id)
|
||||||
c = db.new_api.annotation_count_for_book(mi.id)
|
return '' if c == 0 else str(c)
|
||||||
return '' if c == 0 else str(c)
|
|
||||||
|
|
||||||
|
|
||||||
class BuiltinIsMarked(BuiltinFormatterFunction):
|
class BuiltinIsMarked(BuiltinFormatterFunction):
|
||||||
@ -1306,9 +1304,8 @@ class BuiltinIsMarked(BuiltinFormatterFunction):
|
|||||||
"marks. Returns '' if the book is not marked.")
|
"marks. Returns '' if the book is not marked.")
|
||||||
|
|
||||||
def evaluate(self, formatter, kwargs, mi, locals):
|
def evaluate(self, formatter, kwargs, mi, locals):
|
||||||
with self.get_database(mi) as db:
|
c = self.get_database(mi).data.get_marked(mi.id)
|
||||||
c = db.data.get_marked(mi.id)
|
return c if c else ''
|
||||||
return c if c else ''
|
|
||||||
|
|
||||||
|
|
||||||
class BuiltinSeriesSort(BuiltinFormatterFunction):
|
class BuiltinSeriesSort(BuiltinFormatterFunction):
|
||||||
@ -1870,12 +1867,12 @@ class BuiltinVirtualLibraries(BuiltinFormatterFunction):
|
|||||||
'column\'s value in your save/send templates')
|
'column\'s value in your save/send templates')
|
||||||
|
|
||||||
def evaluate(self, formatter, kwargs, mi, locals_):
|
def evaluate(self, formatter, kwargs, mi, locals_):
|
||||||
with self.get_database(mi) as db:
|
db = self.get_database(mi)
|
||||||
try:
|
try:
|
||||||
a = db.data.get_virtual_libraries_for_books((mi.id,))
|
a = db.data.get_virtual_libraries_for_books((mi.id,))
|
||||||
return ', '.join(a[mi.id])
|
return ', '.join(a[mi.id])
|
||||||
except ValueError as v:
|
except ValueError as v:
|
||||||
return str(v)
|
return str(v)
|
||||||
|
|
||||||
|
|
||||||
class BuiltinCurrentVirtualLibraryName(BuiltinFormatterFunction):
|
class BuiltinCurrentVirtualLibraryName(BuiltinFormatterFunction):
|
||||||
@ -1888,8 +1885,7 @@ class BuiltinCurrentVirtualLibraryName(BuiltinFormatterFunction):
|
|||||||
'Example: "program: current_virtual_library_name()".')
|
'Example: "program: current_virtual_library_name()".')
|
||||||
|
|
||||||
def evaluate(self, formatter, kwargs, mi, locals):
|
def evaluate(self, formatter, kwargs, mi, locals):
|
||||||
with self.get_database(mi) as db:
|
return self.get_database(mi).data.get_base_restriction_name()
|
||||||
return db.data.get_base_restriction_name()
|
|
||||||
|
|
||||||
|
|
||||||
class BuiltinUserCategories(BuiltinFormatterFunction):
|
class BuiltinUserCategories(BuiltinFormatterFunction):
|
||||||
@ -2065,9 +2061,8 @@ class BuiltinCheckYesNo(BuiltinFormatterFunction):
|
|||||||
|
|
||||||
def evaluate(self, formatter, kwargs, mi, locals, field, is_undefined, is_false, is_true):
|
def evaluate(self, formatter, kwargs, mi, locals, field, is_undefined, is_false, is_true):
|
||||||
# 'field' is a lookup name, not a value
|
# 'field' is a lookup name, not a value
|
||||||
with self.get_database(mi) as db:
|
if field not in self.get_database(mi).field_metadata:
|
||||||
if field not in db.field_metadata:
|
raise ValueError(_("The column {} doesn't exist").format(field))
|
||||||
raise ValueError(_("The column {} doesn't exist").format(field))
|
|
||||||
res = getattr(mi, field, None)
|
res = getattr(mi, field, None)
|
||||||
if res is None:
|
if res is None:
|
||||||
if is_undefined == '1':
|
if is_undefined == '1':
|
||||||
@ -2263,13 +2258,12 @@ class BuiltinBookCount(BuiltinFormatterFunction):
|
|||||||
if (not tweaks.get('allow_template_database_functions_in_composites', False) and
|
if (not tweaks.get('allow_template_database_functions_in_composites', False) and
|
||||||
formatter.global_vars.get(rendering_composite_name, None)):
|
formatter.global_vars.get(rendering_composite_name, None)):
|
||||||
raise ValueError(_('The book_count() function cannot be used in a composite column'))
|
raise ValueError(_('The book_count() function cannot be used in a composite column'))
|
||||||
with self.get_database(mi) as db:
|
db = self.get_database(mi)
|
||||||
try:
|
try:
|
||||||
ids = db.search_getting_ids(query, None, use_virtual_library=use_vl != '0')
|
ids = db.search_getting_ids(query, None, use_virtual_library=use_vl != '0')
|
||||||
return len(ids)
|
return len(ids)
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
self.only_in_gui_error()
|
|
||||||
|
|
||||||
|
|
||||||
class BuiltinBookValues(BuiltinFormatterFunction):
|
class BuiltinBookValues(BuiltinFormatterFunction):
|
||||||
@ -2287,21 +2281,21 @@ class BuiltinBookValues(BuiltinFormatterFunction):
|
|||||||
if (not tweaks.get('allow_template_database_functions_in_composites', False) and
|
if (not tweaks.get('allow_template_database_functions_in_composites', False) and
|
||||||
formatter.global_vars.get(rendering_composite_name, None)):
|
formatter.global_vars.get(rendering_composite_name, None)):
|
||||||
raise ValueError(_('The book_values() function cannot be used in a composite column'))
|
raise ValueError(_('The book_values() function cannot be used in a composite column'))
|
||||||
with self.get_database(mi) as db:
|
db = self.get_database(mi)
|
||||||
if column not in db.field_metadata:
|
if column not in db.field_metadata:
|
||||||
raise ValueError(_("The column {} doesn't exist").format(column))
|
raise ValueError(_("The column {} doesn't exist").format(column))
|
||||||
try:
|
try:
|
||||||
ids = db.search_getting_ids(query, None, use_virtual_library=use_vl != '0')
|
ids = db.search_getting_ids(query, None, use_virtual_library=use_vl != '0')
|
||||||
s = set()
|
s = set()
|
||||||
for id_ in ids:
|
for id_ in ids:
|
||||||
f = db.new_api.get_proxy_metadata(id_).get(column, None)
|
f = db.new_api.get_proxy_metadata(id_).get(column, None)
|
||||||
if isinstance(f, (tuple, list)):
|
if isinstance(f, (tuple, list)):
|
||||||
s.update(f)
|
s.update(f)
|
||||||
elif f:
|
elif f:
|
||||||
s.add(str(f))
|
s.add(str(f))
|
||||||
return sep.join(s)
|
return sep.join(s)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ValueError(e)
|
raise ValueError(e)
|
||||||
|
|
||||||
|
|
||||||
_formatter_builtins = [
|
_formatter_builtins = [
|
||||||
|
Loading…
x
Reference in New Issue
Block a user