diff --git a/conservancy_beancount/reports/balance_sheet.py b/conservancy_beancount/reports/balance_sheet.py index b4598e3..d7b7a3c 100644 --- a/conservancy_beancount/reports/balance_sheet.py +++ b/conservancy_beancount/reports/balance_sheet.py @@ -50,6 +50,7 @@ import odf.table # type:ignore[import] from beancount.parser import printer as bc_printer from . import core +from . import rewrite from .. import books from .. import cliutil from .. import config as configmod @@ -638,6 +639,15 @@ The default is one year ago. type=cliutil.date_arg, help="""Date to stop reporting entries, exclusive, in YYYY-MM-DD format. The default is a year after the start date. +""") + parser.add_argument( + '--rewrite-rules', '--rewrites', '-r', + action='append', + default=[], + metavar='PATH', + type=Path, + help="""Use rewrite rules from the given YAML file. You can specify +this option multiple times to load multiple sets of rewrite rules in order. """) parser.add_argument( '--fund-metadata-key', '-m', @@ -695,8 +705,18 @@ def main(arglist: Optional[Sequence[str]]=None, bc_printer.print_error(error, file=stderr) data.Account.load_from_books(entries, options_map) + postings = data.Posting.from_entries(entries) + for rewrite_path in args.rewrite_rules: + try: + ruleset = rewrite.RewriteRuleset.from_yaml(rewrite_path) + except ValueError as error: + logger.critical("failed loading rewrite rules from %s: %s", + rewrite_path, error.args[0]) + return os.EX_DATAERR + postings = ruleset.rewrite(postings) + balances = Balances( - data.Posting.from_entries(entries), + postings, args.start_date, args.stop_date, args.fund_metadata_key,