mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
First stage: adding a ProxyMetadata object to get_metadata
This commit is contained in:
parent
ce5821eec8
commit
6a488a3320
@ -184,6 +184,9 @@ class Cache(object):
|
|||||||
|
|
||||||
def _get_metadata(self, book_id, get_user_categories=True): # {{{
|
def _get_metadata(self, book_id, get_user_categories=True): # {{{
|
||||||
mi = Metadata(None, template_cache=self.formatter_template_cache)
|
mi = Metadata(None, template_cache=self.formatter_template_cache)
|
||||||
|
|
||||||
|
mi._proxy_metadata = ProxyMetadata(self, book_id, formatter=mi.formatter)
|
||||||
|
|
||||||
author_ids = self._field_ids_for('authors', book_id)
|
author_ids = self._field_ids_for('authors', book_id)
|
||||||
adata = self._author_data(author_ids)
|
adata = self._author_data(author_ids)
|
||||||
aut_list = [adata[i] for i in author_ids]
|
aut_list = [adata[i] for i in author_ids]
|
||||||
|
@ -278,9 +278,10 @@ for field in ('formats', 'format_metadata'):
|
|||||||
|
|
||||||
class ProxyMetadata(Metadata):
|
class ProxyMetadata(Metadata):
|
||||||
|
|
||||||
def __init__(self, db, book_id):
|
def __init__(self, db, book_id, formatter=None):
|
||||||
sa(self, 'template_cache', db.formatter_template_cache)
|
sa(self, 'template_cache', db.formatter_template_cache)
|
||||||
sa(self, 'formatter', SafeFormat())
|
if formatter is None:
|
||||||
|
sa(self, 'formatter', SafeFormat())
|
||||||
sa(self, '_db', weakref.ref(db))
|
sa(self, '_db', weakref.ref(db))
|
||||||
sa(self, '_book_id', book_id)
|
sa(self, '_book_id', book_id)
|
||||||
sa(self, '_cache', {'user_categories':{}, 'cover_data':(None,None), 'device_collections':[]})
|
sa(self, '_cache', {'user_categories':{}, 'cover_data':(None,None), 'device_collections':[]})
|
||||||
|
@ -66,7 +66,8 @@ class Metadata(object):
|
|||||||
becomes a reserved field name.
|
becomes a reserved field name.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
def __init__(self, title, authors=(_('Unknown'),), other=None, template_cache=None):
|
def __init__(self, title, authors=(_('Unknown'),), other=None, template_cache=None,
|
||||||
|
formatter=None):
|
||||||
'''
|
'''
|
||||||
@param title: title or ``_('Unknown')``
|
@param title: title or ``_('Unknown')``
|
||||||
@param authors: List of strings or []
|
@param authors: List of strings or []
|
||||||
@ -85,7 +86,8 @@ class Metadata(object):
|
|||||||
self.author = list(authors) if authors else [] # Needed for backward compatibility
|
self.author = list(authors) if authors else [] # Needed for backward compatibility
|
||||||
self.authors = list(authors) if authors else []
|
self.authors = list(authors) if authors else []
|
||||||
from calibre.ebooks.metadata.book.formatter import SafeFormat
|
from calibre.ebooks.metadata.book.formatter import SafeFormat
|
||||||
self.formatter = SafeFormat()
|
if formatter is None:
|
||||||
|
self.formatter = SafeFormat()
|
||||||
self.template_cache = template_cache
|
self.template_cache = template_cache
|
||||||
|
|
||||||
def is_null(self, field):
|
def is_null(self, field):
|
||||||
|
@ -1246,6 +1246,26 @@ class BuiltinFinishFormatting(BuiltinFormatterFunction):
|
|||||||
return val
|
return val
|
||||||
return prefix + formatter._do_format(val, fmt) + suffix
|
return prefix + formatter._do_format(val, fmt) + suffix
|
||||||
|
|
||||||
|
class BuiltinVirtualLibraries(BuiltinFormatterFunction):
|
||||||
|
name = 'virtual_libraries'
|
||||||
|
arg_count = 0
|
||||||
|
category = 'Get values from metadata'
|
||||||
|
__doc__ = doc = _('virtual_libraries() -- return a comma-separated list of '
|
||||||
|
'virtual libraries that contain this book. This function '
|
||||||
|
'works only in the GUI. If you want to use these values '
|
||||||
|
'in save-to-disk or send-to-device templates then you '
|
||||||
|
'must make a custom "Column built from other columns", use '
|
||||||
|
'the function in that column\'s template, and use that '
|
||||||
|
'column\'s value in your save/send templates')
|
||||||
|
|
||||||
|
def evaluate(self, formatter, kwargs, mi, locals_):
|
||||||
|
from calibre.db.lazy import ProxyMetadata
|
||||||
|
if isinstance(mi, ProxyMetadata):
|
||||||
|
return mi.virtual_libraries
|
||||||
|
if hasattr(mi, '_proxy_metadata'):
|
||||||
|
return mi._proxy_metadata.virtual_libraries
|
||||||
|
return _('This function can be used only in the GUI')
|
||||||
|
|
||||||
_formatter_builtins = [
|
_formatter_builtins = [
|
||||||
BuiltinAdd(), BuiltinAnd(), BuiltinApproximateFormats(),
|
BuiltinAdd(), BuiltinAnd(), BuiltinApproximateFormats(),
|
||||||
BuiltinAssign(), BuiltinBooksize(),
|
BuiltinAssign(), BuiltinBooksize(),
|
||||||
@ -1267,7 +1287,7 @@ _formatter_builtins = [
|
|||||||
BuiltinStrcmp(), BuiltinStrInList(), BuiltinStrlen(), BuiltinSubitems(),
|
BuiltinStrcmp(), BuiltinStrInList(), BuiltinStrlen(), BuiltinSubitems(),
|
||||||
BuiltinSublist(),BuiltinSubstr(), BuiltinSubtract(), BuiltinSwapAroundComma(),
|
BuiltinSublist(),BuiltinSubstr(), BuiltinSubtract(), BuiltinSwapAroundComma(),
|
||||||
BuiltinSwitch(), BuiltinTemplate(), BuiltinTest(), BuiltinTitlecase(),
|
BuiltinSwitch(), BuiltinTemplate(), BuiltinTest(), BuiltinTitlecase(),
|
||||||
BuiltinToday(), BuiltinUppercase(),
|
BuiltinToday(), BuiltinUppercase(), BuiltinVirtualLibraries()
|
||||||
]
|
]
|
||||||
|
|
||||||
class FormatterUserFunction(FormatterFunction):
|
class FormatterUserFunction(FormatterFunction):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user