diff --git a/src/calibre/ebooks/metadata/book/base.py b/src/calibre/ebooks/metadata/book/base.py index 31485dfe1b..ce6e2ee78d 100644 --- a/src/calibre/ebooks/metadata/book/base.py +++ b/src/calibre/ebooks/metadata/book/base.py @@ -46,7 +46,10 @@ composite_formatter = SafeFormat() compress_spaces = re.compile(r'\s+') def format_composite(x, mi): - ans = composite_formatter.vformat(x, [], mi).strip() + try: + ans = composite_formatter.vformat(x, [], mi).strip() + except: + ans = x return compress_spaces.sub(' ', ans) class Metadata(object): @@ -86,7 +89,10 @@ class Metadata(object): except AttributeError: pass if field in _data['user_metadata'].iterkeys(): - return _data['user_metadata'][field]['#value#'] + d = _data['user_metadata'][field] + if d['datatype'] != 'composite': + return d['#value#'] + return format_composite(d['display']['composite_template'], self) raise AttributeError( 'Metadata object has no attribute named: '+ repr(field)) @@ -386,8 +392,6 @@ class Metadata(object): res = format_date(res, cmeta['display'].get('date_format','dd MMM yyyy')) elif datatype == 'bool': res = _('Yes') if res else _('No') - elif datatype == 'composite': - res = format_composite(cmeta['display']['composite_template'], self) return (name, res, orig_res, cmeta) if key in field_metadata and field_metadata[key]['kind'] == 'field': diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 7839b89d7e..2a116f6f3d 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -605,7 +605,7 @@ class BooksModel(QAbstractTableModel): # {{{ def composite_type(r, key=None): mi = self.get_cached_metadata(r) - return QVariant(mi.format_field(key)[1]) + return QVariant(mi.get(key, '')) self.dc = { 'title' : functools.partial(text_type,