@@ -224,7 +224,7 @@ class AccountSplitter:
class Template:
ACCOUNT_SPLIT_RE = re.compile(r'(?:\t| )\s*')
DATE_FMT = '%Y/%m/%d'
PAYEE_LINE_RE = re.compile(r'\{(\w*_)*date\}')
PAYEE_LINE_RE = re.compile(r'^\{(\w*_)*date\}\s')
SIGNED_CURRENCY_FMT = '¤#,##0.###;¤-#,##0.###'
UNSIGNED_CURRENCY_FMT = '#,##0.### ¤¤'
@@ -234,6 +234,7 @@ class Template:
unsigned_currency_fmt=UNSIGNED_CURRENCY_FMT,
template_name='<template>'):
self.date_fmt = date_fmt
self.date_field = 'date'
self.splitter = AccountSplitter(
signed_currencies, signed_currency_fmt, unsigned_currency_fmt, template_name)
@@ -273,7 +274,9 @@ class Template:
line1 = next(lines)
except StopIteration:
return
if self.PAYEE_LINE_RE.match(line1):
match = self.PAYEE_LINE_RE.match(line1)
if match:
self.date_field = match.group(0)[1:-2]
yield '\n' + line1
else:
yield '\n{date} {payee}'
@@ -293,16 +296,16 @@ class Template:
# template_vars must have these keys. Raise a KeyError if not.
template_vars['currency']
template_vars['payee']
try:
date = template_vars['date']
except KeyError:
date = datetime.date.today()
if template_vars.get(self.date_field) is None:
raise errors.UserInputConfigurationError(
"entry needs {} field but that's not set by the importer".format(
self.date_field,
), self.splitter.template_name)
render_vars = {
'amount': strparse.currency_decimal(template_vars['amount']),
'date': date.strftime(self.date_fmt),
}
for key, value in template_vars.items():
if key.endswith('_date'):
if value is not None and (key == 'date' or key.endswith('_date')):
render_vars[key] = value.strftime(self.date_fmt)
all_vars = collections.ChainMap(render_vars, template_vars)
return ''.join(f(all_vars) for f in self.format_funcs)