mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Tentative implementation of using global render cache when evaluating composite columns in composite_getter()
This commit is contained in:
parent
d9ac4fcfcf
commit
066b749ebb
@ -253,6 +253,17 @@ class CompositeField(OneToOneField):
|
|||||||
def bool_sort_key(self, val):
|
def bool_sort_key(self, val):
|
||||||
return self._bool_sort_key(force_to_bool(val))
|
return self._bool_sort_key(force_to_bool(val))
|
||||||
|
|
||||||
|
def render_composite_with_cache(self, book_id, mi, formatter, template_cache):
|
||||||
|
with self._lock:
|
||||||
|
ans = self._render_cache.get(book_id, None)
|
||||||
|
if ans is None:
|
||||||
|
ans = formatter.safe_format(
|
||||||
|
self.metadata['display']['composite_template'], mi, _('TEMPLATE ERROR'),
|
||||||
|
mi, column_name=self._composite_name, template_cache=template_cache).strip()
|
||||||
|
with self._lock:
|
||||||
|
self._render_cache[book_id] = ans
|
||||||
|
return ans
|
||||||
|
|
||||||
def render_composite(self, book_id, mi):
|
def render_composite(self, book_id, mi):
|
||||||
with self._lock:
|
with self._lock:
|
||||||
ans = self._render_cache.get(book_id, None)
|
ans = self._render_cache.get(book_id, None)
|
||||||
|
@ -219,17 +219,24 @@ def custom_getter(field, dbref, book_id, cache):
|
|||||||
cache[field] = ret = fmt_custom(db.field_for(field, book_id))
|
cache[field] = ret = fmt_custom(db.field_for(field, book_id))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def composite_getter(mi, field, metadata, book_id, cache, formatter, template_cache):
|
def composite_getter(mi, field, db, book_id, cache, formatter, template_cache):
|
||||||
try:
|
try:
|
||||||
return cache[field]
|
return cache[field]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
cache[field] = 'RECURSIVE_COMPOSITE FIELD (Metadata) ' + field
|
cache[field] = 'RECURSIVE_COMPOSITE FIELD (Metadata) ' + field
|
||||||
ret = cache[field] = formatter.safe_format(
|
try:
|
||||||
metadata['display']['composite_template'],
|
db = db()
|
||||||
mi,
|
with db.safe_read_lock:
|
||||||
_('TEMPLATE ERROR'),
|
try:
|
||||||
mi, column_name=field,
|
fo = db.fields[field]
|
||||||
template_cache=template_cache).strip()
|
except KeyError:
|
||||||
|
ret = cache[field] = _('Invalid field: %s') % field
|
||||||
|
else:
|
||||||
|
ret = cache[field] = fo.render_composite_with_cache(book_id, mi, formatter, template_cache)
|
||||||
|
except Exception:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
return ''
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def virtual_libraries_getter(dbref, book_id, cache):
|
def virtual_libraries_getter(dbref, book_id, cache):
|
||||||
@ -316,7 +323,7 @@ class ProxyMetadata(Metadata):
|
|||||||
if field.endswith('_index') and dt == 'float':
|
if field.endswith('_index') and dt == 'float':
|
||||||
return series_index_getter(field[:-6])(ga(self, '_db'), ga(self, '_book_id'), ga(self, '_cache'))
|
return series_index_getter(field[:-6])(ga(self, '_db'), ga(self, '_book_id'), ga(self, '_cache'))
|
||||||
return custom_getter(field, ga(self, '_db'), ga(self, '_book_id'), ga(self, '_cache'))
|
return custom_getter(field, ga(self, '_db'), ga(self, '_book_id'), ga(self, '_cache'))
|
||||||
return composite_getter(self, field, d, ga(self, '_book_id'), ga(self, '_cache'), ga(self, 'formatter'), ga(self, 'template_cache'))
|
return composite_getter(self, field, ga(self, '_db'), ga(self, '_book_id'), ga(self, '_cache'), ga(self, 'formatter'), ga(self, 'template_cache'))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return ga(self, '_cache')[field]
|
return ga(self, '_cache')[field]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user