reports: Balance.format() accepts None as a format.

This commit is contained in:
Brett Smith 2020-05-28 08:57:43 -04:00
parent 2c44cc8f50
commit d8df34ebaf
2 changed files with 12 additions and 1 deletions

View file

@ -113,7 +113,7 @@ class Balance(Mapping[str, data.Amount]):
return self._all_amounts(operator.le, 0) return self._all_amounts(operator.le, 0)
def format(self, def format(self,
fmt: str='#,#00.00 ¤¤', fmt: Optional[str]='#,#00.00 ¤¤',
sep: str=', ', sep: str=', ',
empty: str="Zero balance", empty: str="Zero balance",
) -> str: ) -> str:
@ -122,6 +122,9 @@ class Balance(Mapping[str, data.Amount]):
If the balance is zero, returns ``empty``. Otherwise, returns a string If the balance is zero, returns ``empty``. Otherwise, returns a string
with each amount in the balance formatted as ``fmt``, separated by with each amount in the balance formatted as ``fmt``, separated by
``sep``. ``sep``.
If you set ``fmt`` to None, amounts will be formatted according to the
user's locale. The default format is Beancount's input format.
""" """
amounts = [amount for amount in self.values() if amount.number] amounts = [amount for amount in self.values() if amount.number]
if not amounts: if not amounts:

View file

@ -22,6 +22,8 @@ import pytest
from . import testutil from . import testutil
import babel.numbers
from conservancy_beancount.reports import core from conservancy_beancount.reports import core
DEFAULT_STRINGS = [ DEFAULT_STRINGS = [
@ -191,6 +193,12 @@ def test_format_sep(sep):
balance = core.Balance(amounts) balance = core.Balance(amounts)
assert balance.format(sep=sep) == expected assert balance.format(sep=sep) == expected
def test_format_none():
amounts = testutil.balance_map(BRL=65000)
balance = core.Balance(amounts)
expected = babel.numbers.format_currency(65000, 'BRL')
assert balance.format(None) == expected
@pytest.mark.parametrize('empty', [ @pytest.mark.parametrize('empty', [
"N/A", "N/A",
"Zero", "Zero",