Just add these lines to your script (the last one at the end):
from beancount.parser import printer
printer.print_entry(transaction1)
And the script will output:
2022-03-29 00:00:00 * "Bob's Grocery Store" "Groceries for the week"
Assets:Bank 1000 USD
Expenses:Groceries 200 USD
Just a note - I use the helpers in the data module to create the postings
like this:
data.create_simple_posting(entry, main_account,
number.D(f"{tx.amount:.2f}"), "USD")
This adds the posting to the entry (transaction1 in your script) and also
returns the posting as a convenience, if you need it.
I learned a LOT by digging through Red S's excellent code!
On Thursday, March 30, 2023 at 7:56:19 PM UTC-4 Red S wrote:
> Beancount is primarily designed to read+process input files, which is
> different from what you're attempting (create+write). May I ask what your
> end goal is?
>
> You can create and write, which is what the importers do. Look at
> extract.py, which will show you how to do this. The main problem above is,
> nowhere are you actually printing output to a file.
>
> On Thursday, March 30, 2023 at 10:53:20 AM UTC-7 Morpheous wrote:
>
>> I am using beancount 2.3.5
>> <https://github.com/beancount/beancount/tree/2.3.5> and I am trying to
>> write a proof of concept file that does the following:
>>
>> 1. Creates a simple chart of accounts
>> 2. Posts sample transactions into ledgers using double entry
>>
>> This is my code:
>> from datetime import datetime
>> from decimal import Decimal as D
>> import beancount.core.data as data
>> line_number = 42
>>
>> metadata = data.new_metadata(filename='./myfile.beancount',
>> lineno=line_number)
>>
>> # define accounts
>> accounts = ["Assets:Bank", "Expenses:Groceries"]
>>
>> # create postings
>> posting1 = data.Posting(accounts[0], data.Amount(D('1000'), 'USD'), None,
>> None, None, meta=metadata)
>> posting2 = data.Posting(accounts[1], data.Amount(D('200'), 'USD'), None,
>> None, None, meta=metadata)
>>
>> # create transactions
>> transaction1 = data.Transaction( meta = metadata, date =
>> datetime.strptime("2022-03-29", '%Y-%m-%d'), flag = "*", payee = "Bob's
>> Grocery Store", narration = "Groceries for the week", tags = set(),
>> links = set(), postings = [posting1, posting2] )
>>
>>
>> After I run the code, I expect to see a newly created file
>> myfile.beancount with the above transactions in it. However, no file is
>> generated.
>>
>> I suspect that I might have to mark the accounts as open first, but I
>> can't see anywhere in the documentation (or a function/method in the source
>> code) that provides a clean entrypoint to do that.
>>
>> How do I modify this code so that it creates the file and correctly posts
>> the transactions to the file?
>>
>
--
You received this message because you are subscribed to the Google Groups
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/beancount/244a52ac-b734-4c1f-a6f2-2735f9b1823an%40googlegroups.com.