diff --git a/src/calibre/ebooks/metadata/book/base.py b/src/calibre/ebooks/metadata/book/base.py index 3b96c98a7b..593e161df7 100644 --- a/src/calibre/ebooks/metadata/book/base.py +++ b/src/calibre/ebooks/metadata/book/base.py @@ -43,7 +43,7 @@ class SafeFormat(TemplateFormatter): b = self.book.get_user_metadata(key, False) if b and b['datatype'] == 'int' and self.book.get(key, 0) == 0: v = '' - elif b and b['datatype'] == 'float' and b.get(key, 0.0) == 0.0: + elif b and b['datatype'] == 'float' and self.book.get(key, 0.0) == 0.0: v = '' else: ign, v = self.book.format_field(key.lower(), series_with_index=False) diff --git a/src/calibre/library/save_to_disk.py b/src/calibre/library/save_to_disk.py index 94f9dbd229..c6cc12a978 100644 --- a/src/calibre/library/save_to_disk.py +++ b/src/calibre/library/save_to_disk.py @@ -131,15 +131,14 @@ class SafeFormat(TemplateFormatter): self.vformat(b['display']['composite_template'], [], kwargs) return self.composite_values[key] if key in kwargs: - return kwargs[key].replace('/', '_').replace('\\', '_') + val = kwargs[key] + return val.replace('/', '_').replace('\\', '_') return '' except: if DEBUG: traceback.print_exc() return key -safe_formatter = SafeFormat() - def get_components(template, mi, id, timefmt='%b %Y', length=250, sanitize_func=ascii_filename, replace_whitespace=False, to_lowercase=False): @@ -173,17 +172,22 @@ def get_components(template, mi, id, timefmt='%b %Y', length=250, custom_metadata = mi.get_all_user_metadata(make_copy=False) for key in custom_metadata: if key in format_args: + cm = custom_metadata[key] ## TODO: NEWMETA: should ratings be divided by 2? The standard rating isn't... - if custom_metadata[key]['datatype'] == 'series': + if cm['datatype'] == 'series': format_args[key] = tsfmt(format_args[key]) if key+'_index' in format_args: format_args[key+'_index'] = fmt_sidx(format_args[key+'_index']) - elif custom_metadata[key]['datatype'] == 'datetime': + elif cm['datatype'] == 'datetime': format_args[key] = strftime(timefmt, format_args[key].timetuple()) - elif custom_metadata[key]['datatype'] == 'bool': + elif cm['datatype'] == 'bool': format_args[key] = _('yes') if format_args[key] else _('no') - - components = safe_formatter.safe_format(template, format_args, + elif cm['datatype'] in ['int', 'float']: + if format_args[key] != 0: + format_args[key] = unicode(format_args[key]) + else: + format_args[key] = '' + components = SafeFormat().safe_format(template, format_args, 'G_C-EXCEPTION!', mi) components = [x.strip() for x in components.split('/') if x.strip()] components = [sanitize_func(x) for x in components if x]