ynab-cli 0.4.0__tar.gz → 0.5.1__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.
- ynab_cli-0.5.1/.github/dependabot.yml +15 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/.github/workflows/pr.yml +3 -1
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/.gitignore +3 -1
- ynab_cli-0.5.1/CHANGELOG.md +18 -0
- ynab_cli-0.5.1/Makefile +45 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/PKG-INFO +15 -1
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/docs/index.md +1 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/mkdocs.yml +1 -1
- ynab_cli-0.5.1/pyproject.toml +150 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/cli.py +1 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/uv.lock +22 -22
- ynab_cli-0.4.0/CHANGELOG.md +0 -41
- ynab_cli-0.4.0/Makefile +0 -30
- ynab_cli-0.4.0/pyproject.toml +0 -117
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/.env-sample +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/.github/FUNDING.yml +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/.github/workflows/publish-to-pypi.yml +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/.python-version +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/LICENSE.md +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/README.md +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/docs/transaction_rules.md +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/rich/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/rich/io.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/textual/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/textual/io.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/accounts/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/accounts/create_account.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/accounts/get_account_by_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/accounts/get_accounts.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/budgets/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/budgets/get_budget_by_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/budgets/get_budget_settings_by_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/budgets/get_budgets.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/get_categories.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/get_category_by_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/get_month_category_by_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/update_category.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/update_month_category.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/months/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/months/get_budget_month.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/months/get_budget_months.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/payee_locations/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/payee_locations/get_payee_location_by_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/payee_locations/get_payee_locations.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/payee_locations/get_payee_locations_by_payee.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/payees/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/payees/get_payee_by_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/payees/get_payees.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/payees/update_payee.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/create_scheduled_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/delete_scheduled_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/get_scheduled_transaction_by_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/get_scheduled_transactions.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/update_scheduled_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/create_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/delete_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/get_transaction_by_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions_by_account.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions_by_category.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions_by_month.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions_by_payee.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/import_transactions.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/update_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/transactions/update_transactions.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/user/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/user/get_user.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/client.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/errors.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/account.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/account_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/account_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/account_type.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/accounts_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/accounts_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/budget_detail.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/budget_detail_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/budget_detail_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/budget_settings.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/budget_settings_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/budget_settings_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/budget_summary.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/budget_summary_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/budget_summary_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/bulk_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/bulk_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/bulk_response_data_bulk.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/bulk_transactions.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/categories_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/categories_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/category.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/category_goal_type_type_1.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/category_goal_type_type_2_type_1.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/category_goal_type_type_3_type_1.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/category_group.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/category_group_with_categories.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/category_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/category_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/currency_format_type_0.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/date_format_type_0.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/error_detail.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/error_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/existing_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/get_transactions_by_account_type.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/get_transactions_by_category_type.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/get_transactions_by_month_type.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/get_transactions_by_payee_type.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/get_transactions_type.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/hybrid_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/hybrid_transaction_type.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/hybrid_transactions_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/hybrid_transactions_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/loan_account_periodic_value_type_0.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/month_detail.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/month_detail_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/month_detail_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/month_summaries_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/month_summaries_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/month_summary.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/new_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/patch_category_wrapper.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/patch_month_category_wrapper.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/patch_payee_wrapper.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/patch_transactions_wrapper.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payee.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payee_location.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payee_location_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payee_location_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payee_locations_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payee_locations_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payee_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payee_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payees_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/payees_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/post_account_wrapper.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/post_scheduled_transaction_wrapper.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/post_transactions_wrapper.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/put_scheduled_transaction_wrapper.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/put_transaction_wrapper.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_account.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_category.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_category_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_category_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_month_category.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_payee.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_payee_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_payee_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_scheduled_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_sub_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_transaction_with_id_or_import_id.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_transaction_with_optional_fields.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_transactions_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/save_transactions_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/scheduled_sub_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_detail.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_frequency.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_summary.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_summary_frequency.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/scheduled_transactions_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/scheduled_transactions_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/sub_transaction.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_cleared_status.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_detail.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_flag_color_type_1.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_flag_color_type_2_type_1.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_flag_color_type_3_type_1.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_summary.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_1.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_2_type_1.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_3_type_1.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transactions_import_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transactions_import_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transactions_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/transactions_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/user.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/user_response.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/models/user_response_data.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/types.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/util.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/constants.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/models/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/models/rules.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/ports/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/ports/io.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/settings.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/use_cases/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/use_cases/budgets.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/use_cases/categories.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/use_cases/payees.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/domain/use_cases/transactions.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/click/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/click/cli.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/click/commands/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/click/commands/budgets.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/click/commands/categories.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/click/commands/payees.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/click/commands/rich/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/click/commands/rich/progress_table.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/click/commands/transactions.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/constants.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/textual/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/textual/app.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/textual/app.tcss +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/textual/cli.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/textual/widgets/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/textual/widgets/categories.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/textual/widgets/payees.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/host/textual/widgets/transactions.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/py.typed +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/factories/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/factories/ynab.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/unit/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/unit/conftest.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/unit/domain/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/unit/domain/use_cases/__init__.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/unit/domain/use_cases/test_categories.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/unit/domain/use_cases/test_payees.py +0 -0
- {ynab_cli-0.4.0 → ynab_cli-0.5.1}/tests/unit/domain/use_cases/test_transactions.py +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
|
3
|
+
# Please see the documentation for all configuration options:
|
|
4
|
+
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
|
5
|
+
|
|
6
|
+
version: 2
|
|
7
|
+
updates:
|
|
8
|
+
- package-ecosystem: "uv"
|
|
9
|
+
directory: "/"
|
|
10
|
+
schedule:
|
|
11
|
+
interval: "weekly"
|
|
12
|
+
commit-message:
|
|
13
|
+
prefix: "fix"
|
|
14
|
+
prefix-development: "build"
|
|
15
|
+
include: "scope"
|
|
@@ -19,4 +19,6 @@ jobs:
|
|
|
19
19
|
- run: uv run ruff format --check . # check formatting is correct
|
|
20
20
|
- run: uv run ruff check --no-fix . # and linting
|
|
21
21
|
- run: uv run mypy . # typecheck too
|
|
22
|
-
- run: uv run pytest tests # then run your tests!
|
|
22
|
+
- run: uv run pytest tests # then run your tests!
|
|
23
|
+
- run: uv build # make sure the package builds
|
|
24
|
+
- run: uv run mkdocs build # make sure the docs build
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## v0.5.1 (2025-06-07)
|
|
9
|
+
|
|
10
|
+
### Fix
|
|
11
|
+
|
|
12
|
+
- set dependabot commit message prefix
|
|
13
|
+
|
|
14
|
+
## v0.5.0 (2025-06-06)
|
|
15
|
+
|
|
16
|
+
### Feat
|
|
17
|
+
|
|
18
|
+
- implement initial cli
|
ynab_cli-0.5.1/Makefile
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
.PHONY: lint test clean version
|
|
2
|
+
|
|
3
|
+
.venv: pyproject.toml # the python virtual environment
|
|
4
|
+
uv sync
|
|
5
|
+
touch .venv
|
|
6
|
+
|
|
7
|
+
lint: .venv # run linters and type checkers
|
|
8
|
+
uv run ruff format .
|
|
9
|
+
uv run ruff check .
|
|
10
|
+
uv run mypy .
|
|
11
|
+
|
|
12
|
+
test: .venv lint # run tests with coverage
|
|
13
|
+
uv run pytest --cov=src tests
|
|
14
|
+
|
|
15
|
+
clean: # clean up build artifacts and caches
|
|
16
|
+
rm -f .coverage
|
|
17
|
+
rm -rf dist
|
|
18
|
+
rm -rf htmlcov
|
|
19
|
+
rm -rf site
|
|
20
|
+
find . -type f -name .DS_Store | xargs rm -rf
|
|
21
|
+
find . -type d -name __pycache__ | xargs rm -rf
|
|
22
|
+
find . -type d -name .mypy_cache | xargs rm -rf
|
|
23
|
+
find . -type d -name .pytest_cache | xargs rm -rf
|
|
24
|
+
find . -type d -name .ruff_cache | xargs rm -rf
|
|
25
|
+
find . -type d -empty -delete
|
|
26
|
+
|
|
27
|
+
ynab-sdk: # regenerate the YNAB SDK from the OpenAPI spec
|
|
28
|
+
rm -rf ./src/ynab_cli/adapters/ynab
|
|
29
|
+
mkdir -p ./src/ynab_cli/adapters/ynab
|
|
30
|
+
uvx openapi-python-client generate --meta none --url https://api.ynab.com/papi/open_api_spec.yaml --output-path ./src/ynab_cli/adapters/ynab --overwrite
|
|
31
|
+
|
|
32
|
+
dist: clean # build the distribution package
|
|
33
|
+
uv build
|
|
34
|
+
|
|
35
|
+
site: clean # build the documentation site
|
|
36
|
+
uv run mkdocs build
|
|
37
|
+
|
|
38
|
+
site-serve: clean # serve the documentation site locally
|
|
39
|
+
uv run mkdocs serve
|
|
40
|
+
|
|
41
|
+
site-gh: clean # deploy the documentation site to GitHub Pages
|
|
42
|
+
uv run mkdocs gh-deploy
|
|
43
|
+
|
|
44
|
+
version: clean # update the version in pyproject.toml and create a new tag
|
|
45
|
+
cz bump
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ynab-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: YNAB Command Line Interface
|
|
5
|
+
Project-URL: Changelog, https://github.com/jeffsawatzky/ynab-cli/blob/main/CHANGELOG.md
|
|
6
|
+
Project-URL: Documentation, https://jeffsawatzky.github.io/ynab-cli/
|
|
7
|
+
Project-URL: Funding, https://github.com/sponsors/jeffsawatzky
|
|
8
|
+
Project-URL: Releases, https://github.com/jeffsawatzky/ynab-cli/releases
|
|
9
|
+
Project-URL: Source, https://github.com/jeffsawatzky/ynab-cli
|
|
5
10
|
Author: Jeff Sawatzky
|
|
11
|
+
License-Expression: MIT
|
|
6
12
|
License-File: LICENSE.md
|
|
13
|
+
Keywords: budget,cli,click,textual,ynab
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
20
|
+
Classifier: Topic :: Utilities
|
|
7
21
|
Requires-Python: >=3.11
|
|
8
22
|
Requires-Dist: attrs~=25.3
|
|
9
23
|
Requires-Dist: click-default-group~=1.2
|
|
@@ -11,6 +11,7 @@ This is a simple cli/tui application written in python to help manage your YNAB
|
|
|
11
11
|
Developer access tokens are rate limited to 200 requests per hour. Some of the commands below will provide you an opportunity to enter a new developer access token when the current one has exceeded it's limit. It also seems like there is a limit to how many developer access tokens you can create from the developer settings UI.
|
|
12
12
|
|
|
13
13
|
- Your YNAB budget ID. Once you have `uv` and your `access token` you can list your budgets by running:
|
|
14
|
+
|
|
14
15
|
```sh
|
|
15
16
|
$ uvx ynab-cli run --access-token your_access_token budgets list-all
|
|
16
17
|
```
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "ynab-cli"
|
|
3
|
+
version = "0.5.1"
|
|
4
|
+
description = "YNAB Command Line Interface"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.11"
|
|
7
|
+
license = "MIT"
|
|
8
|
+
|
|
9
|
+
license-files = [
|
|
10
|
+
"LICENSE.md"
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
authors = [
|
|
14
|
+
{ name = "Jeff Sawatzky" }
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
keywords = [
|
|
18
|
+
"ynab",
|
|
19
|
+
"cli",
|
|
20
|
+
"textual",
|
|
21
|
+
"click",
|
|
22
|
+
"budget",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
classifiers = [
|
|
26
|
+
"Development Status :: 4 - Beta",
|
|
27
|
+
"Intended Audience :: End Users/Desktop",
|
|
28
|
+
"Topic :: Utilities",
|
|
29
|
+
"Topic :: Office/Business :: Financial",
|
|
30
|
+
"Programming Language :: Python :: 3.11",
|
|
31
|
+
"Programming Language :: Python :: 3.12",
|
|
32
|
+
"Programming Language :: Python :: 3.13",
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
dependencies = [
|
|
36
|
+
"attrs~=25.3",
|
|
37
|
+
"click-default-group~=1.2",
|
|
38
|
+
"click~=8.2",
|
|
39
|
+
"httpx~=0.28",
|
|
40
|
+
"python-dotenv~=1.1",
|
|
41
|
+
"rapidfuzz~=3.13",
|
|
42
|
+
"rich~=14.0",
|
|
43
|
+
"rule-engine~=4.5",
|
|
44
|
+
"textual-fspicker~=0.4",
|
|
45
|
+
"textual~=3.3",
|
|
46
|
+
"typing-extensions~=4.14",
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
[project.urls]
|
|
50
|
+
Changelog = "https://github.com/jeffsawatzky/ynab-cli/blob/main/CHANGELOG.md"
|
|
51
|
+
Documentation = "https://jeffsawatzky.github.io/ynab-cli/"
|
|
52
|
+
Funding = "https://github.com/sponsors/jeffsawatzky"
|
|
53
|
+
Releases = "https://github.com/jeffsawatzky/ynab-cli/releases"
|
|
54
|
+
Source = "https://github.com/jeffsawatzky/ynab-cli"
|
|
55
|
+
|
|
56
|
+
[project.scripts]
|
|
57
|
+
ynab-cli = "ynab_cli.host.cli:main"
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
[dependency-groups]
|
|
61
|
+
dev = [
|
|
62
|
+
"factory-boy>=3.3.3",
|
|
63
|
+
"mkdocs-click>=0.9.0",
|
|
64
|
+
"mkdocs-material>=9.6.14",
|
|
65
|
+
"mkdocs>=1.6.1",
|
|
66
|
+
"mypy>=1.16.0",
|
|
67
|
+
"pytest-asyncio>=1.0.0",
|
|
68
|
+
"pytest-cov>=6.1.1",
|
|
69
|
+
"pytest-mock>=3.14.1",
|
|
70
|
+
"pytest>=8.4.0",
|
|
71
|
+
"ruff>=0.11.12",
|
|
72
|
+
"textual-dev>=1.7.0",
|
|
73
|
+
"types-python-dateutil>=2.9.0.20250516",
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
[tool.mypy]
|
|
78
|
+
python_version = "3.11"
|
|
79
|
+
exclude = [
|
|
80
|
+
'^tests/.*\.py$'
|
|
81
|
+
]
|
|
82
|
+
pretty = true
|
|
83
|
+
show_column_numbers = true
|
|
84
|
+
show_error_codes = true
|
|
85
|
+
show_error_context = true
|
|
86
|
+
strict = true
|
|
87
|
+
warn_unreachable = true
|
|
88
|
+
enable_error_code = [
|
|
89
|
+
"explicit-override",
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
[[tool.mypy.overrides]]
|
|
93
|
+
module = [
|
|
94
|
+
"click_default_group.*",
|
|
95
|
+
"factory.*",
|
|
96
|
+
"rule_engine.*",
|
|
97
|
+
]
|
|
98
|
+
ignore_missing_imports = true
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
[tool.ruff]
|
|
102
|
+
fix = true
|
|
103
|
+
line-length = 120
|
|
104
|
+
target-version = "py311"
|
|
105
|
+
|
|
106
|
+
[tool.ruff.lint]
|
|
107
|
+
extend-select = [
|
|
108
|
+
"W", # warnings
|
|
109
|
+
"I", # isort
|
|
110
|
+
"C90", # mccabe
|
|
111
|
+
"N", # pep8-naming
|
|
112
|
+
"UP", # pyupgrade
|
|
113
|
+
"S", # flake8-bandit
|
|
114
|
+
"B", # flake8-bugbear
|
|
115
|
+
"A", # flake8-builtins
|
|
116
|
+
"DTZ", # flake8-datetimez
|
|
117
|
+
"PT", # flake8-pytest-style
|
|
118
|
+
"TID", # flake8-tidy-imports
|
|
119
|
+
"RUF", # ruff specific rules
|
|
120
|
+
]
|
|
121
|
+
extend-ignore = [
|
|
122
|
+
"S110", # `try`-`except`-`pass` detected
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
[tool.ruff.lint.per-file-ignores]
|
|
126
|
+
"tests/**/*.py" = ["S"]
|
|
127
|
+
|
|
128
|
+
[tool.ruff.lint.isort]
|
|
129
|
+
known-first-party = ["ynab_cli", "tests"]
|
|
130
|
+
|
|
131
|
+
[tool.ruff.lint.mccabe]
|
|
132
|
+
max-complexity = 70
|
|
133
|
+
|
|
134
|
+
[tool.ruff.lint.flake8-builtins]
|
|
135
|
+
builtins-ignorelist = ["type", "id"]
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
[tool.commitizen]
|
|
139
|
+
name = "cz_conventional_commits"
|
|
140
|
+
annotated_tag = true
|
|
141
|
+
tag_format = "v$version"
|
|
142
|
+
version_scheme = "pep440"
|
|
143
|
+
version_provider = "uv"
|
|
144
|
+
update_changelog_on_bump = true
|
|
145
|
+
major_version_zero = true
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
[build-system]
|
|
149
|
+
requires = ["hatchling"]
|
|
150
|
+
build-backend = "hatchling.build"
|
|
@@ -10,6 +10,7 @@ from ynab_cli.host.textual.cli import tui
|
|
|
10
10
|
@click.group(cls=DefaultGroup, default="tui", default_if_no_args=True)
|
|
11
11
|
@click.option("--dry-run", is_flag=True, default=False, help="Run without making any changes.")
|
|
12
12
|
@click.option("--debug", is_flag=True, default=False, help="Enable debug mode for more verbose output.")
|
|
13
|
+
@click.version_option()
|
|
13
14
|
@click.pass_context
|
|
14
15
|
def cli(
|
|
15
16
|
ctx: click.Context,
|
|
@@ -1197,27 +1197,27 @@ wheels = [
|
|
|
1197
1197
|
|
|
1198
1198
|
[[package]]
|
|
1199
1199
|
name = "ruff"
|
|
1200
|
-
version = "0.11.
|
|
1201
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1202
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1203
|
-
wheels = [
|
|
1204
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1205
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1206
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1207
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1208
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1209
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1210
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1211
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1212
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1213
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1214
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1215
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1216
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1217
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1218
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1219
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1220
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1200
|
+
version = "0.11.13"
|
|
1201
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1202
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ed/da/9c6f995903b4d9474b39da91d2d626659af3ff1eeb43e9ae7c119349dba6/ruff-0.11.13.tar.gz", hash = "sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514", size = 4282054, upload-time = "2025-06-05T21:00:15.721Z" }
|
|
1203
|
+
wheels = [
|
|
1204
|
+
{ url = "https://files.pythonhosted.org/packages/7d/ce/a11d381192966e0b4290842cc8d4fac7dc9214ddf627c11c1afff87da29b/ruff-0.11.13-py3-none-linux_armv6l.whl", hash = "sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46", size = 10292516, upload-time = "2025-06-05T20:59:32.944Z" },
|
|
1205
|
+
{ url = "https://files.pythonhosted.org/packages/78/db/87c3b59b0d4e753e40b6a3b4a2642dfd1dcaefbff121ddc64d6c8b47ba00/ruff-0.11.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48", size = 11106083, upload-time = "2025-06-05T20:59:37.03Z" },
|
|
1206
|
+
{ url = "https://files.pythonhosted.org/packages/77/79/d8cec175856ff810a19825d09ce700265f905c643c69f45d2b737e4a470a/ruff-0.11.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b", size = 10436024, upload-time = "2025-06-05T20:59:39.741Z" },
|
|
1207
|
+
{ url = "https://files.pythonhosted.org/packages/8b/5b/f6d94f2980fa1ee854b41568368a2e1252681b9238ab2895e133d303538f/ruff-0.11.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a", size = 10646324, upload-time = "2025-06-05T20:59:42.185Z" },
|
|
1208
|
+
{ url = "https://files.pythonhosted.org/packages/6c/9c/b4c2acf24ea4426016d511dfdc787f4ce1ceb835f3c5fbdbcb32b1c63bda/ruff-0.11.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc", size = 10174416, upload-time = "2025-06-05T20:59:44.319Z" },
|
|
1209
|
+
{ url = "https://files.pythonhosted.org/packages/f3/10/e2e62f77c65ede8cd032c2ca39c41f48feabedb6e282bfd6073d81bb671d/ruff-0.11.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629", size = 11724197, upload-time = "2025-06-05T20:59:46.935Z" },
|
|
1210
|
+
{ url = "https://files.pythonhosted.org/packages/bb/f0/466fe8469b85c561e081d798c45f8a1d21e0b4a5ef795a1d7f1a9a9ec182/ruff-0.11.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933", size = 12511615, upload-time = "2025-06-05T20:59:49.534Z" },
|
|
1211
|
+
{ url = "https://files.pythonhosted.org/packages/17/0e/cefe778b46dbd0cbcb03a839946c8f80a06f7968eb298aa4d1a4293f3448/ruff-0.11.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165", size = 12117080, upload-time = "2025-06-05T20:59:51.654Z" },
|
|
1212
|
+
{ url = "https://files.pythonhosted.org/packages/5d/2c/caaeda564cbe103bed145ea557cb86795b18651b0f6b3ff6a10e84e5a33f/ruff-0.11.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71", size = 11326315, upload-time = "2025-06-05T20:59:54.469Z" },
|
|
1213
|
+
{ url = "https://files.pythonhosted.org/packages/75/f0/782e7d681d660eda8c536962920c41309e6dd4ebcea9a2714ed5127d44bd/ruff-0.11.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9", size = 11555640, upload-time = "2025-06-05T20:59:56.986Z" },
|
|
1214
|
+
{ url = "https://files.pythonhosted.org/packages/5d/d4/3d580c616316c7f07fb3c99dbecfe01fbaea7b6fd9a82b801e72e5de742a/ruff-0.11.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc", size = 10507364, upload-time = "2025-06-05T20:59:59.154Z" },
|
|
1215
|
+
{ url = "https://files.pythonhosted.org/packages/5a/dc/195e6f17d7b3ea6b12dc4f3e9de575db7983db187c378d44606e5d503319/ruff-0.11.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7", size = 10141462, upload-time = "2025-06-05T21:00:01.481Z" },
|
|
1216
|
+
{ url = "https://files.pythonhosted.org/packages/f4/8e/39a094af6967faa57ecdeacb91bedfb232474ff8c3d20f16a5514e6b3534/ruff-0.11.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432", size = 11121028, upload-time = "2025-06-05T21:00:04.06Z" },
|
|
1217
|
+
{ url = "https://files.pythonhosted.org/packages/5a/c0/b0b508193b0e8a1654ec683ebab18d309861f8bd64e3a2f9648b80d392cb/ruff-0.11.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492", size = 11602992, upload-time = "2025-06-05T21:00:06.249Z" },
|
|
1218
|
+
{ url = "https://files.pythonhosted.org/packages/7c/91/263e33ab93ab09ca06ce4f8f8547a858cc198072f873ebc9be7466790bae/ruff-0.11.13-py3-none-win32.whl", hash = "sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250", size = 10474944, upload-time = "2025-06-05T21:00:08.459Z" },
|
|
1219
|
+
{ url = "https://files.pythonhosted.org/packages/46/f4/7c27734ac2073aae8efb0119cae6931b6fb48017adf048fdf85c19337afc/ruff-0.11.13-py3-none-win_amd64.whl", hash = "sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3", size = 11548669, upload-time = "2025-06-05T21:00:11.147Z" },
|
|
1220
|
+
{ url = "https://files.pythonhosted.org/packages/ec/bf/b273dd11673fed8a6bd46032c0ea2a04b2ac9bfa9c628756a5856ba113b0/ruff-0.11.13-py3-none-win_arm64.whl", hash = "sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b", size = 10683928, upload-time = "2025-06-05T21:00:13.758Z" },
|
|
1221
1221
|
]
|
|
1222
1222
|
|
|
1223
1223
|
[[package]]
|
|
@@ -1503,7 +1503,7 @@ wheels = [
|
|
|
1503
1503
|
|
|
1504
1504
|
[[package]]
|
|
1505
1505
|
name = "ynab-cli"
|
|
1506
|
-
version = "0.
|
|
1506
|
+
version = "0.5.1"
|
|
1507
1507
|
source = { editable = "." }
|
|
1508
1508
|
dependencies = [
|
|
1509
1509
|
{ name = "attrs" },
|
ynab_cli-0.4.0/CHANGELOG.md
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
## 0.2.0 (2025-06-06)
|
|
2
|
-
|
|
3
|
-
### BREAKING CHANGE
|
|
4
|
-
|
|
5
|
-
- changes the way the commands need to be run. You now need to specify the "run" command before any of the subcommands
|
|
6
|
-
|
|
7
|
-
### Feat
|
|
8
|
-
|
|
9
|
-
- added a feature to prefix unused payees to make them easier to find and delete in ynab
|
|
10
|
-
- added a list all command to payees
|
|
11
|
-
- add a textual based tui
|
|
12
|
-
- use rich for better user feedback
|
|
13
|
-
- implement initial cli
|
|
14
|
-
|
|
15
|
-
### Refactor
|
|
16
|
-
|
|
17
|
-
- cleaned up some code, sorted lists, and improved the file selector
|
|
18
|
-
|
|
19
|
-
## v0.4.0 (2025-06-06)
|
|
20
|
-
|
|
21
|
-
### Feat
|
|
22
|
-
|
|
23
|
-
- **budgets**: added a command to list all budgets
|
|
24
|
-
|
|
25
|
-
## v0.3.0 (2025-06-06)
|
|
26
|
-
|
|
27
|
-
### BREAKING CHANGE
|
|
28
|
-
|
|
29
|
-
- changes the way the commands need to be run. You now need to specify the "run" command before any of the subcommands
|
|
30
|
-
|
|
31
|
-
### Feat
|
|
32
|
-
|
|
33
|
-
- added a feature to prefix unused payees to make them easier to find and delete in ynab
|
|
34
|
-
- added a list all command to payees
|
|
35
|
-
- add a textual based tui
|
|
36
|
-
- use rich for better user feedback
|
|
37
|
-
- implement initial cli
|
|
38
|
-
|
|
39
|
-
### Refactor
|
|
40
|
-
|
|
41
|
-
- cleaned up some code, sorted lists, and improved the file selector
|
ynab_cli-0.4.0/Makefile
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
.PHONY: lint test clean
|
|
2
|
-
|
|
3
|
-
.venv: pyproject.toml
|
|
4
|
-
uv sync
|
|
5
|
-
touch .venv
|
|
6
|
-
|
|
7
|
-
lint: .venv
|
|
8
|
-
uv run ruff format .
|
|
9
|
-
uv run ruff check .
|
|
10
|
-
uv run mypy .
|
|
11
|
-
|
|
12
|
-
test: .venv lint
|
|
13
|
-
uv run pytest --cov=src tests
|
|
14
|
-
|
|
15
|
-
clean:
|
|
16
|
-
rm -f .coverage
|
|
17
|
-
rm -rf dist
|
|
18
|
-
rm -rf htmlcov
|
|
19
|
-
rm -rf site
|
|
20
|
-
find . -type f -name .DS_Store | xargs rm -rf
|
|
21
|
-
find . -type d -name __pycache__ | xargs rm -rf
|
|
22
|
-
find . -type d -name .mypy_cache | xargs rm -rf
|
|
23
|
-
find . -type d -name .pytest_cache | xargs rm -rf
|
|
24
|
-
find . -type d -name .ruff_cache | xargs rm -rf
|
|
25
|
-
find . -type d -empty -delete
|
|
26
|
-
|
|
27
|
-
ynab-sdk:
|
|
28
|
-
rm -rf ./src/ynab_cli/adapters/ynab
|
|
29
|
-
mkdir -p ./src/ynab_cli/adapters/ynab
|
|
30
|
-
uvx openapi-python-client generate --meta none --url https://api.ynab.com/papi/open_api_spec.yaml --output-path ./src/ynab_cli/adapters/ynab --overwrite
|
ynab_cli-0.4.0/pyproject.toml
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "ynab-cli"
|
|
3
|
-
version = "0.4.0"
|
|
4
|
-
description = "YNAB Command Line Interface"
|
|
5
|
-
readme = "README.md"
|
|
6
|
-
authors = [
|
|
7
|
-
{ name = "Jeff Sawatzky" }
|
|
8
|
-
]
|
|
9
|
-
requires-python = ">=3.11"
|
|
10
|
-
dependencies = [
|
|
11
|
-
"attrs~=25.3",
|
|
12
|
-
"click-default-group~=1.2",
|
|
13
|
-
"click~=8.2",
|
|
14
|
-
"httpx~=0.28",
|
|
15
|
-
"python-dotenv~=1.1",
|
|
16
|
-
"rapidfuzz~=3.13",
|
|
17
|
-
"rich~=14.0",
|
|
18
|
-
"rule-engine~=4.5",
|
|
19
|
-
"textual-fspicker~=0.4",
|
|
20
|
-
"textual~=3.3",
|
|
21
|
-
"typing-extensions~=4.14",
|
|
22
|
-
]
|
|
23
|
-
|
|
24
|
-
[project.scripts]
|
|
25
|
-
ynab-cli = "ynab_cli.host.cli:main"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
[dependency-groups]
|
|
29
|
-
dev = [
|
|
30
|
-
"factory-boy>=3.3.3",
|
|
31
|
-
"mkdocs-click>=0.9.0",
|
|
32
|
-
"mkdocs-material>=9.6.14",
|
|
33
|
-
"mkdocs>=1.6.1",
|
|
34
|
-
"mypy>=1.16.0",
|
|
35
|
-
"pytest-asyncio>=1.0.0",
|
|
36
|
-
"pytest-cov>=6.1.1",
|
|
37
|
-
"pytest-mock>=3.14.1",
|
|
38
|
-
"pytest>=8.4.0",
|
|
39
|
-
"ruff>=0.11.12",
|
|
40
|
-
"textual-dev>=1.7.0",
|
|
41
|
-
"types-python-dateutil>=2.9.0.20250516",
|
|
42
|
-
]
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
[tool.mypy]
|
|
46
|
-
python_version = "3.11"
|
|
47
|
-
exclude = [
|
|
48
|
-
'^tests/.*\.py$'
|
|
49
|
-
]
|
|
50
|
-
pretty = true
|
|
51
|
-
show_column_numbers = true
|
|
52
|
-
show_error_codes = true
|
|
53
|
-
show_error_context = true
|
|
54
|
-
strict = true
|
|
55
|
-
warn_unreachable = true
|
|
56
|
-
enable_error_code = [
|
|
57
|
-
"explicit-override",
|
|
58
|
-
]
|
|
59
|
-
|
|
60
|
-
[[tool.mypy.overrides]]
|
|
61
|
-
module = [
|
|
62
|
-
"click_default_group.*",
|
|
63
|
-
"factory.*",
|
|
64
|
-
"rule_engine.*",
|
|
65
|
-
]
|
|
66
|
-
ignore_missing_imports = true
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
[tool.ruff]
|
|
70
|
-
fix = true
|
|
71
|
-
line-length = 120
|
|
72
|
-
target-version = "py311"
|
|
73
|
-
|
|
74
|
-
[tool.ruff.lint]
|
|
75
|
-
extend-select = [
|
|
76
|
-
"W", # warnings
|
|
77
|
-
"I", # isort
|
|
78
|
-
"C90", # mccabe
|
|
79
|
-
"N", # pep8-naming
|
|
80
|
-
"UP", # pyupgrade
|
|
81
|
-
"S", # flake8-bandit
|
|
82
|
-
"B", # flake8-bugbear
|
|
83
|
-
"A", # flake8-builtins
|
|
84
|
-
"DTZ", # flake8-datetimez
|
|
85
|
-
"PT", # flake8-pytest-style
|
|
86
|
-
"TID", # flake8-tidy-imports
|
|
87
|
-
"RUF", # ruff specific rules
|
|
88
|
-
]
|
|
89
|
-
extend-ignore = [
|
|
90
|
-
"S110", # `try`-`except`-`pass` detected
|
|
91
|
-
]
|
|
92
|
-
|
|
93
|
-
[tool.ruff.lint.per-file-ignores]
|
|
94
|
-
"tests/**/*.py" = ["S"]
|
|
95
|
-
|
|
96
|
-
[tool.ruff.lint.isort]
|
|
97
|
-
known-first-party = ["ynab_cli", "tests"]
|
|
98
|
-
|
|
99
|
-
[tool.ruff.lint.mccabe]
|
|
100
|
-
max-complexity = 70
|
|
101
|
-
|
|
102
|
-
[tool.ruff.lint.flake8-builtins]
|
|
103
|
-
builtins-ignorelist = ["type", "id"]
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
[tool.commitizen]
|
|
107
|
-
name = "cz_conventional_commits"
|
|
108
|
-
tag_format = "v$version"
|
|
109
|
-
version_scheme = "pep440"
|
|
110
|
-
version_provider = "uv"
|
|
111
|
-
update_changelog_on_bump = true
|
|
112
|
-
major_version_zero = true
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
[build-system]
|
|
116
|
-
requires = ["hatchling"]
|
|
117
|
-
build-backend = "hatchling.build"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/accounts/get_account_by_id.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/budgets/get_budget_by_id.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/get_categories.py
RENAMED
|
File without changes
|
{ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/get_category_by_id.py
RENAMED
|
File without changes
|
|
File without changes
|
{ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/update_category.py
RENAMED
|
File without changes
|
{ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/categories/update_month_category.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ynab_cli-0.4.0 → ynab_cli-0.5.1}/src/ynab_cli/adapters/ynab/api/months/get_budget_months.py
RENAMED
|
File without changes
|