def write_transactions_by_type(output_signatures: str, account_data: AccountData, dcontext: display_context.DisplayContext): """Write files of transactions by signature, for debugging.""" # Build signature map. signature_map = collections.defaultdict(list) for accdata in account_data: for entry in accdata.transactions: signature_map[entry.meta['signature']].append(entry) # Render them to files, for debugging. os.makedirs(output_signatures, exist_ok=True) for sig, sigentries in signature_map.items(): sigentries = data.sorted(sigentries) filename = "{}.org".format(sig) with open(path.join(output_signatures, filename), "w") as catfile: fprint = partial(print, file=catfile) fprint( ";; -*- mode: beancount; coding: utf-8; fill-column: 400 -*-") description = get_description(sig) or "?" fprint("description: {}".format(description)) fprint("number_entries: {}".format(len(sigentries))) fprint() epr = printer.EntryPrinter(dcontext=dcontext, stringify_invalid_types=True) for entry in sigentries: fprint(epr(entry)) fprint()
def write_account_file(dcontext: display_context.DisplayContext, account_data: AccountData, filename: str): """Write out a file with details, for inspection and debugging.""" logging.info("Writing details file: %s", filename) epr = printer.EntryPrinter(dcontext=dcontext, stringify_invalid_types=True) os.makedirs(path.dirname(filename), exist_ok=True) with open(filename, "w") as outfile: fprint = partial(print, file=outfile) fprint(";; -*- mode: beancount; coding: utf-8; fill-column: 400 -*-") # Print front summary section. fprint("* Summary\n") fprint("Account: {}".format(account_data.account)) # Print the final balance of the account. units_balance = account_data.balance.reduce(convert.get_units) fprint("Balance: {}".format(units_balance)) # Print out those details. fprint("** Category map\n") fprint() pprint(account_data.catmap, stream=outfile) fprint("\n\n") fprint("** Transactions\n") for entry in account_data.transactions: fprint(epr(entry)) fprint("\n\n") # Flatten cash flows to a table. fprint("** Cash flows\n") df = cash_flows_to_table(account_data.cash_flows) fprint(df.to_string()) fprint("\n\n")
def write_account_file(dcontext: display_context.DisplayContext, account_data: AccountData, filename: str): """Write out a file with details, for inspection and debugging.""" logging.info("Writing details file: %s", filename) epr = printer.EntryPrinter(dcontext=dcontext, stringify_invalid_types=True) with open_with_mkdir(filename) as outfile: fprint = partial(print, file=outfile) fprint(";; -*- mode: beancount; coding: utf-8; fill-column: 400 -*-") # Print front summary section. fprint("* Summary\n") fprint("Account: {}".format(account_data.account)) final_cf = account_data.cash_flows[-1] units_balance = final_cf.balance.reduce(convert.get_units) fprint("Balance: {}".format(units_balance)) # Print out those details. fprint("** Category map\n") fprint() pprint(account_data.catmap, stream=outfile) fprint("\n\n") fprint("** Transactions\n") for entry in account_data.transactions: fprint(epr(entry)) fprint("\n\n") fprint("** Cash flows\n") for flow in account_data.cash_flows: fprint(flow) fprint("\n\n")
def produce_cash_flows_explicit(entry: data.Directive, account: Account) -> List[CashFlow]: """Produce cash flows using explicit handlers from signatures.""" sig = entry.meta["signature"] try: handler, _ = _signature_registry[sig] except KeyError: epr = printer.EntryPrinter(stringify_invalid_types=True) print(epr(entry), file=sys.stderr) raise return handler(entry, account)
def test_align_min_width_account(self, entries, errors, options_map): """ 2014-01-01 open Expenses:Commissions 2014-07-01 * "Something" Expenses:Commissions 20000 USD Expenses:Commissions 9.9505 USD Expenses:Commissions -20009.9505 USD """ dcontext = options_map['dcontext'] oss = io.StringIO() eprinter = printer.EntryPrinter(dcontext, min_width_account=40) oss.write(eprinter(entries[1])) expected_str = textwrap.dedent("""\ 2014-07-01 * "Something" Expenses:Commissions 20000.0000 USD Expenses:Commissions 9.9505 USD Expenses:Commissions -20009.9505 USD """) self.assertEqual(expected_str, oss.getvalue())
def test_metadata(self): meta = data.new_metadata('beancount/core/testing.beancount', 12345) meta['something'] = r'a"\c' oss = io.StringIO() printer.EntryPrinter().write_metadata(meta, oss) self.assertEqual(' something: "a\\"\\\\c"\n', oss.getvalue())