data: Make Account.iter_accounts() argument optional.

This commit is contained in:
Brett Smith 2020-07-20 11:22:23 -04:00
parent 6f1d01a3d4
commit aaa26e9e61
2 changed files with 8 additions and 3 deletions

View file

@ -220,16 +220,19 @@ class Account(str):
yield account yield account
@classmethod @classmethod
def iter_accounts(cls, s: str) -> Iterator['Account']: def iter_accounts(cls, s: Optional[str]=None) -> Iterator['Account']:
"""Iterate account objects by name or classification """Iterate account objects by name or classification
With no argument, returns an iterator of all known account names.
If you pass in a root account name, or a valid account string, returns If you pass in a root account name, or a valid account string, returns
an iterator of all accounts under that account in the hierarchy. an iterator of all accounts under that account in the hierarchy.
Otherwise, returns an iterator of all accounts with the given Otherwise, returns an iterator of all accounts with the given
``classification`` metadata. ``classification`` metadata.
""" """
if s is None:
return (cls(acct) for acct in cls._meta_map)
# We append a stub subaccount to match root accounts. # We append a stub subaccount to match root accounts.
if cls.is_account(f'{s}:Test'): elif cls.is_account(f'{s}:RootsOK'):
return cls.iter_accounts_by_hierarchy(s) return cls.iter_accounts_by_hierarchy(s)
else: else:
return cls.iter_accounts_by_classification(s) return cls.iter_accounts_by_classification(s)

View file

@ -444,6 +444,8 @@ def test_iter_accounts_by_classification(asset_hierarchy, arg, expect_subaccts):
} }
@pytest.mark.parametrize('arg,expect_subaccts', [ @pytest.mark.parametrize('arg,expect_subaccts', [
(None, ['Bank:CD', 'Bank:Checking', 'Bank:Savings', 'Cash',
'Investment:Commodities', 'Investment:Stocks']),
('Assets', ['Bank:CD', 'Bank:Checking', 'Bank:Savings', 'Cash', ('Assets', ['Bank:CD', 'Bank:Checking', 'Bank:Savings', 'Cash',
'Investment:Commodities', 'Investment:Stocks']), 'Investment:Commodities', 'Investment:Stocks']),
('Assets:Bank', ['CD', 'Checking', 'Savings']), ('Assets:Bank', ['CD', 'Checking', 'Savings']),
@ -454,7 +456,7 @@ def test_iter_accounts_by_classification(asset_hierarchy, arg, expect_subaccts):
('Unused classification', []), ('Unused classification', []),
]) ])
def test_iter_accounts(asset_hierarchy, arg, expect_subaccts): def test_iter_accounts(asset_hierarchy, arg, expect_subaccts):
if arg.startswith('Assets'): if arg and arg.startswith('Assets'):
prefix = arg prefix = arg
else: else:
prefix = 'Assets' prefix = 'Assets'