ynab-cli 0.6.2__tar.gz → 0.7.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.
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/CHANGELOG.md +18 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/PKG-INFO +9 -8
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/pyproject.toml +22 -21
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/accounts/create_account.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/accounts/get_account_by_id.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/accounts/get_accounts.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/budgets/get_budget_by_id.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/budgets/get_budget_settings_by_id.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/budgets/get_budgets.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/get_categories.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/get_category_by_id.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/get_month_category_by_id.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/update_category.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/update_month_category.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/months/get_budget_month.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/months/get_budget_months.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/payee_locations/get_payee_location_by_id.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/payee_locations/get_payee_locations.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/payee_locations/get_payee_locations_by_payee.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/payees/get_payee_by_id.py +6 -8
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/payees/get_payees.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/payees/update_payee.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/create_scheduled_transaction.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/delete_scheduled_transaction.py +2 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/get_scheduled_transaction_by_id.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/get_scheduled_transactions.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/update_scheduled_transaction.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/create_transaction.py +4 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/delete_transaction.py +2 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/get_transaction_by_id.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions.py +3 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions_by_account.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions_by_category.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions_by_month.py +17 -17
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/get_transactions_by_payee.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/import_transactions.py +3 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/update_transaction.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/update_transactions.py +22 -12
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/user/get_user.py +17 -15
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/account.py +1 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/category.py +31 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_flag_color_type_1.py +1 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_flag_color_type_2_type_1.py +1 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_flag_color_type_3_type_1.py +1 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_response_data.py +8 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/types.py +14 -5
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/util.py +1 -3
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/models/rules.py +3 -3
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/ports/io.py +2 -2
- ynab_cli-0.7.0/src/ynab_cli/domain/settings.py +12 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/use_cases/payees.py +19 -13
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/use_cases/transactions.py +2 -1
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/cli.py +3 -4
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/cli.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/commands/payees.py +16 -9
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/commands/transactions.py +7 -4
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/constants.py +1 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/app.py +2 -9
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/cli.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/payees/list_unused.py +5 -2
- ynab_cli-0.7.0/src/ynab_cli/host/textual/widgets/payees/normalize_names.py +74 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/transactions/apply_rules.py +4 -1
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/transactions/tabs.py +2 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/adapters/textual/test_io.py +6 -6
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/ports/test_io.py +10 -10
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/use_cases/test_payees.py +9 -3
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/click/commands/test_payees.py +3 -2
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/click/commands/test_transactions.py +1 -1
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/test_cli.py +0 -1
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/textual/test_app.py +0 -3
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/uv.lock +578 -459
- ynab_cli-0.6.2/src/ynab_cli/domain/settings.py +0 -16
- ynab_cli-0.6.2/src/ynab_cli/host/textual/widgets/payees/normalize_names.py +0 -38
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/.env-sample +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/.github/.copilot-instructions.md +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/.github/FUNDING.yml +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/.github/dependabot.yml +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/.github/workflows/pr.yml +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/.github/workflows/publish-to-pypi.yml +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/.gitignore +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/.python-version +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/LICENSE.md +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/Makefile +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/README.md +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/docs/index.md +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/docs/transaction_rules.md +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/mkdocs.yml +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/rich/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/rich/io.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/textual/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/textual/io.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/accounts/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/budgets/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/months/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/payee_locations/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/payees/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/scheduled_transactions/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/transactions/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/user/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/client.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/errors.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/account_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/account_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/account_type.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/accounts_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/accounts_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/budget_detail.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/budget_detail_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/budget_detail_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/budget_settings.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/budget_settings_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/budget_settings_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/budget_summary.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/budget_summary_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/budget_summary_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/bulk_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/bulk_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/bulk_response_data_bulk.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/bulk_transactions.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/categories_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/categories_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/category_goal_type_type_1.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/category_goal_type_type_2_type_1.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/category_goal_type_type_3_type_1.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/category_group.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/category_group_with_categories.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/category_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/category_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/currency_format_type_0.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/date_format_type_0.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/error_detail.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/error_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/existing_transaction.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/get_transactions_by_account_type.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/get_transactions_by_category_type.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/get_transactions_by_month_type.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/get_transactions_by_payee_type.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/get_transactions_type.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/hybrid_transaction.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/hybrid_transaction_type.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/hybrid_transactions_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/hybrid_transactions_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/loan_account_periodic_value_type_0.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/month_detail.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/month_detail_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/month_detail_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/month_summaries_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/month_summaries_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/month_summary.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/new_transaction.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/patch_category_wrapper.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/patch_month_category_wrapper.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/patch_payee_wrapper.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/patch_transactions_wrapper.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payee.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payee_location.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payee_location_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payee_location_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payee_locations_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payee_locations_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payee_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payee_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payees_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/payees_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/post_account_wrapper.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/post_scheduled_transaction_wrapper.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/post_transactions_wrapper.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/put_scheduled_transaction_wrapper.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/put_transaction_wrapper.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_account.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_category.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_category_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_category_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_month_category.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_payee.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_payee_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_payee_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_scheduled_transaction.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_sub_transaction.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_transaction_with_id_or_import_id.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_transaction_with_optional_fields.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_transactions_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/save_transactions_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/scheduled_sub_transaction.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_detail.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_frequency.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_summary.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/scheduled_transaction_summary_frequency.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/scheduled_transactions_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/scheduled_transactions_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/sub_transaction.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_cleared_status.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_detail.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_summary.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_1.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_2_type_1.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_3_type_1.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transactions_import_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transactions_import_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transactions_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/transactions_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/user.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/user_response.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/models/user_response_data.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/constants.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/models/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/ports/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/use_cases/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/use_cases/budgets.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/domain/use_cases/categories.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/commands/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/commands/budgets.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/commands/categories.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/commands/rich/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/commands/rich/progress_table.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/click/container.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/container.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/app.tcss +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/container.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/categories/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/categories/list_all.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/categories/list_unused.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/categories/tabs.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/common/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/common/command_widget.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/common/dialogs/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/common/dialogs/dialog.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/common/dialogs/form.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/common/dialogs/screen.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/payees/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/payees/list_all.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/payees/list_duplicates.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/payees/tabs.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/tabs.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/host/textual/widgets/transactions/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/py.typed +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/conftest.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/factories/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/factories/ynab.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/adapters/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/adapters/rich/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/adapters/rich/test_io.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/adapters/textual/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/conftest.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/models/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/models/test_rules.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/ports/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/use_cases/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/use_cases/test_budgets.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/use_cases/test_categories.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/domain/use_cases/test_transactions.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/click/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/click/commands/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/click/commands/test_budgets.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/click/commands/test_categories.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/click/conftest.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/conftest.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/textual/__init__.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/textual/conftest.py +0 -0
- {ynab_cli-0.6.2 → ynab_cli-0.7.0}/tests/unit/host/textual/test_cli.py +0 -0
|
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## v0.7.0 (2025-09-18)
|
|
9
|
+
|
|
10
|
+
### Feat
|
|
11
|
+
|
|
12
|
+
- update to lates ynab api definition
|
|
13
|
+
|
|
14
|
+
### Fix
|
|
15
|
+
|
|
16
|
+
- update deps
|
|
17
|
+
- handle the case where we try to update internal payees better
|
|
18
|
+
|
|
19
|
+
## v0.6.3 (2025-07-11)
|
|
20
|
+
|
|
21
|
+
### Refactor
|
|
22
|
+
|
|
23
|
+
- clean up the dry_run parameters
|
|
24
|
+
- clean up debug option
|
|
25
|
+
|
|
8
26
|
## v0.6.2 (2025-07-09)
|
|
9
27
|
|
|
10
28
|
### Fix
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ynab-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: YNAB Command Line Interface
|
|
5
5
|
Project-URL: Changelog, https://github.com/jeffsawatzky/ynab-cli/blob/main/CHANGELOG.md
|
|
6
6
|
Project-URL: Documentation, https://jeffsawatzky.github.io/ynab-cli/
|
|
@@ -18,20 +18,21 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
19
|
Classifier: Topic :: Office/Business :: Financial
|
|
20
20
|
Classifier: Topic :: Utilities
|
|
21
|
-
Requires-Python:
|
|
22
|
-
Requires-Dist: anyio~=4.
|
|
21
|
+
Requires-Python: <4.0.0,>=3.11
|
|
22
|
+
Requires-Dist: anyio~=4.10
|
|
23
23
|
Requires-Dist: attrs~=25.3
|
|
24
24
|
Requires-Dist: click-default-group~=1.2
|
|
25
25
|
Requires-Dist: click~=8.2
|
|
26
26
|
Requires-Dist: httpx~=0.28
|
|
27
27
|
Requires-Dist: lagom~=2.7
|
|
28
|
+
Requires-Dist: python-dateutil~=2.9
|
|
28
29
|
Requires-Dist: python-dotenv~=1.1
|
|
29
|
-
Requires-Dist: rapidfuzz~=3.
|
|
30
|
-
Requires-Dist: rich~=14.
|
|
30
|
+
Requires-Dist: rapidfuzz~=3.14
|
|
31
|
+
Requires-Dist: rich~=14.1
|
|
31
32
|
Requires-Dist: rule-engine~=4.5
|
|
32
|
-
Requires-Dist: textual-fspicker~=0.
|
|
33
|
-
Requires-Dist: textual~=
|
|
34
|
-
Requires-Dist: typing-extensions~=4.
|
|
33
|
+
Requires-Dist: textual-fspicker~=0.6
|
|
34
|
+
Requires-Dist: textual~=6.1
|
|
35
|
+
Requires-Dist: typing-extensions~=4.15
|
|
35
36
|
Requires-Dist: uvloop~=0.21
|
|
36
37
|
Description-Content-Type: text/markdown
|
|
37
38
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ynab-cli"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.7.0"
|
|
4
4
|
description = "YNAB Command Line Interface"
|
|
5
5
|
readme = "README.md"
|
|
6
|
-
requires-python = ">=3.11"
|
|
6
|
+
requires-python = ">=3.11,<4.0.0"
|
|
7
7
|
license = "MIT"
|
|
8
8
|
|
|
9
9
|
license-files = [
|
|
@@ -33,19 +33,20 @@ classifiers = [
|
|
|
33
33
|
]
|
|
34
34
|
|
|
35
35
|
dependencies = [
|
|
36
|
-
"anyio~=4.
|
|
36
|
+
"anyio~=4.10",
|
|
37
37
|
"attrs~=25.3",
|
|
38
38
|
"click-default-group~=1.2",
|
|
39
39
|
"click~=8.2",
|
|
40
40
|
"httpx~=0.28",
|
|
41
41
|
"lagom~=2.7",
|
|
42
|
+
"python-dateutil~=2.9",
|
|
42
43
|
"python-dotenv~=1.1",
|
|
43
|
-
"rapidfuzz~=3.
|
|
44
|
-
"rich~=14.
|
|
44
|
+
"rapidfuzz~=3.14",
|
|
45
|
+
"rich~=14.1",
|
|
45
46
|
"rule-engine~=4.5",
|
|
46
|
-
"textual-fspicker~=0.
|
|
47
|
-
"textual~=
|
|
48
|
-
"typing-extensions~=4.
|
|
47
|
+
"textual-fspicker~=0.6",
|
|
48
|
+
"textual~=6.1",
|
|
49
|
+
"typing-extensions~=4.15",
|
|
49
50
|
"uvloop~=0.21",
|
|
50
51
|
]
|
|
51
52
|
|
|
@@ -62,19 +63,19 @@ ynab-cli = "ynab_cli.host.cli:main"
|
|
|
62
63
|
|
|
63
64
|
[dependency-groups]
|
|
64
65
|
dev = [
|
|
65
|
-
"commitizen
|
|
66
|
-
"factory-boy
|
|
67
|
-
"mkdocs-click
|
|
68
|
-
"mkdocs-material
|
|
69
|
-
"mkdocs
|
|
70
|
-
"mypy
|
|
71
|
-
"pytest-cov
|
|
72
|
-
"pytest-mock
|
|
73
|
-
"pytest
|
|
74
|
-
"ruff
|
|
75
|
-
"textual-dev
|
|
76
|
-
"trio
|
|
77
|
-
"types-python-dateutil
|
|
66
|
+
"commitizen~=4.9",
|
|
67
|
+
"factory-boy~=3.3",
|
|
68
|
+
"mkdocs-click~=0.9",
|
|
69
|
+
"mkdocs-material~=9.6",
|
|
70
|
+
"mkdocs~=1.6",
|
|
71
|
+
"mypy~=1.18",
|
|
72
|
+
"pytest-cov~=7.0",
|
|
73
|
+
"pytest-mock~=3.15",
|
|
74
|
+
"pytest~=8.4",
|
|
75
|
+
"ruff~=0.13",
|
|
76
|
+
"textual-dev~=1.7",
|
|
77
|
+
"trio~=0.31",
|
|
78
|
+
"types-python-dateutil~=2.9",
|
|
78
79
|
]
|
|
79
80
|
|
|
80
81
|
|
|
@@ -23,9 +23,8 @@ def _get_kwargs(
|
|
|
23
23
|
"url": f"/budgets/{budget_id}/accounts",
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
_kwargs["json"] = body.to_dict()
|
|
27
27
|
|
|
28
|
-
_kwargs["json"] = _body
|
|
29
28
|
headers["Content-Type"] = "application/json"
|
|
30
29
|
|
|
31
30
|
_kwargs["headers"] = headers
|
|
@@ -39,10 +38,12 @@ def _parse_response(
|
|
|
39
38
|
response_201 = AccountResponse.from_dict(response.json())
|
|
40
39
|
|
|
41
40
|
return response_201
|
|
41
|
+
|
|
42
42
|
if response.status_code == 400:
|
|
43
43
|
response_400 = ErrorResponse.from_dict(response.json())
|
|
44
44
|
|
|
45
45
|
return response_400
|
|
46
|
+
|
|
46
47
|
if client.raise_on_unexpected_status:
|
|
47
48
|
raise errors.UnexpectedStatusError(response.status_code, response.content)
|
|
48
49
|
else:
|
{ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/accounts/get_account_by_id.py
RENAMED
|
@@ -4,7 +4,6 @@ from uuid import UUID
|
|
|
4
4
|
|
|
5
5
|
import httpx
|
|
6
6
|
|
|
7
|
-
from ynab_cli.adapters.ynab import errors
|
|
8
7
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
9
8
|
from ynab_cli.adapters.ynab.models.account_response import AccountResponse
|
|
10
9
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
@@ -25,19 +24,20 @@ def _get_kwargs(
|
|
|
25
24
|
|
|
26
25
|
def _parse_response(
|
|
27
26
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
28
|
-
) -> AccountResponse | ErrorResponse
|
|
27
|
+
) -> AccountResponse | ErrorResponse:
|
|
29
28
|
if response.status_code == 200:
|
|
30
29
|
response_200 = AccountResponse.from_dict(response.json())
|
|
31
30
|
|
|
32
31
|
return response_200
|
|
32
|
+
|
|
33
33
|
if response.status_code == 404:
|
|
34
34
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
35
35
|
|
|
36
36
|
return response_404
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
|
|
38
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
39
|
+
|
|
40
|
+
return response_default
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
def _build_response(
|
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.accounts_response import AccountsResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
@@ -32,19 +31,20 @@ def _get_kwargs(
|
|
|
32
31
|
|
|
33
32
|
def _parse_response(
|
|
34
33
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
35
|
-
) -> AccountsResponse | ErrorResponse
|
|
34
|
+
) -> AccountsResponse | ErrorResponse:
|
|
36
35
|
if response.status_code == 200:
|
|
37
36
|
response_200 = AccountsResponse.from_dict(response.json())
|
|
38
37
|
|
|
39
38
|
return response_200
|
|
39
|
+
|
|
40
40
|
if response.status_code == 404:
|
|
41
41
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
42
42
|
|
|
43
43
|
return response_404
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
|
|
45
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
46
|
+
|
|
47
|
+
return response_default
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
def _build_response(
|
{ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/budgets/get_budget_by_id.py
RENAMED
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.budget_detail_response import BudgetDetailResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
@@ -32,19 +31,20 @@ def _get_kwargs(
|
|
|
32
31
|
|
|
33
32
|
def _parse_response(
|
|
34
33
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
35
|
-
) -> BudgetDetailResponse | ErrorResponse
|
|
34
|
+
) -> BudgetDetailResponse | ErrorResponse:
|
|
36
35
|
if response.status_code == 200:
|
|
37
36
|
response_200 = BudgetDetailResponse.from_dict(response.json())
|
|
38
37
|
|
|
39
38
|
return response_200
|
|
39
|
+
|
|
40
40
|
if response.status_code == 404:
|
|
41
41
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
42
42
|
|
|
43
43
|
return response_404
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
|
|
45
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
46
|
+
|
|
47
|
+
return response_default
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
def _build_response(
|
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.budget_settings_response import BudgetSettingsResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
@@ -23,19 +22,20 @@ def _get_kwargs(
|
|
|
23
22
|
|
|
24
23
|
def _parse_response(
|
|
25
24
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
26
|
-
) -> BudgetSettingsResponse | ErrorResponse
|
|
25
|
+
) -> BudgetSettingsResponse | ErrorResponse:
|
|
27
26
|
if response.status_code == 200:
|
|
28
27
|
response_200 = BudgetSettingsResponse.from_dict(response.json())
|
|
29
28
|
|
|
30
29
|
return response_200
|
|
30
|
+
|
|
31
31
|
if response.status_code == 404:
|
|
32
32
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
33
33
|
|
|
34
34
|
return response_404
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
|
|
36
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
37
|
+
|
|
38
|
+
return response_default
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def _build_response(
|
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.budget_summary_response import BudgetSummaryResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
@@ -31,19 +30,20 @@ def _get_kwargs(
|
|
|
31
30
|
|
|
32
31
|
def _parse_response(
|
|
33
32
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
34
|
-
) -> BudgetSummaryResponse | ErrorResponse
|
|
33
|
+
) -> BudgetSummaryResponse | ErrorResponse:
|
|
35
34
|
if response.status_code == 200:
|
|
36
35
|
response_200 = BudgetSummaryResponse.from_dict(response.json())
|
|
37
36
|
|
|
38
37
|
return response_200
|
|
38
|
+
|
|
39
39
|
if response.status_code == 404:
|
|
40
40
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
41
41
|
|
|
42
42
|
return response_404
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
|
|
44
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
45
|
+
|
|
46
|
+
return response_default
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
def _build_response(
|
{ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/get_categories.py
RENAMED
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.categories_response import CategoriesResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
@@ -32,19 +31,20 @@ def _get_kwargs(
|
|
|
32
31
|
|
|
33
32
|
def _parse_response(
|
|
34
33
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
35
|
-
) -> CategoriesResponse | ErrorResponse
|
|
34
|
+
) -> CategoriesResponse | ErrorResponse:
|
|
36
35
|
if response.status_code == 200:
|
|
37
36
|
response_200 = CategoriesResponse.from_dict(response.json())
|
|
38
37
|
|
|
39
38
|
return response_200
|
|
39
|
+
|
|
40
40
|
if response.status_code == 404:
|
|
41
41
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
42
42
|
|
|
43
43
|
return response_404
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
|
|
45
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
46
|
+
|
|
47
|
+
return response_default
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
def _build_response(
|
{ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/get_category_by_id.py
RENAMED
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.category_response import CategoryResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
@@ -24,19 +23,20 @@ def _get_kwargs(
|
|
|
24
23
|
|
|
25
24
|
def _parse_response(
|
|
26
25
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
27
|
-
) -> CategoryResponse | ErrorResponse
|
|
26
|
+
) -> CategoryResponse | ErrorResponse:
|
|
28
27
|
if response.status_code == 200:
|
|
29
28
|
response_200 = CategoryResponse.from_dict(response.json())
|
|
30
29
|
|
|
31
30
|
return response_200
|
|
31
|
+
|
|
32
32
|
if response.status_code == 404:
|
|
33
33
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
34
34
|
|
|
35
35
|
return response_404
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
|
|
37
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
38
|
+
|
|
39
|
+
return response_default
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
def _build_response(
|
|
@@ -4,7 +4,6 @@ from typing import Any
|
|
|
4
4
|
|
|
5
5
|
import httpx
|
|
6
6
|
|
|
7
|
-
from ynab_cli.adapters.ynab import errors
|
|
8
7
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
9
8
|
from ynab_cli.adapters.ynab.models.category_response import CategoryResponse
|
|
10
9
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
@@ -26,19 +25,20 @@ def _get_kwargs(
|
|
|
26
25
|
|
|
27
26
|
def _parse_response(
|
|
28
27
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
29
|
-
) -> CategoryResponse | ErrorResponse
|
|
28
|
+
) -> CategoryResponse | ErrorResponse:
|
|
30
29
|
if response.status_code == 200:
|
|
31
30
|
response_200 = CategoryResponse.from_dict(response.json())
|
|
32
31
|
|
|
33
32
|
return response_200
|
|
33
|
+
|
|
34
34
|
if response.status_code == 404:
|
|
35
35
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
36
36
|
|
|
37
37
|
return response_404
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
|
|
39
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
40
|
+
|
|
41
|
+
return response_default
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
def _build_response(
|
{ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/update_category.py
RENAMED
|
@@ -24,9 +24,8 @@ def _get_kwargs(
|
|
|
24
24
|
"url": f"/budgets/{budget_id}/categories/{category_id}",
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
_kwargs["json"] = body.to_dict()
|
|
28
28
|
|
|
29
|
-
_kwargs["json"] = _body
|
|
30
29
|
headers["Content-Type"] = "application/json"
|
|
31
30
|
|
|
32
31
|
_kwargs["headers"] = headers
|
|
@@ -40,10 +39,12 @@ def _parse_response(
|
|
|
40
39
|
response_200 = SaveCategoryResponse.from_dict(response.json())
|
|
41
40
|
|
|
42
41
|
return response_200
|
|
42
|
+
|
|
43
43
|
if response.status_code == 400:
|
|
44
44
|
response_400 = ErrorResponse.from_dict(response.json())
|
|
45
45
|
|
|
46
46
|
return response_400
|
|
47
|
+
|
|
47
48
|
if client.raise_on_unexpected_status:
|
|
48
49
|
raise errors.UnexpectedStatusError(response.status_code, response.content)
|
|
49
50
|
else:
|
{ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/categories/update_month_category.py
RENAMED
|
@@ -26,9 +26,8 @@ def _get_kwargs(
|
|
|
26
26
|
"url": f"/budgets/{budget_id}/months/{month}/categories/{category_id}",
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
_kwargs["json"] = body.to_dict()
|
|
30
30
|
|
|
31
|
-
_kwargs["json"] = _body
|
|
32
31
|
headers["Content-Type"] = "application/json"
|
|
33
32
|
|
|
34
33
|
_kwargs["headers"] = headers
|
|
@@ -42,10 +41,12 @@ def _parse_response(
|
|
|
42
41
|
response_200 = SaveCategoryResponse.from_dict(response.json())
|
|
43
42
|
|
|
44
43
|
return response_200
|
|
44
|
+
|
|
45
45
|
if response.status_code == 400:
|
|
46
46
|
response_400 = ErrorResponse.from_dict(response.json())
|
|
47
47
|
|
|
48
48
|
return response_400
|
|
49
|
+
|
|
49
50
|
if client.raise_on_unexpected_status:
|
|
50
51
|
raise errors.UnexpectedStatusError(response.status_code, response.content)
|
|
51
52
|
else:
|
|
@@ -4,7 +4,6 @@ from typing import Any
|
|
|
4
4
|
|
|
5
5
|
import httpx
|
|
6
6
|
|
|
7
|
-
from ynab_cli.adapters.ynab import errors
|
|
8
7
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
9
8
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
10
9
|
from ynab_cli.adapters.ynab.models.month_detail_response import MonthDetailResponse
|
|
@@ -25,19 +24,20 @@ def _get_kwargs(
|
|
|
25
24
|
|
|
26
25
|
def _parse_response(
|
|
27
26
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
28
|
-
) -> ErrorResponse | MonthDetailResponse
|
|
27
|
+
) -> ErrorResponse | MonthDetailResponse:
|
|
29
28
|
if response.status_code == 200:
|
|
30
29
|
response_200 = MonthDetailResponse.from_dict(response.json())
|
|
31
30
|
|
|
32
31
|
return response_200
|
|
32
|
+
|
|
33
33
|
if response.status_code == 404:
|
|
34
34
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
35
35
|
|
|
36
36
|
return response_404
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
|
|
38
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
39
|
+
|
|
40
|
+
return response_default
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
def _build_response(
|
{ynab_cli-0.6.2 → ynab_cli-0.7.0}/src/ynab_cli/adapters/ynab/api/months/get_budget_months.py
RENAMED
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.month_summaries_response import MonthSummariesResponse
|
|
@@ -32,19 +31,20 @@ def _get_kwargs(
|
|
|
32
31
|
|
|
33
32
|
def _parse_response(
|
|
34
33
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
35
|
-
) -> ErrorResponse | MonthSummariesResponse
|
|
34
|
+
) -> ErrorResponse | MonthSummariesResponse:
|
|
36
35
|
if response.status_code == 200:
|
|
37
36
|
response_200 = MonthSummariesResponse.from_dict(response.json())
|
|
38
37
|
|
|
39
38
|
return response_200
|
|
39
|
+
|
|
40
40
|
if response.status_code == 404:
|
|
41
41
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
42
42
|
|
|
43
43
|
return response_404
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
|
|
45
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
46
|
+
|
|
47
|
+
return response_default
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
def _build_response(
|
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.payee_location_response import PayeeLocationResponse
|
|
@@ -24,19 +23,20 @@ def _get_kwargs(
|
|
|
24
23
|
|
|
25
24
|
def _parse_response(
|
|
26
25
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
27
|
-
) -> ErrorResponse | PayeeLocationResponse
|
|
26
|
+
) -> ErrorResponse | PayeeLocationResponse:
|
|
28
27
|
if response.status_code == 200:
|
|
29
28
|
response_200 = PayeeLocationResponse.from_dict(response.json())
|
|
30
29
|
|
|
31
30
|
return response_200
|
|
31
|
+
|
|
32
32
|
if response.status_code == 404:
|
|
33
33
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
34
34
|
|
|
35
35
|
return response_404
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
|
|
37
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
38
|
+
|
|
39
|
+
return response_default
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
def _build_response(
|
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.payee_locations_response import PayeeLocationsResponse
|
|
@@ -23,19 +22,20 @@ def _get_kwargs(
|
|
|
23
22
|
|
|
24
23
|
def _parse_response(
|
|
25
24
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
26
|
-
) -> ErrorResponse | PayeeLocationsResponse
|
|
25
|
+
) -> ErrorResponse | PayeeLocationsResponse:
|
|
27
26
|
if response.status_code == 200:
|
|
28
27
|
response_200 = PayeeLocationsResponse.from_dict(response.json())
|
|
29
28
|
|
|
30
29
|
return response_200
|
|
30
|
+
|
|
31
31
|
if response.status_code == 404:
|
|
32
32
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
33
33
|
|
|
34
34
|
return response_404
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
|
|
36
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
37
|
+
|
|
38
|
+
return response_default
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def _build_response(
|
|
@@ -3,7 +3,6 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
5
|
|
|
6
|
-
from ynab_cli.adapters.ynab import errors
|
|
7
6
|
from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
|
|
8
7
|
from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
|
|
9
8
|
from ynab_cli.adapters.ynab.models.payee_locations_response import PayeeLocationsResponse
|
|
@@ -24,19 +23,20 @@ def _get_kwargs(
|
|
|
24
23
|
|
|
25
24
|
def _parse_response(
|
|
26
25
|
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
27
|
-
) -> ErrorResponse | PayeeLocationsResponse
|
|
26
|
+
) -> ErrorResponse | PayeeLocationsResponse:
|
|
28
27
|
if response.status_code == 200:
|
|
29
28
|
response_200 = PayeeLocationsResponse.from_dict(response.json())
|
|
30
29
|
|
|
31
30
|
return response_200
|
|
31
|
+
|
|
32
32
|
if response.status_code == 404:
|
|
33
33
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
34
34
|
|
|
35
35
|
return response_404
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
|
|
37
|
+
response_default = ErrorResponse.from_dict(response.json())
|
|
38
|
+
|
|
39
|
+
return response_default
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
def _build_response(
|