diff --git a/conservancy_beancount/data.py b/conservancy_beancount/data.py index 829cec77ac9f898d0ad0702f9a083accc52dadd2..b102f3bc01f034c18b4ffb05ccdd451d8540b2f6 100644 --- a/conservancy_beancount/data.py +++ b/conservancy_beancount/data.py @@ -220,16 +220,19 @@ class Account(str): yield account @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 + 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 an iterator of all accounts under that account in the hierarchy. Otherwise, returns an iterator of all accounts with the given ``classification`` metadata. """ + if s is None: + return (cls(acct) for acct in cls._meta_map) # 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) else: return cls.iter_accounts_by_classification(s)