Beispiel #1
0
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()
Beispiel #2
0
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")
Beispiel #3
0
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")
Beispiel #4
0
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)
Beispiel #5
0
    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())
Beispiel #6
0
 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())