beancount-io 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- beancount_io-0.1.0/.gitignore +6 -0
- beancount_io-0.1.0/Makefile +114 -0
- beancount_io-0.1.0/NOTICE.fava +25 -0
- beancount_io-0.1.0/PKG-INFO +165 -0
- beancount_io-0.1.0/README.md +139 -0
- beancount_io-0.1.0/docs/IMPORTING.md +280 -0
- beancount_io-0.1.0/docs/PRFAQ.md +339 -0
- beancount_io-0.1.0/docs/REFERENCE.md +701 -0
- beancount_io-0.1.0/docs/RELEASING.md +93 -0
- beancount_io-0.1.0/docs/TUTORIAL.md +106 -0
- beancount_io-0.1.0/docs/USAGE.md +754 -0
- beancount_io-0.1.0/docs/agent-skills.md +111 -0
- beancount_io-0.1.0/docs/examples/csv_importers.py +54 -0
- beancount_io-0.1.0/docs/examples/first-month.csv +4 -0
- beancount_io-0.1.0/docs/examples/rules.toml +18 -0
- beancount_io-0.1.0/openapi/v1.json +19655 -0
- beancount_io-0.1.0/pyproject.toml +100 -0
- beancount_io-0.1.0/requirements.lock +379 -0
- beancount_io-0.1.0/scripts/gen_cloud_commands.py +272 -0
- beancount_io-0.1.0/scripts/gen_reference.py +181 -0
- beancount_io-0.1.0/scripts/release-check.sh +34 -0
- beancount_io-0.1.0/scripts/render-formula.sh +76 -0
- beancount_io-0.1.0/scripts/render-formula.test.sh +131 -0
- beancount_io-0.1.0/scripts/smoke-installed.py +340 -0
- beancount_io-0.1.0/scripts/test-homebrew.sh +37 -0
- beancount_io-0.1.0/scripts/test-install.py +55 -0
- beancount_io-0.1.0/src/cli/__init__.py +0 -0
- beancount_io-0.1.0/src/cli/api/__init__.py +0 -0
- beancount_io-0.1.0/src/cli/api/client.py +83 -0
- beancount_io-0.1.0/src/cli/api/rest_client/__init__.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/__init__.py +1 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/__init__.py +1 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/accessible_ledgers.py +234 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/consume_cli_auth_session.py +213 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/create_cli_auth_session.py +223 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/create_ledger.py +223 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_account.py +184 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_api_keys_id.py +209 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_ledgers_owner_name_bank_transactions.py +274 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_ledgers_owner_name_collaborators_collaborator.py +239 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_ledgers_owner_name_files_path.py +263 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_ledgers_owner_name_star.py +255 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v_1_ledgers_owner_name_banks_item_id.py +267 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_ledger.py +227 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_account_ai_cfo_usage.py +186 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_api_keys.py +189 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_asset_download_url.py +233 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_feature_flags.py +218 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_health.py +176 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_account_directives.py +217 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_account_journal.py +416 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_account_last_entries.py +272 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_account_report.py +321 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_accounts.py +247 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_archive_archive.py +235 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_archive_download_url.py +233 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_attributes.py +221 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_bank_accounts.py +217 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_bank_transactions_suggested_categories.py +242 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_bank_transactions_unsynced.py +238 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_banks.py +217 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_collaborators.py +282 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_collaborators_permission.py +246 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_commit_details.py +238 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_commits.py +278 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_commodities.py +218 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_currencies.py +222 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_documents.py +272 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_entries_count.py +272 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_entry_context.py +238 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_errors.py +218 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_events.py +218 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_files.py +253 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_files_path.py +239 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_interval_totals.py +321 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_journal.py +379 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_latest_commit.py +238 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_links.py +218 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_narration_transactions.py +238 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_narrations.py +218 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_overview.py +306 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_payee_accounts.py +242 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_payee_transactions.py +238 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_payees.py +222 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_plaintext_journal.py +268 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_postings_per_account.py +280 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_source_files.py +217 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_statements_statement.py +331 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_tags.py +218 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_trial_balance.py +306 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_years.py +218 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_legacy_journal_entries.py +425 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_legacy_ledger_meta.py +235 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_public_keys.py +248 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_social_followers.py +258 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_social_following.py +258 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_social_profile.py +222 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_social_starred_repositories.py +260 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_temp_assets_download_url.py +220 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_tier_quotas.py +191 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v_1_ledgers_owner_name_banks_item_id.py +231 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v_1_ledgers_owner_name_banks_item_id_accounts.py +231 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v_1_ledgers_owner_name_banks_item_id_suggested_mapping.py +231 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_cli_auth_session.py +213 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_ledger.py +227 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_user_profile.py +237 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/logout.py +190 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/owned_ledgers.py +244 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_api_keys.py +217 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_import_parse_file.py +223 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_bank_transactions_submit.py +274 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_entries.py +259 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_entry_source_delete.py +257 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_many.py +257 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt.py +261 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_import_parse_receipt.py +257 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_import_suggest_categories.py +264 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_leave.py +251 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_pull_requests.py +261 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_query.py +243 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_rename_file.py +261 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_legacy_entries.py +223 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_public_keys.py +219 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_temp_assets_upload_url.py +221 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v_1_ledgers_owner_name_banks_item_id_reconcile.py +267 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v_1_ledgers_owner_name_banks_item_id_refresh.py +286 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v_1_ledgers_owner_name_banks_item_id_sync.py +271 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator.py +267 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v1_ledgers_owner_name_entry_source.py +257 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v1_ledgers_owner_name_files_path.py +267 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v1_ledgers_owner_name_star.py +255 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v_1_ledgers_owner_name_bank_accounts_account_id_currency.py +284 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v_1_ledgers_owner_name_bank_accounts_account_id_mapping.py +284 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/search_ledgers.py +524 -0
- beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/update_ledger.py +249 -0
- beancount_io-0.1.0/src/cli/api/rest_client/client.py +268 -0
- beancount_io-0.1.0/src/cli/api/rest_client/errors.py +16 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/__init__.py +467 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/accessible_ledgers_response_200_item.py +188 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/accessible_ledgers_response_200_item_permissions.py +77 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/api_key.py +154 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/bank_account_currency.py +42 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/bank_account_mapping.py +42 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/bank_transaction_discard.py +61 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/bank_transaction_submission.py +88 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/bank_transaction_submission_transactions_item.py +80 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/bql_query.py +62 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/consume_cli_auth_session_response_200.py +69 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_api_key.py +124 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_api_key_scopes_item.py +10 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_cli_auth_session_body.py +56 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_cli_auth_session_body_client.py +71 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_cli_auth_session_response_200.py +86 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_body.py +159 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_body_template_type_1.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_body_template_type_2_type_1.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_body_template_type_3_type_1.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_response_200.py +186 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_response_200_permissions.py +77 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_bank_transactions_dry_run.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_banks_item_id_dry_run.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_response_200.py +72 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_star_body.py +23 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_star_response_200.py +80 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/delete_ledger_response_200.py +61 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request.py +236 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry.py +220 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry_meta_type_0.py +45 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry_postings_item.py +148 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry_postings_item_price_type_0.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry_postings_item_units_type_0.py +51 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_1.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_1_entry.py +58 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_1_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_2.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_2_entry.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_2_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_3.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_3_entry.py +66 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_3_entry_amount.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_3_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_4.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_4_entry.py +66 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_4_entry_amount.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_4_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_5.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_5_entry.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_5_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_6.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_6_entry.py +58 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_6_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7_entry.py +76 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7_entry_amount.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7_entry_interval.py +12 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_8.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_8_entry.py +122 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_8_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_9.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_9_entry.py +58 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_9_type.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/file_commit_ack.py +70 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/file_delete.py +71 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/file_write.py +84 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_account_ai_cfo_usage_response_200.py +69 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_asset_download_url_response_200.py +61 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_feature_flags_response_200.py +61 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_account_journal_with_children.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_archive_download_url_response_200.py +61 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_collaborators_permission_response_200.py +96 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_collaborators_permission_response_200_user.py +124 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_collaborators_response_200_item.py +143 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_collaborators_response_200_item_permission.py +10 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_statements_statement_statement.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_legacy_journal_entries_detailed.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_public_keys_response_200_item.py +104 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_followers_response_200.py +87 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_followers_response_200_users_item.py +90 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_following_response_200.py +87 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_following_response_200_users_item.py +90 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_profile_response_200.py +139 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_profile_response_200_activities_item.py +128 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_profile_response_200_profile.py +218 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_profile_response_200_repositories_item.py +116 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_starred_repositories_response_200.py +89 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_starred_repositories_response_200_repositories_item.py +106 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_temp_assets_download_url_response_200.py +69 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_tier_quotas_response_200_item.py +93 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_cli_auth_session_response_200.py +63 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_cli_auth_session_response_200_status.py +12 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_ledger_response_200.py +186 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_ledger_response_200_permissions.py +77 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0.py +253 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0_email_report_status_type_1.py +10 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0_email_report_status_type_2_type_1.py +10 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0_email_report_status_type_3_type_1.py +10 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0_limits.py +85 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/ledger_dir_entry.py +80 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/ledger_dir_entry_type.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/ledger_file.py +78 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/logout_response_200.py +61 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/minted_api_key.py +77 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/owned_ledgers_response_200_item.py +188 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/owned_ledgers_response_200_item_permissions.py +77 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_import_parse_file_body.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_import_parse_file_response_200.py +79 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_import_parse_file_response_200_rows_item.py +85 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_bank_transactions_submit_dry_run.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_banks_item_id_reconcile_dry_run.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_banks_item_id_refresh_body.py +23 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_banks_item_id_refresh_dry_run.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_banks_item_id_sync_dry_run.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entries_response_200.py +64 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_body.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_many_body.py +62 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_many_body_entries_item.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_many_response_200.py +69 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_response_200.py +69 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt_body.py +60 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt_body_input.py +94 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt_body_input_postings_item.py +58 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt_response_200.py +61 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_parse_receipt_body.py +42 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_parse_receipt_response_200.py +112 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_suggest_categories_body.py +62 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_suggest_categories_body_transactions_item.py +74 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_suggest_categories_response_200_item.py +96 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_leave_body.py +23 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_leave_response_200.py +72 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_pull_requests_body.py +116 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_pull_requests_body_changes_item.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_pull_requests_response_200.py +108 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_rename_file_body.py +92 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_rename_file_response_200.py +77 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_body.py +82 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_body_entries_input_item.py +114 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_body_entries_input_item_meta.py +45 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_body_entries_input_item_postings_item.py +50 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_response_200.py +69 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_public_keys_body.py +72 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_public_keys_response_200.py +104 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_temp_assets_upload_url_body.py +74 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_temp_assets_upload_url_response_200.py +77 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_bank_accounts_account_id_currency_dry_run.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_bank_accounts_account_id_mapping_dry_run.py +8 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_body.py +124 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_body_permission_type_1.py +10 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_body_permission_type_2_type_1.py +10 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_body_permission_type_3_type_1.py +10 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_response_200.py +72 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_entry_source_body.py +58 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_entry_source_response_200.py +86 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_star_body.py +23 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_star_response_200.py +80 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_archived.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_exclusive.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_include_desc.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_is_private.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_private.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_response_200_item.py +188 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_response_200_item_permissions.py +77 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_template.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_topic.py +9 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/update_ledger_body.py +94 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/update_ledger_response_200.py +186 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/update_ledger_response_200_permissions.py +77 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/v1_error.py +76 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/v1_error_error.py +93 -0
- beancount_io-0.1.0/src/cli/api/rest_client/models/v1_error_error_metadata.py +45 -0
- beancount_io-0.1.0/src/cli/api/rest_client/types.py +54 -0
- beancount_io-0.1.0/src/cli/ask/__init__.py +0 -0
- beancount_io-0.1.0/src/cli/ask/agent.py +165 -0
- beancount_io-0.1.0/src/cli/ask/repl.py +248 -0
- beancount_io-0.1.0/src/cli/ask/skills.py +121 -0
- beancount_io-0.1.0/src/cli/auth/__init__.py +0 -0
- beancount_io-0.1.0/src/cli/auth/credentials.py +83 -0
- beancount_io-0.1.0/src/cli/auth/device_flow.py +77 -0
- beancount_io-0.1.0/src/cli/commands/__init__.py +0 -0
- beancount_io-0.1.0/src/cli/commands/add.py +725 -0
- beancount_io-0.1.0/src/cli/commands/ask.py +84 -0
- beancount_io-0.1.0/src/cli/commands/check.py +24 -0
- beancount_io-0.1.0/src/cli/commands/cloud/__init__.py +0 -0
- beancount_io-0.1.0/src/cli/commands/cloud/app.py +97 -0
- beancount_io-0.1.0/src/cli/commands/cloud/generated/__init__.py +0 -0
- beancount_io-0.1.0/src/cli/commands/cloud/generated/ledger.py +97 -0
- beancount_io-0.1.0/src/cli/commands/cloud/ledger/__init__.py +0 -0
- beancount_io-0.1.0/src/cli/commands/cloud/ledger/app.py +89 -0
- beancount_io-0.1.0/src/cli/commands/cloud/ledger/manager.py +73 -0
- beancount_io-0.1.0/src/cli/commands/format.py +108 -0
- beancount_io-0.1.0/src/cli/commands/import_.py +722 -0
- beancount_io-0.1.0/src/cli/commands/init.py +176 -0
- beancount_io-0.1.0/src/cli/commands/list.py +377 -0
- beancount_io-0.1.0/src/cli/commands/query.py +108 -0
- beancount_io-0.1.0/src/cli/commands/report.py +574 -0
- beancount_io-0.1.0/src/cli/commands/upgrade.py +158 -0
- beancount_io-0.1.0/src/cli/completion.py +44 -0
- beancount_io-0.1.0/src/cli/config.py +66 -0
- beancount_io-0.1.0/src/cli/context.py +130 -0
- beancount_io-0.1.0/src/cli/csv_mapper.py +367 -0
- beancount_io-0.1.0/src/cli/directives/__init__.py +0 -0
- beancount_io-0.1.0/src/cli/directives/models.py +185 -0
- beancount_io-0.1.0/src/cli/directives/reader.py +400 -0
- beancount_io-0.1.0/src/cli/directives/writer.py +266 -0
- beancount_io-0.1.0/src/cli/errors.py +165 -0
- beancount_io-0.1.0/src/cli/ledger_write.py +575 -0
- beancount_io-0.1.0/src/cli/main.py +207 -0
- beancount_io-0.1.0/src/cli/output.py +206 -0
- beancount_io-0.1.0/src/cli/query_render.py +90 -0
- beancount_io-0.1.0/src/cli/settings.py +18 -0
- beancount_io-0.1.0/src/cli/update.py +241 -0
- beancount_io-0.1.0/src/cli/utils.py +57 -0
- beancount_io-0.1.0/src/fava/beans/abc.py +310 -0
- beancount_io-0.1.0/src/fava/beans/account.py +75 -0
- beancount_io-0.1.0/src/fava/beans/beancount_defaults.py +20 -0
- beancount_io-0.1.0/src/fava/beans/create.py +260 -0
- beancount_io-0.1.0/src/fava/beans/flags.py +19 -0
- beancount_io-0.1.0/src/fava/beans/funcs.py +29 -0
- beancount_io-0.1.0/src/fava/beans/helpers.py +43 -0
- beancount_io-0.1.0/src/fava/beans/load.py +40 -0
- beancount_io-0.1.0/src/fava/beans/prices.py +143 -0
- beancount_io-0.1.0/src/fava/beans/protocols.py +54 -0
- beancount_io-0.1.0/src/fava/beans/str.py +102 -0
- beancount_io-0.1.0/src/fava/beans/types.py +40 -0
- beancount_io-0.1.0/src/fava/core/bcio_options.py +134 -0
- beancount_io-0.1.0/src/fava/core/conversion.py +223 -0
- beancount_io-0.1.0/src/fava/core/fava_options.py +218 -0
- beancount_io-0.1.0/src/fava/core/filters.py +455 -0
- beancount_io-0.1.0/src/fava/core/group_entries.py +91 -0
- beancount_io-0.1.0/src/fava/core/inventory.py +161 -0
- beancount_io-0.1.0/src/fava/core/loader.py +93 -0
- beancount_io-0.1.0/src/fava/core/misc.py +25 -0
- beancount_io-0.1.0/src/fava/core/query.py +181 -0
- beancount_io-0.1.0/src/fava/core/tree.py +246 -0
- beancount_io-0.1.0/src/fava/file.py +10 -0
- beancount_io-0.1.0/src/fava/file_system.py +15 -0
- beancount_io-0.1.0/src/fava/helpers.py +32 -0
- beancount_io-0.1.0/src/fava/ledger.py +228 -0
- beancount_io-0.1.0/src/fava/modules/__init__.py +0 -0
- beancount_io-0.1.0/src/fava/modules/accounts.py +155 -0
- beancount_io-0.1.0/src/fava/modules/attributes.py +139 -0
- beancount_io-0.1.0/src/fava/modules/budgets.py +204 -0
- beancount_io-0.1.0/src/fava/modules/chart.py +274 -0
- beancount_io-0.1.0/src/fava/modules/financial_statements.py +175 -0
- beancount_io-0.1.0/src/fava/modules/query_shell.py +243 -0
- beancount_io-0.1.0/src/fava/modules/source_slice.py +357 -0
- beancount_io-0.1.0/src/fava/plugins/__init__.py +3 -0
- beancount_io-0.1.0/src/fava/plugins/amortize_over.py +147 -0
- beancount_io-0.1.0/src/fava/plugins/forecast.py +141 -0
- beancount_io-0.1.0/src/fava/plugins/link_documents.py +99 -0
- beancount_io-0.1.0/src/fava/plugins/tag_discovered_documents.py +44 -0
- beancount_io-0.1.0/src/fava/py.typed +0 -0
- beancount_io-0.1.0/src/fava/serialisation.py +142 -0
- beancount_io-0.1.0/src/fava/util/__init__.py +42 -0
- beancount_io-0.1.0/src/fava/util/date.py +554 -0
- beancount_io-0.1.0/src/fava/util/excel.py +111 -0
- beancount_io-0.1.0/src/fava/util/ranking.py +80 -0
- beancount_io-0.1.0/src/fava/util/sets.py +19 -0
- beancount_io-0.1.0/src/fava/util/unreachable.py +21 -0
- beancount_io-0.1.0/tests/__init__.py +0 -0
- beancount_io-0.1.0/tests/conftest.py +120 -0
- beancount_io-0.1.0/tests/fixtures/eur-precision.bean +12 -0
- beancount_io-0.1.0/tests/fixtures/invalid.bean +4 -0
- beancount_io-0.1.0/tests/fixtures/unpriced.bean +19 -0
- beancount_io-0.1.0/tests/fixtures/valid.bean +19 -0
- beancount_io-0.1.0/tests/test_ask.py +268 -0
- beancount_io-0.1.0/tests/test_bookkeeping_feedback.py +340 -0
- beancount_io-0.1.0/tests/test_cloud_generation.py +88 -0
- beancount_io-0.1.0/tests/test_command_boundaries.py +71 -0
- beancount_io-0.1.0/tests/test_command_tree.py +137 -0
- beancount_io-0.1.0/tests/test_contract.py +599 -0
- beancount_io-0.1.0/tests/test_credentials.py +123 -0
- beancount_io-0.1.0/tests/test_customer_workflows.py +480 -0
- beancount_io-0.1.0/tests/test_device_flow.py +121 -0
- beancount_io-0.1.0/tests/test_docs_examples.py +269 -0
- beancount_io-0.1.0/tests/test_fava_imports.py +28 -0
- beancount_io-0.1.0/tests/test_feedback_regressions.py +328 -0
- beancount_io-0.1.0/tests/test_forecast.py +561 -0
- beancount_io-0.1.0/tests/test_import.py +835 -0
- beancount_io-0.1.0/tests/test_input_feedback.py +251 -0
- beancount_io-0.1.0/tests/test_ledger_safety.py +448 -0
- beancount_io-0.1.0/tests/test_output.py +101 -0
- beancount_io-0.1.0/tests/test_release.py +78 -0
- beancount_io-0.1.0/tests/test_update.py +340 -0
- beancount_io-0.1.0/tests/test_upgrade.py +246 -0
- beancount_io-0.1.0/tests/test_utils.py +26 -0
- beancount_io-0.1.0/tests/test_workflow_guidance.py +235 -0
- beancount_io-0.1.0/tests/test_writer.py +269 -0
- beancount_io-0.1.0/uv.lock +2672 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Beancount.io CLI - Development Makefile
|
|
2
|
+
|
|
3
|
+
.PHONY: help install install-dev install-tool reinstall-tool dev lint deadcode deadcode-fix format format-check typecheck test codegen check-all release-check release-lock spec-check spec-sync docs docs-check
|
|
4
|
+
|
|
5
|
+
# Default target
|
|
6
|
+
help:
|
|
7
|
+
@echo "Available commands:"
|
|
8
|
+
@echo " make install - Install production dependencies"
|
|
9
|
+
@echo " make install-dev - Install all dependencies including dev"
|
|
10
|
+
@echo " make install-tool - Install CLI as a uv tool (editable)"
|
|
11
|
+
@echo " make reinstall-tool - Reinstall CLI tool"
|
|
12
|
+
@echo " make dev - Show CLI help"
|
|
13
|
+
@echo " make lint - Run ruff linter"
|
|
14
|
+
@echo " make deadcode - Detect unused Python code with Vulture"
|
|
15
|
+
@echo " make deadcode-fix - Remove fixable unused imports and variables"
|
|
16
|
+
@echo " make format - Format code with ruff"
|
|
17
|
+
@echo " make format-check - Check formatting without modifying files"
|
|
18
|
+
@echo " make typecheck - Run mypy type checks"
|
|
19
|
+
@echo " make test - Run tests with pytest across all cores"
|
|
20
|
+
@echo " make codegen - Regenerate the REST client and cloud command stubs from openapi/v1.json"
|
|
21
|
+
@echo " make spec-check - Fail if openapi/v1.json drifted from backend-cluster/idl's canonical spec"
|
|
22
|
+
@echo " make spec-sync - Refresh openapi/v1.json from the canonical spec"
|
|
23
|
+
@echo " make release-check - Validate the release tag against pyproject.toml"
|
|
24
|
+
@echo " make release-lock - Export the hash-pinned requirements.lock for a release"
|
|
25
|
+
@echo " make docs - Regenerate docs/REFERENCE.md from the command tree"
|
|
26
|
+
@echo " make docs-check - Fail if docs/REFERENCE.md drifted from the command tree"
|
|
27
|
+
@echo " make check-all - Run lint + format-check + typecheck + test + spec-check + docs-check"
|
|
28
|
+
|
|
29
|
+
install:
|
|
30
|
+
uv sync
|
|
31
|
+
|
|
32
|
+
install-dev:
|
|
33
|
+
uv sync --all-groups
|
|
34
|
+
|
|
35
|
+
install-tool:
|
|
36
|
+
uv tool install --editable .
|
|
37
|
+
|
|
38
|
+
reinstall-tool:
|
|
39
|
+
uv tool install --reinstall --editable .
|
|
40
|
+
|
|
41
|
+
dev:
|
|
42
|
+
uv run bea --help
|
|
43
|
+
|
|
44
|
+
lint:
|
|
45
|
+
uv run ruff check src/ tests/
|
|
46
|
+
|
|
47
|
+
deadcode:
|
|
48
|
+
uv run vulture src/cli src/fava --min-confidence 100 --exclude src/cli/api/rest_client/,src/cli/commands/cloud/generated/ --ignore-names repo
|
|
49
|
+
|
|
50
|
+
deadcode-fix:
|
|
51
|
+
uv run ruff check src/ tests/ --fix --select F401,F841
|
|
52
|
+
$(MAKE) deadcode
|
|
53
|
+
|
|
54
|
+
format:
|
|
55
|
+
uv run ruff format src/cli tests/
|
|
56
|
+
|
|
57
|
+
format-check:
|
|
58
|
+
uv run ruff format --check src/cli tests/
|
|
59
|
+
|
|
60
|
+
typecheck:
|
|
61
|
+
uv run mypy src/cli
|
|
62
|
+
|
|
63
|
+
test:
|
|
64
|
+
uv run pytest tests/ -n auto
|
|
65
|
+
|
|
66
|
+
test-cov:
|
|
67
|
+
uv run pytest tests/ --cov=fava --cov=cli --cov-report=term-missing --cov-report=html --cov-report=json
|
|
68
|
+
@echo "📊 Coverage report generated in htmlcov/index.html"
|
|
69
|
+
|
|
70
|
+
clean:
|
|
71
|
+
find . -type f -name "*.pyc" -delete
|
|
72
|
+
find . -type d -name "__pycache__" -delete
|
|
73
|
+
find . -type d -name "*.egg-info" -exec rm -rf {} +
|
|
74
|
+
find . -type f -name ".coverage" -delete
|
|
75
|
+
find . -type d -name "htmlcov" -exec rm -rf {} +
|
|
76
|
+
find . -type d -name ".pytest_cache" -exec rm -rf {} +
|
|
77
|
+
find . -type d -name ".mypy_cache" -exec rm -rf {} +
|
|
78
|
+
find . -type d -name ".ruff_cache" -exec rm -rf {} +
|
|
79
|
+
|
|
80
|
+
# Release plumbing. `.github/workflows/release-cli.yml` runs exactly these, so
|
|
81
|
+
# a tag that would fail in CI fails here first.
|
|
82
|
+
release-check:
|
|
83
|
+
bash scripts/release-check.sh
|
|
84
|
+
|
|
85
|
+
release-lock:
|
|
86
|
+
uv export --format requirements-txt --no-dev --no-emit-project --no-editable --hashes -o requirements.lock
|
|
87
|
+
|
|
88
|
+
# The canonical spec lives in the backend package; the CLI builds only from its
|
|
89
|
+
# own pinned copy so a `cli/` checkout is self-sufficient and reproducible.
|
|
90
|
+
CANONICAL_SPEC = ../backend-cluster/backend-v2/docs/openapi/v1.json
|
|
91
|
+
|
|
92
|
+
spec-check:
|
|
93
|
+
@diff -q $(CANONICAL_SPEC) openapi/v1.json >/dev/null \
|
|
94
|
+
|| { echo "openapi/v1.json drifted from $(CANONICAL_SPEC) — run 'make spec-sync && make codegen' and commit the diff."; exit 1; }
|
|
95
|
+
|
|
96
|
+
spec-sync:
|
|
97
|
+
cp $(CANONICAL_SPEC) openapi/v1.json
|
|
98
|
+
|
|
99
|
+
# docs/REFERENCE.md is generated from the Typer app, the same way the REST
|
|
100
|
+
# client is generated from the OpenAPI spec: change a command once and the
|
|
101
|
+
# drift gate tells you the reference needs regenerating.
|
|
102
|
+
docs:
|
|
103
|
+
uv run python scripts/gen_reference.py
|
|
104
|
+
|
|
105
|
+
docs-check:
|
|
106
|
+
uv run python scripts/gen_reference.py --check
|
|
107
|
+
|
|
108
|
+
codegen:
|
|
109
|
+
uv run openapi-python-client generate --path openapi/v1.json \
|
|
110
|
+
--output-path src/cli/api/rest_client --meta none --overwrite
|
|
111
|
+
uv run python scripts/gen_cloud_commands.py
|
|
112
|
+
uv run ruff format src/cli/api/rest_client src/cli/commands/cloud/generated
|
|
113
|
+
|
|
114
|
+
check-all: lint deadcode format-check typecheck test spec-check docs-check
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
fava-slim — third-party notices
|
|
2
|
+
===============================
|
|
3
|
+
|
|
4
|
+
fava-slim is a derivative work of Fava (https://github.com/beancount/fava),
|
|
5
|
+
stripped down to its Python core (ledger loading, account trees, financial
|
|
6
|
+
reports). Fava is distributed under the MIT license:
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2015-2016 Dominik Aumayr <dominik@aumayr.name>
|
|
9
|
+
|
|
10
|
+
The original copyright and permission notice are retained in this package's
|
|
11
|
+
LICENSE file.
|
|
12
|
+
|
|
13
|
+
Files with separate provenance
|
|
14
|
+
------------------------------
|
|
15
|
+
|
|
16
|
+
fava/plugins/amortize_over.py
|
|
17
|
+
Copyright (c) 2017 Cary Kempston
|
|
18
|
+
License: MIT (full license text retained in the file header)
|
|
19
|
+
|
|
20
|
+
fava/plugins/forecast.py
|
|
21
|
+
Copyright (c) 2019-2026 Beancount.io, MIT — an independent
|
|
22
|
+
reimplementation of the narration-marker convention established by the
|
|
23
|
+
`beancount.plugins.forecast` example plugin from Beancount v2
|
|
24
|
+
(https://github.com/beancount/beancount). It is syntax-compatible with
|
|
25
|
+
that plugin but contains none of its (GPL-2.0-only) code.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: beancount-io
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Beancount.io CLI
|
|
5
|
+
Project-URL: Homepage, https://beancount.io
|
|
6
|
+
Project-URL: Repository, https://github.com/bex-co/beancount-io
|
|
7
|
+
License: MIT
|
|
8
|
+
License-File: NOTICE.fava
|
|
9
|
+
Requires-Python: >=3.12
|
|
10
|
+
Requires-Dist: attrs>=23
|
|
11
|
+
Requires-Dist: beancount>=3.2
|
|
12
|
+
Requires-Dist: beanquery>=0.2
|
|
13
|
+
Requires-Dist: httpx>=0.27
|
|
14
|
+
Requires-Dist: ply>=3.11
|
|
15
|
+
Requires-Dist: prompt-toolkit>=3.0
|
|
16
|
+
Requires-Dist: pydantic-settings>=2.0
|
|
17
|
+
Requires-Dist: pydantic>=2.0
|
|
18
|
+
Requires-Dist: pyexcel>=0.7.3
|
|
19
|
+
Requires-Dist: python-dateutil>=2.9.0
|
|
20
|
+
Requires-Dist: python-frontmatter>=1.1
|
|
21
|
+
Requires-Dist: typer>=0.12
|
|
22
|
+
Provides-Extra: ask
|
|
23
|
+
Requires-Dist: openai>=1.0; extra == 'ask'
|
|
24
|
+
Requires-Dist: pydantic-ai>=0.3; extra == 'ask'
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# beancount-io
|
|
28
|
+
|
|
29
|
+
`bea` is the command-line interface for [Beancount.io](https://beancount.io).
|
|
30
|
+
Create and edit plain-text Beancount ledgers, import bank exports, validate
|
|
31
|
+
accounts, run BQL queries, and generate financial reports. Local bookkeeping
|
|
32
|
+
needs no Beancount.io account. Optional AI assistance and hosted ledger
|
|
33
|
+
management use your Beancount.io credentials.
|
|
34
|
+
|
|
35
|
+
The Python distribution is **`beancount-io`**; its executable is **`bea`**.
|
|
36
|
+
Run `bea --version` and `bea COMMAND --help` to check the version and options
|
|
37
|
+
you have installed.
|
|
38
|
+
|
|
39
|
+
## Contents
|
|
40
|
+
|
|
41
|
+
- [Install](#install) · [Quick start](#quick-start) · [Command map](#command-map)
|
|
42
|
+
- [Exit codes](#exit-codes) · [Learn more](#learn-more)
|
|
43
|
+
- [Development](#development) · [Releases](#releases) · [License](#license)
|
|
44
|
+
|
|
45
|
+
## Install
|
|
46
|
+
|
|
47
|
+
```bash norun
|
|
48
|
+
# Installs software; needs Homebrew or uv plus network.
|
|
49
|
+
brew install bex-co/tap/bea # macOS and Linuxbrew
|
|
50
|
+
uv tool install beancount-io # anywhere with uv and Python 3.12+
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The default installation omits AI dependencies. For `bea ask`, install the
|
|
54
|
+
extra (or run it without replacing your `bea`):
|
|
55
|
+
|
|
56
|
+
```bash norun
|
|
57
|
+
# Installs software; needs uv plus network.
|
|
58
|
+
uv tool install 'beancount-io[ask]'
|
|
59
|
+
uvx --from 'beancount-io[ask]' bea ask --help
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Quick start
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
bea --no-input init books --currency USD --date 2026-08-01 \
|
|
66
|
+
--opening-balance "Assets:Checking 1000"
|
|
67
|
+
cd books
|
|
68
|
+
bea add transaction "Coffee" --date 2026-08-02 \
|
|
69
|
+
--posting "Expenses:Dining 12.50" --posting "Assets:Checking"
|
|
70
|
+
bea check
|
|
71
|
+
bea list transaction --limit 10
|
|
72
|
+
bea report balance-sheet
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The purchase leaves **987.50 USD** in checking: the currency comes from the
|
|
76
|
+
account and Beancount fills in the balancing posting. For a bank export, see
|
|
77
|
+
the [import guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/IMPORTING.md);
|
|
78
|
+
for your first month end to end, follow the
|
|
79
|
+
[tutorial](https://github.com/bex-co/beancount-io/blob/main/cli/docs/TUTORIAL.md).
|
|
80
|
+
|
|
81
|
+
## Command map
|
|
82
|
+
|
|
83
|
+
| Command | Purpose |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
| `bea init [DIRECTORY]` | Create a local ledger with common accounts |
|
|
86
|
+
| `bea add TYPE` | Append one of eleven directive types |
|
|
87
|
+
| `bea import SOURCE` | Preview or apply a bank CSV (`--csv`) or importer (`--config`) |
|
|
88
|
+
| `bea list TYPE` | Inspect directives and filter transactions |
|
|
89
|
+
| `bea check` | Validate the complete ledger |
|
|
90
|
+
| `bea format [PATH]` | Format a file or recursively format a directory |
|
|
91
|
+
| `bea query [BQL]` | Run a query or start the interactive BQL shell |
|
|
92
|
+
| `bea report TYPE` | Overview, income statement, balance sheet, or trial balance |
|
|
93
|
+
| `bea balance [ACCOUNT…]` | Trial-balance subtrees for matching accounts |
|
|
94
|
+
| `bea ask [QUESTION]` | Ask about a local ledger through the hosted AI service |
|
|
95
|
+
| `bea cloud …` | Sign in and manage hosted ledgers |
|
|
96
|
+
| `bea upgrade [--check]` | Check for an update or invoke the owning package manager |
|
|
97
|
+
|
|
98
|
+
Global options come **before the command**; `--file` selects the root ledger:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
bea --file main.bean check
|
|
102
|
+
bea --json list transaction --limit 100
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Every flag, default, and help string is listed in the generated
|
|
106
|
+
[command reference](https://github.com/bex-co/beancount-io/blob/main/cli/docs/REFERENCE.md).
|
|
107
|
+
|
|
108
|
+
## Exit codes
|
|
109
|
+
|
|
110
|
+
| Code | Meaning |
|
|
111
|
+
| --- | --- |
|
|
112
|
+
| 0 | Success, including previews and intentional duplicate skips |
|
|
113
|
+
| 1 | Ledger, schema, formatting-check, or other runtime failure |
|
|
114
|
+
| 2 | Bad arguments, missing file or input, missing optional dependencies |
|
|
115
|
+
| 3 | Authentication or permission failure, including a read-only destination |
|
|
116
|
+
| 4 | Conflict: concurrent change, import review required, or uncertain remote write |
|
|
117
|
+
|
|
118
|
+
The [usage guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/USAGE.md#exit-codes)
|
|
119
|
+
documents the full contract: JSON error shape, cloud HTTP mapping, prompts,
|
|
120
|
+
and output exceptions.
|
|
121
|
+
|
|
122
|
+
## Learn more
|
|
123
|
+
|
|
124
|
+
- [Tutorial](https://github.com/bex-co/beancount-io/blob/main/cli/docs/TUTORIAL.md):
|
|
125
|
+
your first month, from `init` to a month-end report.
|
|
126
|
+
- [Usage](https://github.com/bex-co/beancount-io/blob/main/cli/docs/USAGE.md):
|
|
127
|
+
the contract — targets, JSON envelope, exit codes, prompts, environment.
|
|
128
|
+
- [Importing](https://github.com/bex-co/beancount-io/blob/main/cli/docs/IMPORTING.md):
|
|
129
|
+
no-code CSV import, rules, and Python importers.
|
|
130
|
+
- [Reference](https://github.com/bex-co/beancount-io/blob/main/cli/docs/REFERENCE.md):
|
|
131
|
+
every command's usage, arguments, and options, generated from the code.
|
|
132
|
+
|
|
133
|
+
## Development
|
|
134
|
+
|
|
135
|
+
```bash norun
|
|
136
|
+
# Clones the repo and syncs dependencies; needs git and network.
|
|
137
|
+
git clone https://github.com/bex-co/beancount-io.git
|
|
138
|
+
cd beancount-io/cli
|
|
139
|
+
uv sync --all-groups
|
|
140
|
+
uv run bea --help
|
|
141
|
+
make check-all
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Python 3.12+, Typer, Beancount v3, Beanquery, Pydantic, and a vendored Fava
|
|
145
|
+
reporting subset (it does not start the Fava web interface). `src/cli/` holds
|
|
146
|
+
command UX; `src/fava/` the vendored library (retain `NOTICE.fava`
|
|
147
|
+
attribution); `tests/` the pytest suite; `docs/` the guides above;
|
|
148
|
+
`openapi/v1.json` the pinned contract for hosted commands. `make check-all`
|
|
149
|
+
is the handoff gate: lint, deadcode, format-check, typecheck, test,
|
|
150
|
+
spec-check, and docs-check. Do not hand-edit generated API clients, command
|
|
151
|
+
stubs, `docs/REFERENCE.md`, or lockfiles; keep scratch files under `tmp/`.
|
|
152
|
+
See the [package guide](https://github.com/bex-co/beancount-io/blob/main/cli/CLAUDE.md)
|
|
153
|
+
for architecture boundaries and contribution rules.
|
|
154
|
+
|
|
155
|
+
## Releases
|
|
156
|
+
|
|
157
|
+
Releases ship to PyPI and Homebrew from `cli-vX.Y.Z` tags; the
|
|
158
|
+
[release guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/RELEASING.md)
|
|
159
|
+
holds the tagging procedure and one-time credentials setup.
|
|
160
|
+
|
|
161
|
+
## License
|
|
162
|
+
|
|
163
|
+
[MIT](https://github.com/bex-co/beancount-io/blob/main/LICENSE) © Beancount.io.
|
|
164
|
+
Vendored Fava attribution is preserved in
|
|
165
|
+
[NOTICE.fava](https://github.com/bex-co/beancount-io/blob/main/cli/NOTICE.fava).
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# beancount-io
|
|
2
|
+
|
|
3
|
+
`bea` is the command-line interface for [Beancount.io](https://beancount.io).
|
|
4
|
+
Create and edit plain-text Beancount ledgers, import bank exports, validate
|
|
5
|
+
accounts, run BQL queries, and generate financial reports. Local bookkeeping
|
|
6
|
+
needs no Beancount.io account. Optional AI assistance and hosted ledger
|
|
7
|
+
management use your Beancount.io credentials.
|
|
8
|
+
|
|
9
|
+
The Python distribution is **`beancount-io`**; its executable is **`bea`**.
|
|
10
|
+
Run `bea --version` and `bea COMMAND --help` to check the version and options
|
|
11
|
+
you have installed.
|
|
12
|
+
|
|
13
|
+
## Contents
|
|
14
|
+
|
|
15
|
+
- [Install](#install) · [Quick start](#quick-start) · [Command map](#command-map)
|
|
16
|
+
- [Exit codes](#exit-codes) · [Learn more](#learn-more)
|
|
17
|
+
- [Development](#development) · [Releases](#releases) · [License](#license)
|
|
18
|
+
|
|
19
|
+
## Install
|
|
20
|
+
|
|
21
|
+
```bash norun
|
|
22
|
+
# Installs software; needs Homebrew or uv plus network.
|
|
23
|
+
brew install bex-co/tap/bea # macOS and Linuxbrew
|
|
24
|
+
uv tool install beancount-io # anywhere with uv and Python 3.12+
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The default installation omits AI dependencies. For `bea ask`, install the
|
|
28
|
+
extra (or run it without replacing your `bea`):
|
|
29
|
+
|
|
30
|
+
```bash norun
|
|
31
|
+
# Installs software; needs uv plus network.
|
|
32
|
+
uv tool install 'beancount-io[ask]'
|
|
33
|
+
uvx --from 'beancount-io[ask]' bea ask --help
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Quick start
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
bea --no-input init books --currency USD --date 2026-08-01 \
|
|
40
|
+
--opening-balance "Assets:Checking 1000"
|
|
41
|
+
cd books
|
|
42
|
+
bea add transaction "Coffee" --date 2026-08-02 \
|
|
43
|
+
--posting "Expenses:Dining 12.50" --posting "Assets:Checking"
|
|
44
|
+
bea check
|
|
45
|
+
bea list transaction --limit 10
|
|
46
|
+
bea report balance-sheet
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The purchase leaves **987.50 USD** in checking: the currency comes from the
|
|
50
|
+
account and Beancount fills in the balancing posting. For a bank export, see
|
|
51
|
+
the [import guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/IMPORTING.md);
|
|
52
|
+
for your first month end to end, follow the
|
|
53
|
+
[tutorial](https://github.com/bex-co/beancount-io/blob/main/cli/docs/TUTORIAL.md).
|
|
54
|
+
|
|
55
|
+
## Command map
|
|
56
|
+
|
|
57
|
+
| Command | Purpose |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| `bea init [DIRECTORY]` | Create a local ledger with common accounts |
|
|
60
|
+
| `bea add TYPE` | Append one of eleven directive types |
|
|
61
|
+
| `bea import SOURCE` | Preview or apply a bank CSV (`--csv`) or importer (`--config`) |
|
|
62
|
+
| `bea list TYPE` | Inspect directives and filter transactions |
|
|
63
|
+
| `bea check` | Validate the complete ledger |
|
|
64
|
+
| `bea format [PATH]` | Format a file or recursively format a directory |
|
|
65
|
+
| `bea query [BQL]` | Run a query or start the interactive BQL shell |
|
|
66
|
+
| `bea report TYPE` | Overview, income statement, balance sheet, or trial balance |
|
|
67
|
+
| `bea balance [ACCOUNT…]` | Trial-balance subtrees for matching accounts |
|
|
68
|
+
| `bea ask [QUESTION]` | Ask about a local ledger through the hosted AI service |
|
|
69
|
+
| `bea cloud …` | Sign in and manage hosted ledgers |
|
|
70
|
+
| `bea upgrade [--check]` | Check for an update or invoke the owning package manager |
|
|
71
|
+
|
|
72
|
+
Global options come **before the command**; `--file` selects the root ledger:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
bea --file main.bean check
|
|
76
|
+
bea --json list transaction --limit 100
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Every flag, default, and help string is listed in the generated
|
|
80
|
+
[command reference](https://github.com/bex-co/beancount-io/blob/main/cli/docs/REFERENCE.md).
|
|
81
|
+
|
|
82
|
+
## Exit codes
|
|
83
|
+
|
|
84
|
+
| Code | Meaning |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| 0 | Success, including previews and intentional duplicate skips |
|
|
87
|
+
| 1 | Ledger, schema, formatting-check, or other runtime failure |
|
|
88
|
+
| 2 | Bad arguments, missing file or input, missing optional dependencies |
|
|
89
|
+
| 3 | Authentication or permission failure, including a read-only destination |
|
|
90
|
+
| 4 | Conflict: concurrent change, import review required, or uncertain remote write |
|
|
91
|
+
|
|
92
|
+
The [usage guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/USAGE.md#exit-codes)
|
|
93
|
+
documents the full contract: JSON error shape, cloud HTTP mapping, prompts,
|
|
94
|
+
and output exceptions.
|
|
95
|
+
|
|
96
|
+
## Learn more
|
|
97
|
+
|
|
98
|
+
- [Tutorial](https://github.com/bex-co/beancount-io/blob/main/cli/docs/TUTORIAL.md):
|
|
99
|
+
your first month, from `init` to a month-end report.
|
|
100
|
+
- [Usage](https://github.com/bex-co/beancount-io/blob/main/cli/docs/USAGE.md):
|
|
101
|
+
the contract — targets, JSON envelope, exit codes, prompts, environment.
|
|
102
|
+
- [Importing](https://github.com/bex-co/beancount-io/blob/main/cli/docs/IMPORTING.md):
|
|
103
|
+
no-code CSV import, rules, and Python importers.
|
|
104
|
+
- [Reference](https://github.com/bex-co/beancount-io/blob/main/cli/docs/REFERENCE.md):
|
|
105
|
+
every command's usage, arguments, and options, generated from the code.
|
|
106
|
+
|
|
107
|
+
## Development
|
|
108
|
+
|
|
109
|
+
```bash norun
|
|
110
|
+
# Clones the repo and syncs dependencies; needs git and network.
|
|
111
|
+
git clone https://github.com/bex-co/beancount-io.git
|
|
112
|
+
cd beancount-io/cli
|
|
113
|
+
uv sync --all-groups
|
|
114
|
+
uv run bea --help
|
|
115
|
+
make check-all
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Python 3.12+, Typer, Beancount v3, Beanquery, Pydantic, and a vendored Fava
|
|
119
|
+
reporting subset (it does not start the Fava web interface). `src/cli/` holds
|
|
120
|
+
command UX; `src/fava/` the vendored library (retain `NOTICE.fava`
|
|
121
|
+
attribution); `tests/` the pytest suite; `docs/` the guides above;
|
|
122
|
+
`openapi/v1.json` the pinned contract for hosted commands. `make check-all`
|
|
123
|
+
is the handoff gate: lint, deadcode, format-check, typecheck, test,
|
|
124
|
+
spec-check, and docs-check. Do not hand-edit generated API clients, command
|
|
125
|
+
stubs, `docs/REFERENCE.md`, or lockfiles; keep scratch files under `tmp/`.
|
|
126
|
+
See the [package guide](https://github.com/bex-co/beancount-io/blob/main/cli/CLAUDE.md)
|
|
127
|
+
for architecture boundaries and contribution rules.
|
|
128
|
+
|
|
129
|
+
## Releases
|
|
130
|
+
|
|
131
|
+
Releases ship to PyPI and Homebrew from `cli-vX.Y.Z` tags; the
|
|
132
|
+
[release guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/RELEASING.md)
|
|
133
|
+
holds the tagging procedure and one-time credentials setup.
|
|
134
|
+
|
|
135
|
+
## License
|
|
136
|
+
|
|
137
|
+
[MIT](https://github.com/bex-co/beancount-io/blob/main/LICENSE) © Beancount.io.
|
|
138
|
+
Vendored Fava attribution is preserved in
|
|
139
|
+
[NOTICE.fava](https://github.com/bex-co/beancount-io/blob/main/cli/NOTICE.fava).
|