Better error handling in the format_date_field() formatter function

This commit is contained in:
Charles Haley 2024-10-22 16:46:13 +01:00
parent 1e766f8843
commit 80453b3485

View File

@ -29,6 +29,7 @@ from calibre.constants import DEBUG
from calibre.db.constants import DATA_DIR_NAME, DATA_FILE_PATTERN from calibre.db.constants import DATA_DIR_NAME, DATA_FILE_PATTERN
from calibre.db.notes.exim import expand_note_resources, parse_html from calibre.db.notes.exim import expand_note_resources, parse_html
from calibre.ebooks.metadata import title_sort from calibre.ebooks.metadata import title_sort
from calibre.ebooks.metadata.book.base import field_metadata
from calibre.utils.config import tweaks from calibre.utils.config import tweaks
from calibre.utils.date import UNDEFINED_DATE, format_date, now, parse_date from calibre.utils.date import UNDEFINED_DATE, format_date, now, parse_date
from calibre.utils.icu import capitalize, sort_key, strcmp from calibre.utils.icu import capitalize, sort_key, strcmp
@ -1303,9 +1304,12 @@ class BuiltinFormatDateField(BuiltinFormatterFunction):
def evaluate(self, formatter, kwargs, mi, locals, field, format_string): def evaluate(self, formatter, kwargs, mi, locals, field, format_string):
try: try:
field = field_metadata.search_term_to_field_key(field)
if field not in mi.all_field_keys(): if field not in mi.all_field_keys():
return _('Unknown field %s passed to function %s')%(field, 'format_date_field') raise ValueError(_("Function %s: Unknown field '%s'")%('format_date_field', field))
val = mi.get(field, None) val = mi.get(field, None)
if mi.metadata_for_field(field)['datatype'] != 'datetime':
raise ValueError(_("Function %s: field '%s' is not a date")%('format_date_field', field))
if val is None: if val is None:
s = '' s = ''
elif format_string == 'to_number': elif format_string == 'to_number':
@ -1317,9 +1321,11 @@ class BuiltinFormatDateField(BuiltinFormatterFunction):
else: else:
s = format_date(val, format_string) s = format_date(val, format_string)
return s return s
except: except ValueError:
raise
except Exception:
traceback.print_exc() traceback.print_exc()
s = 'BAD DATE' raise
return s return s