Changeset - c3fd55ec15b7
[Not reviewed]
0 2 0
Brett Smith - 4 years ago 2020-05-19 19:22:00
brettcsmith@brettcsmith.org
historical: Beancount can handle commas in amounts.

And having it looks nicer, is more consistent with our historical
books, is less code for me, and is no more trouble for the user.
2 files changed with 3 insertions and 4 deletions:
0 comments (0 inline, 0 general)
oxrlib/commands/historical.py
Show inline comments
...
 
@@ -173,19 +173,19 @@ class LedgerFormatter(Formatter):
 

	
 

	
 
class BeancountFormatter(LedgerFormatter):
 
    COST_FMT = '{{{}}}'
 

	
 
    def __init__(self, cost_rates, price_rates=None,
 
                 signed_currencies=(), base_fmt='###0.###',
 
                 signed_currencies=(), base_fmt='#,##0.###',
 
                 rate_precision=5, denomination=None):
 
        super().__init__(
 
            cost_rates,
 
            price_rates,
 
            (),
 
            base_fmt.replace(',', ''),
 
            base_fmt,
 
            rate_precision,
 
            denomination,
 
        )
 

	
 
    def price_rate(self, from_amt, from_curr, to_curr):
 
        if self.price_rates is None:
tests/test_historical.py
Show inline comments
...
 
@@ -92,13 +92,12 @@ def check_fx_amount(config, lines, amount, cost, fx_code, fx_sign=None, price=No
 
    if config.args.output_format is oxrhist.Formats.LEDGER:
 
        if fx_sign is not None and fx_code in config.args.signed_currencies:
 
            rate_fmt = f'{re.escape(fx_sign)}{{}}'
 
        cost_re = '{{={}}}'.format(rate_fmt.format(cost))
 
        price_re = ' @ {}'.format(rate_fmt.format(price))
 
    else:
 
        amount = amount.replace(',', '')
 
        cost_re = '{{{}}}'.format(rate_fmt.format(cost))
 
        if config.args.from_date is None:
 
            price_re = ''
 
        else:
 
            price_re = ' @ {}'.format(rate_fmt.format(price))
 
    pattern = r'^{} {}{}$'.format(re.escape(amount), cost_re, price_re)
...
 
@@ -112,13 +111,13 @@ def check_nonfx_amount(config, lines, amount, code=None, sign=None):
 
            sign = '$'
 
        if code in config.args.signed_currencies and sign is not None:
 
            expected = f'{sign}{amount}\n'
 
        else:
 
            expected = f'{amount} {code}\n'
 
    else:
 
        expected = f'{amount.replace(",", "")} {code or "USD"}\n'
 
        expected = f'{amount} {code or "USD"}\n'
 
    assert next(lines, "<EOF>") == expected
 

	
 
def test_rate_list(single_responder, output, any_date):
 
    config = build_config(single_responder, any_date)
 
    lines = lines_from_run(config, output)
 
    assert next(lines).startswith('1 AED = 0.27229')
0 comments (0 inline, 0 general)