Add prefix and postfix to template values. Syntax: either '{key}' or '{txt1|key|txt2}'. In the second case, if val[key] is not empty, then the result is 'txt1' + val[key] + txt2.

This commit is contained in:
Charles Haley 2010-09-22 16:43:28 +01:00
parent 7893c01807
commit b1250a6db1
3 changed files with 29 additions and 15 deletions

View File

@ -14,8 +14,8 @@ from calibre.ebooks.metadata.book import STANDARD_METADATA_FIELDS
from calibre.ebooks.metadata.book import TOP_LEVEL_CLASSIFIERS from calibre.ebooks.metadata.book import TOP_LEVEL_CLASSIFIERS
from calibre.ebooks.metadata.book import ALL_METADATA_FIELDS from calibre.ebooks.metadata.book import ALL_METADATA_FIELDS
from calibre.library.field_metadata import FieldMetadata from calibre.library.field_metadata import FieldMetadata
from calibre.utils.date import isoformat, format_date
from calibre.utils.date import isoformat, format_date
NULL_VALUES = { NULL_VALUES = {
@ -38,10 +38,17 @@ class SafeFormat(string.Formatter):
Provides a format function that substitutes '' for any missing value Provides a format function that substitutes '' for any missing value
''' '''
def get_value(self, key, args, mi): def get_value(self, key, args, mi):
ign, v = mi.format_field(key, series_with_index=False) from calibre.library.save_to_disk import explode_string_template_value
if v is None: try:
return '' prefix, key, suffix = explode_string_template_value(key)
return v ign, v = mi.format_field(key, series_with_index=False)
if v is None:
return ''
if v is '':
return ''
return '%s%s%s'%(prefix, v, suffix)
except:
return key
composite_formatter = SafeFormat() composite_formatter = SafeFormat()
compress_spaces = re.compile(r'\s+') compress_spaces = re.compile(r'\s+')
@ -50,6 +57,7 @@ def format_composite(x, mi):
try: try:
ans = composite_formatter.vformat(x, [], mi).strip() ans = composite_formatter.vformat(x, [], mi).strip()
except: except:
traceback.print_exc()
ans = x ans = x
return compress_spaces.sub(' ', ans) return compress_spaces.sub(' ', ans)

View File

@ -122,15 +122,6 @@ class SafeFormat(string.Formatter):
v = ','.join(v) v = ','.join(v)
return v return v
composite_formatter = SafeFormat()
def format_composite(x, mi):
try:
ans = composite_formatter.vformat(x, [], mi).strip()
except:
ans = x
return ans
class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog):
s_r_functions = { '' : lambda x: x, s_r_functions = { '' : lambda x: x,

View File

@ -101,15 +101,30 @@ def preprocess_template(template):
template = template.decode(preferred_encoding, 'replace') template = template.decode(preferred_encoding, 'replace')
return template return template
template_value_re = re.compile(r'^([^\|]*(?=\|))(?:\|?)([^\|]*)(?:\|?)((?<=\|).*?)$')
def explode_string_template_value(key):
try:
matches = template_value_re.match(key)
if matches.lastindex != 3:
return key
return matches.groups()
except:
return '', key, ''
class SafeFormat(string.Formatter): class SafeFormat(string.Formatter):
''' '''
Provides a format function that substitutes '' for any missing value Provides a format function that substitutes '' for any missing value
''' '''
def get_value(self, key, args, kwargs): def get_value(self, key, args, kwargs):
try: try:
return kwargs[key] prefix, key, suffix = explode_string_template_value(key)
if kwargs[key]:
return '%s%s%s'%(prefix, kwargs[key], suffix)
return ''
except: except:
return '' return ''
safe_formatter = SafeFormat() safe_formatter = SafeFormat()
def safe_format(x, format_args): def safe_format(x, format_args):