beancount-black 
Opinionated Beancount formatter library, just like Python's black code formatter but for Beancount
Try it out online here
Features
- MIT licensed - based on beancount-parser, a Lark based LALR(1) Beancount syntax parser
- Extremely fast - 5K+ lines file generated by
bean-examplecan be formatted in around 1 second - Section awareness - entries separated by Emac org symbol mark
*will be formatted in groups without changing the overall structure - Comment preserving - comments are preserved and will be formatted as well
- Auto column width - calculate maximum column width and adjust accordingly
- Valid beancount file assumed - please notice that the formatter assumes the given beacnount file is valid, it doesn't not perform any kind of validation
Sponsor
The original project beancount-black was meant to be an internal tool built by Launch Platform LLC for
A modern accounting book service based on the most popular open source version control system Git and text-based double entry accounting book software Beancount. We realized adding new entries with BeanHub automatically over time makes the beancount file a mess. So, a strong code formatter is needed. While SaaS businesses won't be required to open-source an internal tool like this, we still love that the service is only possible because of the open-source tool we are using. It would be greatly beneficial for the community to access a tool like this, so we've decided to open-source it under an MIT license. We hope you find this tool useful 😄
Install
To install the formatter, simply run
pip install beancount-black
Usage
Run
bean-black /path/to/file.bean
Then the file will be formatted.
Since this tool is still in its early stage, a backup file at <filepath>.backup will be created automatically by default just in case.
The creation of backup files can be disabled by passing -n or --no-backup like this
bean-black -n /path/to/file.bean
It's highly recommended to use BeanHub, Git or other version control system to track your Beancount book files before running the formatter against them without a backup.
If you want to run the formatter programmatically, you can do this
import io
from beancount_parser.parser import make_parser
from beancount_black.formatter import Formatter
parser = make_parser()
formatter = Formatter()
tree = parser.parse(beancount_content)
output_file = io.StringIO()
formatter.format(tree, output_file)
Stdin mode
You can run the formatter in STDIN mode by passing -s or --stdin-mode argument like this:
bean-black -s
Debug
Sometimes you might encounter problems when formatting some beancount files.
To debug and better understand which line is causing the problem, you can change the log level by passing -l argument with debug or verbose.
For example:
bean-black -n /path/to/file.bean -l verbose
With verbose, details of the parsed object will be printed.
With debug, only the line number and type of entry will be printed.
You can also use LOG_LEVEL environment variable as well.
The available log level options are:
- verbose
- debug
- info (default)
- error
- warning
- fatal
Future features
- Add argument for renaming account and commodity
- Add argument for following other files from
includestatements and also format those files
Feedbacks, bugs reporting or feature requests are welcome 🙌, just please open an issue. No guarantee we have time to deal with them, but will see what we can do.
Metadata
Release files for beancount-black 1.0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| beancount_black-1.0.6.tar.gz | 12.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| beancount_black-1.0.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.0 kB
Release files / beancount_black-1.0.6.tar.gz
| Download URL | beancount_black-1.0.6.tar.gz |
|---|---|
| Size | 12.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ca256720d813402455b64c51bd61001225ab0cc498ca9ad3a55d3d41a977e9ca
|
|
BLAKE2b-256 checksum How to use checksums |
383c42329cf80aa347ec36aeb40274aa1886854ec4aa2c8cdee8556ed11c0e19
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.4.2 CPython/3.10.11 Linux/7.0.0-1009-aws
|
Release files / beancount_black-1.0.6-py3-none-any.whl
| Download URL | beancount_black-1.0.6-py3-none-any.whl |
|---|---|
| Size | 11.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
714dca969d8260837cfcdb337c7a286663287a2fd18a19ddb0b6dd5c7d502a13
|
|
BLAKE2b-256 checksum How to use checksums |
4a3e9e2fa522cabc6eab64c9314e2e7cc96b6f0d2d426880d14fc92011d16de3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.4.2 CPython/3.10.11 Linux/7.0.0-1009-aws
|