ynab-cli 0.3.0__py3-none-any.whl

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.
Files changed (206) hide show
  1. ynab_cli/__init__.py +0 -0
  2. ynab_cli/adapters/__init__.py +0 -0
  3. ynab_cli/adapters/rich/__init__.py +0 -0
  4. ynab_cli/adapters/rich/io.py +38 -0
  5. ynab_cli/adapters/textual/__init__.py +0 -0
  6. ynab_cli/adapters/textual/io.py +62 -0
  7. ynab_cli/adapters/ynab/__init__.py +8 -0
  8. ynab_cli/adapters/ynab/api/__init__.py +1 -0
  9. ynab_cli/adapters/ynab/api/accounts/__init__.py +1 -0
  10. ynab_cli/adapters/ynab/api/accounts/create_account.py +186 -0
  11. ynab_cli/adapters/ynab/api/accounts/get_account_by_id.py +177 -0
  12. ynab_cli/adapters/ynab/api/accounts/get_accounts.py +184 -0
  13. ynab_cli/adapters/ynab/api/budgets/__init__.py +1 -0
  14. ynab_cli/adapters/ynab/api/budgets/get_budget_by_id.py +188 -0
  15. ynab_cli/adapters/ynab/api/budgets/get_budget_settings_by_id.py +163 -0
  16. ynab_cli/adapters/ynab/api/budgets/get_budgets.py +171 -0
  17. ynab_cli/adapters/ynab/api/categories/__init__.py +1 -0
  18. ynab_cli/adapters/ynab/api/categories/get_categories.py +188 -0
  19. ynab_cli/adapters/ynab/api/categories/get_category_by_id.py +180 -0
  20. ynab_cli/adapters/ynab/api/categories/get_month_category_by_id.py +194 -0
  21. ynab_cli/adapters/ynab/api/categories/update_category.py +199 -0
  22. ynab_cli/adapters/ynab/api/categories/update_month_category.py +213 -0
  23. ynab_cli/adapters/ynab/api/months/__init__.py +1 -0
  24. ynab_cli/adapters/ynab/api/months/get_budget_month.py +177 -0
  25. ynab_cli/adapters/ynab/api/months/get_budget_months.py +184 -0
  26. ynab_cli/adapters/ynab/api/payee_locations/__init__.py +1 -0
  27. ynab_cli/adapters/ynab/api/payee_locations/get_payee_location_by_id.py +176 -0
  28. ynab_cli/adapters/ynab/api/payee_locations/get_payee_locations.py +163 -0
  29. ynab_cli/adapters/ynab/api/payee_locations/get_payee_locations_by_payee.py +176 -0
  30. ynab_cli/adapters/ynab/api/payees/__init__.py +1 -0
  31. ynab_cli/adapters/ynab/api/payees/get_payee_by_id.py +176 -0
  32. ynab_cli/adapters/ynab/api/payees/get_payees.py +184 -0
  33. ynab_cli/adapters/ynab/api/payees/update_payee.py +199 -0
  34. ynab_cli/adapters/ynab/api/scheduled_transactions/__init__.py +1 -0
  35. ynab_cli/adapters/ynab/api/scheduled_transactions/create_scheduled_transaction.py +186 -0
  36. ynab_cli/adapters/ynab/api/scheduled_transactions/delete_scheduled_transaction.py +176 -0
  37. ynab_cli/adapters/ynab/api/scheduled_transactions/get_scheduled_transaction_by_id.py +176 -0
  38. ynab_cli/adapters/ynab/api/scheduled_transactions/get_scheduled_transactions.py +184 -0
  39. ynab_cli/adapters/ynab/api/scheduled_transactions/update_scheduled_transaction.py +199 -0
  40. ynab_cli/adapters/ynab/api/transactions/__init__.py +1 -0
  41. ynab_cli/adapters/ynab/api/transactions/create_transaction.py +202 -0
  42. ynab_cli/adapters/ynab/api/transactions/delete_transaction.py +176 -0
  43. ynab_cli/adapters/ynab/api/transactions/get_transaction_by_id.py +176 -0
  44. ynab_cli/adapters/ynab/api/transactions/get_transactions.py +227 -0
  45. ynab_cli/adapters/ynab/api/transactions/get_transactions_by_account.py +236 -0
  46. ynab_cli/adapters/ynab/api/transactions/get_transactions_by_category.py +236 -0
  47. ynab_cli/adapters/ynab/api/transactions/get_transactions_by_month.py +236 -0
  48. ynab_cli/adapters/ynab/api/transactions/get_transactions_by_payee.py +236 -0
  49. ynab_cli/adapters/ynab/api/transactions/import_transactions.py +183 -0
  50. ynab_cli/adapters/ynab/api/transactions/update_transaction.py +199 -0
  51. ynab_cli/adapters/ynab/api/transactions/update_transactions.py +177 -0
  52. ynab_cli/adapters/ynab/api/user/__init__.py +1 -0
  53. ynab_cli/adapters/ynab/api/user/get_user.py +130 -0
  54. ynab_cli/adapters/ynab/client.py +268 -0
  55. ynab_cli/adapters/ynab/errors.py +16 -0
  56. ynab_cli/adapters/ynab/models/__init__.py +229 -0
  57. ynab_cli/adapters/ynab/models/account.py +345 -0
  58. ynab_cli/adapters/ynab/models/account_response.py +65 -0
  59. ynab_cli/adapters/ynab/models/account_response_data.py +65 -0
  60. ynab_cli/adapters/ynab/models/account_type.py +23 -0
  61. ynab_cli/adapters/ynab/models/accounts_response.py +65 -0
  62. ynab_cli/adapters/ynab/models/accounts_response_data.py +81 -0
  63. ynab_cli/adapters/ynab/models/budget_detail.py +405 -0
  64. ynab_cli/adapters/ynab/models/budget_detail_response.py +65 -0
  65. ynab_cli/adapters/ynab/models/budget_detail_response_data.py +73 -0
  66. ynab_cli/adapters/ynab/models/budget_settings.py +115 -0
  67. ynab_cli/adapters/ynab/models/budget_settings_response.py +65 -0
  68. ynab_cli/adapters/ynab/models/budget_settings_response_data.py +65 -0
  69. ynab_cli/adapters/ynab/models/budget_summary.py +216 -0
  70. ynab_cli/adapters/ynab/models/budget_summary_response.py +65 -0
  71. ynab_cli/adapters/ynab/models/budget_summary_response_data.py +91 -0
  72. ynab_cli/adapters/ynab/models/bulk_response.py +65 -0
  73. ynab_cli/adapters/ynab/models/bulk_response_data.py +65 -0
  74. ynab_cli/adapters/ynab/models/bulk_response_data_bulk.py +68 -0
  75. ynab_cli/adapters/ynab/models/bulk_transactions.py +75 -0
  76. ynab_cli/adapters/ynab/models/categories_response.py +65 -0
  77. ynab_cli/adapters/ynab/models/categories_response_data.py +81 -0
  78. ynab_cli/adapters/ynab/models/category.py +519 -0
  79. ynab_cli/adapters/ynab/models/category_goal_type_type_1.py +15 -0
  80. ynab_cli/adapters/ynab/models/category_goal_type_type_2_type_1.py +15 -0
  81. ynab_cli/adapters/ynab/models/category_goal_type_type_3_type_1.py +15 -0
  82. ynab_cli/adapters/ynab/models/category_group.py +85 -0
  83. ynab_cli/adapters/ynab/models/category_group_with_categories.py +108 -0
  84. ynab_cli/adapters/ynab/models/category_response.py +65 -0
  85. ynab_cli/adapters/ynab/models/category_response_data.py +65 -0
  86. ynab_cli/adapters/ynab/models/currency_format_type_0.py +117 -0
  87. ynab_cli/adapters/ynab/models/date_format_type_0.py +61 -0
  88. ynab_cli/adapters/ynab/models/error_detail.py +75 -0
  89. ynab_cli/adapters/ynab/models/error_response.py +65 -0
  90. ynab_cli/adapters/ynab/models/existing_transaction.py +322 -0
  91. ynab_cli/adapters/ynab/models/get_transactions_by_account_type.py +12 -0
  92. ynab_cli/adapters/ynab/models/get_transactions_by_category_type.py +12 -0
  93. ynab_cli/adapters/ynab/models/get_transactions_by_month_type.py +12 -0
  94. ynab_cli/adapters/ynab/models/get_transactions_by_payee_type.py +12 -0
  95. ynab_cli/adapters/ynab/models/get_transactions_type.py +12 -0
  96. ynab_cli/adapters/ynab/models/hybrid_transaction.py +567 -0
  97. ynab_cli/adapters/ynab/models/hybrid_transaction_type.py +12 -0
  98. ynab_cli/adapters/ynab/models/hybrid_transactions_response.py +65 -0
  99. ynab_cli/adapters/ynab/models/hybrid_transactions_response_data.py +84 -0
  100. ynab_cli/adapters/ynab/models/loan_account_periodic_value_type_0.py +44 -0
  101. ynab_cli/adapters/ynab/models/month_detail.py +168 -0
  102. ynab_cli/adapters/ynab/models/month_detail_response.py +65 -0
  103. ynab_cli/adapters/ynab/models/month_detail_response_data.py +65 -0
  104. ynab_cli/adapters/ynab/models/month_summaries_response.py +65 -0
  105. ynab_cli/adapters/ynab/models/month_summaries_response_data.py +81 -0
  106. ynab_cli/adapters/ynab/models/month_summary.py +145 -0
  107. ynab_cli/adapters/ynab/models/new_transaction.py +352 -0
  108. ynab_cli/adapters/ynab/models/patch_category_wrapper.py +65 -0
  109. ynab_cli/adapters/ynab/models/patch_month_category_wrapper.py +65 -0
  110. ynab_cli/adapters/ynab/models/patch_payee_wrapper.py +65 -0
  111. ynab_cli/adapters/ynab/models/patch_transactions_wrapper.py +73 -0
  112. ynab_cli/adapters/ynab/models/payee.py +100 -0
  113. ynab_cli/adapters/ynab/models/payee_location.py +93 -0
  114. ynab_cli/adapters/ynab/models/payee_location_response.py +65 -0
  115. ynab_cli/adapters/ynab/models/payee_location_response_data.py +65 -0
  116. ynab_cli/adapters/ynab/models/payee_locations_response.py +65 -0
  117. ynab_cli/adapters/ynab/models/payee_locations_response_data.py +73 -0
  118. ynab_cli/adapters/ynab/models/payee_response.py +65 -0
  119. ynab_cli/adapters/ynab/models/payee_response_data.py +65 -0
  120. ynab_cli/adapters/ynab/models/payees_response.py +65 -0
  121. ynab_cli/adapters/ynab/models/payees_response_data.py +81 -0
  122. ynab_cli/adapters/ynab/models/post_account_wrapper.py +65 -0
  123. ynab_cli/adapters/ynab/models/post_scheduled_transaction_wrapper.py +65 -0
  124. ynab_cli/adapters/ynab/models/post_transactions_wrapper.py +91 -0
  125. ynab_cli/adapters/ynab/models/put_scheduled_transaction_wrapper.py +65 -0
  126. ynab_cli/adapters/ynab/models/put_transaction_wrapper.py +65 -0
  127. ynab_cli/adapters/ynab/models/save_account.py +77 -0
  128. ynab_cli/adapters/ynab/models/save_category.py +129 -0
  129. ynab_cli/adapters/ynab/models/save_category_response.py +65 -0
  130. ynab_cli/adapters/ynab/models/save_category_response_data.py +73 -0
  131. ynab_cli/adapters/ynab/models/save_month_category.py +59 -0
  132. ynab_cli/adapters/ynab/models/save_payee.py +59 -0
  133. ynab_cli/adapters/ynab/models/save_payee_response.py +65 -0
  134. ynab_cli/adapters/ynab/models/save_payee_response_data.py +73 -0
  135. ynab_cli/adapters/ynab/models/save_scheduled_transaction.py +269 -0
  136. ynab_cli/adapters/ynab/models/save_sub_transaction.py +166 -0
  137. ynab_cli/adapters/ynab/models/save_transaction_with_id_or_import_id.py +366 -0
  138. ynab_cli/adapters/ynab/models/save_transaction_with_optional_fields.py +322 -0
  139. ynab_cli/adapters/ynab/models/save_transactions_response.py +65 -0
  140. ynab_cli/adapters/ynab/models/save_transactions_response_data.py +123 -0
  141. ynab_cli/adapters/ynab/models/scheduled_sub_transaction.py +238 -0
  142. ynab_cli/adapters/ynab/models/scheduled_transaction_detail.py +381 -0
  143. ynab_cli/adapters/ynab/models/scheduled_transaction_frequency.py +23 -0
  144. ynab_cli/adapters/ynab/models/scheduled_transaction_response.py +65 -0
  145. ynab_cli/adapters/ynab/models/scheduled_transaction_response_data.py +65 -0
  146. ynab_cli/adapters/ynab/models/scheduled_transaction_summary.py +310 -0
  147. ynab_cli/adapters/ynab/models/scheduled_transaction_summary_frequency.py +23 -0
  148. ynab_cli/adapters/ynab/models/scheduled_transactions_response.py +65 -0
  149. ynab_cli/adapters/ynab/models/scheduled_transactions_response_data.py +81 -0
  150. ynab_cli/adapters/ynab/models/sub_transaction.py +259 -0
  151. ynab_cli/adapters/ynab/models/transaction_cleared_status.py +13 -0
  152. ynab_cli/adapters/ynab/models/transaction_detail.py +570 -0
  153. ynab_cli/adapters/ynab/models/transaction_flag_color_type_1.py +16 -0
  154. ynab_cli/adapters/ynab/models/transaction_flag_color_type_2_type_1.py +16 -0
  155. ynab_cli/adapters/ynab/models/transaction_flag_color_type_3_type_1.py +16 -0
  156. ynab_cli/adapters/ynab/models/transaction_response.py +65 -0
  157. ynab_cli/adapters/ynab/models/transaction_response_data.py +65 -0
  158. ynab_cli/adapters/ynab/models/transaction_summary.py +499 -0
  159. ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_1.py +18 -0
  160. ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_2_type_1.py +18 -0
  161. ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_3_type_1.py +18 -0
  162. ynab_cli/adapters/ynab/models/transactions_import_response.py +65 -0
  163. ynab_cli/adapters/ynab/models/transactions_import_response_data.py +59 -0
  164. ynab_cli/adapters/ynab/models/transactions_response.py +65 -0
  165. ynab_cli/adapters/ynab/models/transactions_response_data.py +81 -0
  166. ynab_cli/adapters/ynab/models/user.py +60 -0
  167. ynab_cli/adapters/ynab/models/user_response.py +65 -0
  168. ynab_cli/adapters/ynab/models/user_response_data.py +65 -0
  169. ynab_cli/adapters/ynab/types.py +46 -0
  170. ynab_cli/adapters/ynab/util.py +78 -0
  171. ynab_cli/domain/__init__.py +0 -0
  172. ynab_cli/domain/constants.py +3 -0
  173. ynab_cli/domain/models/__init__.py +0 -0
  174. ynab_cli/domain/models/rules.py +37 -0
  175. ynab_cli/domain/ports/__init__.py +5 -0
  176. ynab_cli/domain/ports/io.py +63 -0
  177. ynab_cli/domain/settings.py +16 -0
  178. ynab_cli/domain/use_cases/__init__.py +0 -0
  179. ynab_cli/domain/use_cases/categories.py +105 -0
  180. ynab_cli/domain/use_cases/payees.py +232 -0
  181. ynab_cli/domain/use_cases/transactions.py +93 -0
  182. ynab_cli/host/__init__.py +14 -0
  183. ynab_cli/host/cli.py +37 -0
  184. ynab_cli/host/click/__init__.py +0 -0
  185. ynab_cli/host/click/cli.py +44 -0
  186. ynab_cli/host/click/commands/__init__.py +0 -0
  187. ynab_cli/host/click/commands/categories.py +92 -0
  188. ynab_cli/host/click/commands/payees.py +157 -0
  189. ynab_cli/host/click/commands/rich/__init__.py +0 -0
  190. ynab_cli/host/click/commands/rich/progress_table.py +37 -0
  191. ynab_cli/host/click/commands/transactions.py +76 -0
  192. ynab_cli/host/constants.py +3 -0
  193. ynab_cli/host/textual/__init__.py +0 -0
  194. ynab_cli/host/textual/app.py +98 -0
  195. ynab_cli/host/textual/app.tcss +47 -0
  196. ynab_cli/host/textual/cli.py +42 -0
  197. ynab_cli/host/textual/widgets/__init__.py +58 -0
  198. ynab_cli/host/textual/widgets/categories.py +90 -0
  199. ynab_cli/host/textual/widgets/payees.py +154 -0
  200. ynab_cli/host/textual/widgets/transactions.py +89 -0
  201. ynab_cli/py.typed +0 -0
  202. ynab_cli-0.3.0.dist-info/METADATA +102 -0
  203. ynab_cli-0.3.0.dist-info/RECORD +206 -0
  204. ynab_cli-0.3.0.dist-info/WHEEL +4 -0
  205. ynab_cli-0.3.0.dist-info/entry_points.txt +2 -0
  206. ynab_cli-0.3.0.dist-info/licenses/LICENSE.md +21 -0
@@ -0,0 +1,188 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ynab_cli.adapters.ynab import errors
7
+ from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
8
+ from ynab_cli.adapters.ynab.models.budget_detail_response import BudgetDetailResponse
9
+ from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
10
+ from ynab_cli.adapters.ynab.types import UNSET, Response, Unset
11
+
12
+
13
+ def _get_kwargs(
14
+ budget_id: str,
15
+ *,
16
+ last_knowledge_of_server: Unset | int = UNSET,
17
+ ) -> dict[str, Any]:
18
+ params: dict[str, Any] = {}
19
+
20
+ params["last_knowledge_of_server"] = last_knowledge_of_server
21
+
22
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
23
+
24
+ _kwargs: dict[str, Any] = {
25
+ "method": "get",
26
+ "url": f"/budgets/{budget_id}",
27
+ "params": params,
28
+ }
29
+
30
+ return _kwargs
31
+
32
+
33
+ def _parse_response(
34
+ *, client: AuthenticatedClient | Client, response: httpx.Response
35
+ ) -> BudgetDetailResponse | ErrorResponse | None:
36
+ if response.status_code == 200:
37
+ response_200 = BudgetDetailResponse.from_dict(response.json())
38
+
39
+ return response_200
40
+ if response.status_code == 404:
41
+ response_404 = ErrorResponse.from_dict(response.json())
42
+
43
+ return response_404
44
+ if client.raise_on_unexpected_status:
45
+ raise errors.UnexpectedStatusError(response.status_code, response.content)
46
+ else:
47
+ return None
48
+
49
+
50
+ def _build_response(
51
+ *, client: AuthenticatedClient | Client, response: httpx.Response
52
+ ) -> Response[BudgetDetailResponse | ErrorResponse]:
53
+ return Response(
54
+ status_code=HTTPStatus(response.status_code),
55
+ content=response.content,
56
+ headers=response.headers,
57
+ parsed=_parse_response(client=client, response=response),
58
+ )
59
+
60
+
61
+ def sync_detailed(
62
+ budget_id: str,
63
+ *,
64
+ client: AuthenticatedClient | Client,
65
+ last_knowledge_of_server: Unset | int = UNSET,
66
+ ) -> Response[BudgetDetailResponse | ErrorResponse]:
67
+ """Single budget
68
+
69
+ Returns a single budget with all related entities. This resource is effectively a full budget
70
+ export.
71
+
72
+ Args:
73
+ budget_id (str):
74
+ last_knowledge_of_server (Union[Unset, int]):
75
+
76
+ Raises:
77
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
78
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
79
+
80
+ Returns:
81
+ Response[Union[BudgetDetailResponse, ErrorResponse]]
82
+ """
83
+
84
+ kwargs = _get_kwargs(
85
+ budget_id=budget_id,
86
+ last_knowledge_of_server=last_knowledge_of_server,
87
+ )
88
+
89
+ response = client.get_httpx_client().request(
90
+ **kwargs,
91
+ )
92
+
93
+ return _build_response(client=client, response=response)
94
+
95
+
96
+ def sync(
97
+ budget_id: str,
98
+ *,
99
+ client: AuthenticatedClient | Client,
100
+ last_knowledge_of_server: Unset | int = UNSET,
101
+ ) -> BudgetDetailResponse | ErrorResponse | None:
102
+ """Single budget
103
+
104
+ Returns a single budget with all related entities. This resource is effectively a full budget
105
+ export.
106
+
107
+ Args:
108
+ budget_id (str):
109
+ last_knowledge_of_server (Union[Unset, int]):
110
+
111
+ Raises:
112
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
113
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
114
+
115
+ Returns:
116
+ Union[BudgetDetailResponse, ErrorResponse]
117
+ """
118
+
119
+ return sync_detailed(
120
+ budget_id=budget_id,
121
+ client=client,
122
+ last_knowledge_of_server=last_knowledge_of_server,
123
+ ).parsed
124
+
125
+
126
+ async def asyncio_detailed(
127
+ budget_id: str,
128
+ *,
129
+ client: AuthenticatedClient | Client,
130
+ last_knowledge_of_server: Unset | int = UNSET,
131
+ ) -> Response[BudgetDetailResponse | ErrorResponse]:
132
+ """Single budget
133
+
134
+ Returns a single budget with all related entities. This resource is effectively a full budget
135
+ export.
136
+
137
+ Args:
138
+ budget_id (str):
139
+ last_knowledge_of_server (Union[Unset, int]):
140
+
141
+ Raises:
142
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
143
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
144
+
145
+ Returns:
146
+ Response[Union[BudgetDetailResponse, ErrorResponse]]
147
+ """
148
+
149
+ kwargs = _get_kwargs(
150
+ budget_id=budget_id,
151
+ last_knowledge_of_server=last_knowledge_of_server,
152
+ )
153
+
154
+ response = await client.get_async_httpx_client().request(**kwargs)
155
+
156
+ return _build_response(client=client, response=response)
157
+
158
+
159
+ async def asyncio(
160
+ budget_id: str,
161
+ *,
162
+ client: AuthenticatedClient | Client,
163
+ last_knowledge_of_server: Unset | int = UNSET,
164
+ ) -> BudgetDetailResponse | ErrorResponse | None:
165
+ """Single budget
166
+
167
+ Returns a single budget with all related entities. This resource is effectively a full budget
168
+ export.
169
+
170
+ Args:
171
+ budget_id (str):
172
+ last_knowledge_of_server (Union[Unset, int]):
173
+
174
+ Raises:
175
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
176
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
177
+
178
+ Returns:
179
+ Union[BudgetDetailResponse, ErrorResponse]
180
+ """
181
+
182
+ return (
183
+ await asyncio_detailed(
184
+ budget_id=budget_id,
185
+ client=client,
186
+ last_knowledge_of_server=last_knowledge_of_server,
187
+ )
188
+ ).parsed
@@ -0,0 +1,163 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ynab_cli.adapters.ynab import errors
7
+ from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
8
+ from ynab_cli.adapters.ynab.models.budget_settings_response import BudgetSettingsResponse
9
+ from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
10
+ from ynab_cli.adapters.ynab.types import Response
11
+
12
+
13
+ def _get_kwargs(
14
+ budget_id: str,
15
+ ) -> dict[str, Any]:
16
+ _kwargs: dict[str, Any] = {
17
+ "method": "get",
18
+ "url": f"/budgets/{budget_id}/settings",
19
+ }
20
+
21
+ return _kwargs
22
+
23
+
24
+ def _parse_response(
25
+ *, client: AuthenticatedClient | Client, response: httpx.Response
26
+ ) -> BudgetSettingsResponse | ErrorResponse | None:
27
+ if response.status_code == 200:
28
+ response_200 = BudgetSettingsResponse.from_dict(response.json())
29
+
30
+ return response_200
31
+ if response.status_code == 404:
32
+ response_404 = ErrorResponse.from_dict(response.json())
33
+
34
+ return response_404
35
+ if client.raise_on_unexpected_status:
36
+ raise errors.UnexpectedStatusError(response.status_code, response.content)
37
+ else:
38
+ return None
39
+
40
+
41
+ def _build_response(
42
+ *, client: AuthenticatedClient | Client, response: httpx.Response
43
+ ) -> Response[BudgetSettingsResponse | ErrorResponse]:
44
+ return Response(
45
+ status_code=HTTPStatus(response.status_code),
46
+ content=response.content,
47
+ headers=response.headers,
48
+ parsed=_parse_response(client=client, response=response),
49
+ )
50
+
51
+
52
+ def sync_detailed(
53
+ budget_id: str,
54
+ *,
55
+ client: AuthenticatedClient | Client,
56
+ ) -> Response[BudgetSettingsResponse | ErrorResponse]:
57
+ """Budget Settings
58
+
59
+ Returns settings for a budget
60
+
61
+ Args:
62
+ budget_id (str):
63
+
64
+ Raises:
65
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
66
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
67
+
68
+ Returns:
69
+ Response[Union[BudgetSettingsResponse, ErrorResponse]]
70
+ """
71
+
72
+ kwargs = _get_kwargs(
73
+ budget_id=budget_id,
74
+ )
75
+
76
+ response = client.get_httpx_client().request(
77
+ **kwargs,
78
+ )
79
+
80
+ return _build_response(client=client, response=response)
81
+
82
+
83
+ def sync(
84
+ budget_id: str,
85
+ *,
86
+ client: AuthenticatedClient | Client,
87
+ ) -> BudgetSettingsResponse | ErrorResponse | None:
88
+ """Budget Settings
89
+
90
+ Returns settings for a budget
91
+
92
+ Args:
93
+ budget_id (str):
94
+
95
+ Raises:
96
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
97
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
98
+
99
+ Returns:
100
+ Union[BudgetSettingsResponse, ErrorResponse]
101
+ """
102
+
103
+ return sync_detailed(
104
+ budget_id=budget_id,
105
+ client=client,
106
+ ).parsed
107
+
108
+
109
+ async def asyncio_detailed(
110
+ budget_id: str,
111
+ *,
112
+ client: AuthenticatedClient | Client,
113
+ ) -> Response[BudgetSettingsResponse | ErrorResponse]:
114
+ """Budget Settings
115
+
116
+ Returns settings for a budget
117
+
118
+ Args:
119
+ budget_id (str):
120
+
121
+ Raises:
122
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
123
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
124
+
125
+ Returns:
126
+ Response[Union[BudgetSettingsResponse, ErrorResponse]]
127
+ """
128
+
129
+ kwargs = _get_kwargs(
130
+ budget_id=budget_id,
131
+ )
132
+
133
+ response = await client.get_async_httpx_client().request(**kwargs)
134
+
135
+ return _build_response(client=client, response=response)
136
+
137
+
138
+ async def asyncio(
139
+ budget_id: str,
140
+ *,
141
+ client: AuthenticatedClient | Client,
142
+ ) -> BudgetSettingsResponse | ErrorResponse | None:
143
+ """Budget Settings
144
+
145
+ Returns settings for a budget
146
+
147
+ Args:
148
+ budget_id (str):
149
+
150
+ Raises:
151
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
152
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
153
+
154
+ Returns:
155
+ Union[BudgetSettingsResponse, ErrorResponse]
156
+ """
157
+
158
+ return (
159
+ await asyncio_detailed(
160
+ budget_id=budget_id,
161
+ client=client,
162
+ )
163
+ ).parsed
@@ -0,0 +1,171 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ynab_cli.adapters.ynab import errors
7
+ from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
8
+ from ynab_cli.adapters.ynab.models.budget_summary_response import BudgetSummaryResponse
9
+ from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
10
+ from ynab_cli.adapters.ynab.types import UNSET, Response, Unset
11
+
12
+
13
+ def _get_kwargs(
14
+ *,
15
+ include_accounts: Unset | bool = UNSET,
16
+ ) -> dict[str, Any]:
17
+ params: dict[str, Any] = {}
18
+
19
+ params["include_accounts"] = include_accounts
20
+
21
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
22
+
23
+ _kwargs: dict[str, Any] = {
24
+ "method": "get",
25
+ "url": "/budgets",
26
+ "params": params,
27
+ }
28
+
29
+ return _kwargs
30
+
31
+
32
+ def _parse_response(
33
+ *, client: AuthenticatedClient | Client, response: httpx.Response
34
+ ) -> BudgetSummaryResponse | ErrorResponse | None:
35
+ if response.status_code == 200:
36
+ response_200 = BudgetSummaryResponse.from_dict(response.json())
37
+
38
+ return response_200
39
+ if response.status_code == 404:
40
+ response_404 = ErrorResponse.from_dict(response.json())
41
+
42
+ return response_404
43
+ if client.raise_on_unexpected_status:
44
+ raise errors.UnexpectedStatusError(response.status_code, response.content)
45
+ else:
46
+ return None
47
+
48
+
49
+ def _build_response(
50
+ *, client: AuthenticatedClient | Client, response: httpx.Response
51
+ ) -> Response[BudgetSummaryResponse | ErrorResponse]:
52
+ return Response(
53
+ status_code=HTTPStatus(response.status_code),
54
+ content=response.content,
55
+ headers=response.headers,
56
+ parsed=_parse_response(client=client, response=response),
57
+ )
58
+
59
+
60
+ def sync_detailed(
61
+ *,
62
+ client: AuthenticatedClient | Client,
63
+ include_accounts: Unset | bool = UNSET,
64
+ ) -> Response[BudgetSummaryResponse | ErrorResponse]:
65
+ """List budgets
66
+
67
+ Returns budgets list with summary information
68
+
69
+ Args:
70
+ include_accounts (Union[Unset, bool]):
71
+
72
+ Raises:
73
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
74
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
75
+
76
+ Returns:
77
+ Response[Union[BudgetSummaryResponse, ErrorResponse]]
78
+ """
79
+
80
+ kwargs = _get_kwargs(
81
+ include_accounts=include_accounts,
82
+ )
83
+
84
+ response = client.get_httpx_client().request(
85
+ **kwargs,
86
+ )
87
+
88
+ return _build_response(client=client, response=response)
89
+
90
+
91
+ def sync(
92
+ *,
93
+ client: AuthenticatedClient | Client,
94
+ include_accounts: Unset | bool = UNSET,
95
+ ) -> BudgetSummaryResponse | ErrorResponse | None:
96
+ """List budgets
97
+
98
+ Returns budgets list with summary information
99
+
100
+ Args:
101
+ include_accounts (Union[Unset, bool]):
102
+
103
+ Raises:
104
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
105
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
106
+
107
+ Returns:
108
+ Union[BudgetSummaryResponse, ErrorResponse]
109
+ """
110
+
111
+ return sync_detailed(
112
+ client=client,
113
+ include_accounts=include_accounts,
114
+ ).parsed
115
+
116
+
117
+ async def asyncio_detailed(
118
+ *,
119
+ client: AuthenticatedClient | Client,
120
+ include_accounts: Unset | bool = UNSET,
121
+ ) -> Response[BudgetSummaryResponse | ErrorResponse]:
122
+ """List budgets
123
+
124
+ Returns budgets list with summary information
125
+
126
+ Args:
127
+ include_accounts (Union[Unset, bool]):
128
+
129
+ Raises:
130
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
131
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
132
+
133
+ Returns:
134
+ Response[Union[BudgetSummaryResponse, ErrorResponse]]
135
+ """
136
+
137
+ kwargs = _get_kwargs(
138
+ include_accounts=include_accounts,
139
+ )
140
+
141
+ response = await client.get_async_httpx_client().request(**kwargs)
142
+
143
+ return _build_response(client=client, response=response)
144
+
145
+
146
+ async def asyncio(
147
+ *,
148
+ client: AuthenticatedClient | Client,
149
+ include_accounts: Unset | bool = UNSET,
150
+ ) -> BudgetSummaryResponse | ErrorResponse | None:
151
+ """List budgets
152
+
153
+ Returns budgets list with summary information
154
+
155
+ Args:
156
+ include_accounts (Union[Unset, bool]):
157
+
158
+ Raises:
159
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
160
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
161
+
162
+ Returns:
163
+ Union[BudgetSummaryResponse, ErrorResponse]
164
+ """
165
+
166
+ return (
167
+ await asyncio_detailed(
168
+ client=client,
169
+ include_accounts=include_accounts,
170
+ )
171
+ ).parsed
@@ -0,0 +1 @@
1
+ """Contains endpoint functions for accessing the API"""
@@ -0,0 +1,188 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ynab_cli.adapters.ynab import errors
7
+ from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
8
+ from ynab_cli.adapters.ynab.models.categories_response import CategoriesResponse
9
+ from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
10
+ from ynab_cli.adapters.ynab.types import UNSET, Response, Unset
11
+
12
+
13
+ def _get_kwargs(
14
+ budget_id: str,
15
+ *,
16
+ last_knowledge_of_server: Unset | int = UNSET,
17
+ ) -> dict[str, Any]:
18
+ params: dict[str, Any] = {}
19
+
20
+ params["last_knowledge_of_server"] = last_knowledge_of_server
21
+
22
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
23
+
24
+ _kwargs: dict[str, Any] = {
25
+ "method": "get",
26
+ "url": f"/budgets/{budget_id}/categories",
27
+ "params": params,
28
+ }
29
+
30
+ return _kwargs
31
+
32
+
33
+ def _parse_response(
34
+ *, client: AuthenticatedClient | Client, response: httpx.Response
35
+ ) -> CategoriesResponse | ErrorResponse | None:
36
+ if response.status_code == 200:
37
+ response_200 = CategoriesResponse.from_dict(response.json())
38
+
39
+ return response_200
40
+ if response.status_code == 404:
41
+ response_404 = ErrorResponse.from_dict(response.json())
42
+
43
+ return response_404
44
+ if client.raise_on_unexpected_status:
45
+ raise errors.UnexpectedStatusError(response.status_code, response.content)
46
+ else:
47
+ return None
48
+
49
+
50
+ def _build_response(
51
+ *, client: AuthenticatedClient | Client, response: httpx.Response
52
+ ) -> Response[CategoriesResponse | ErrorResponse]:
53
+ return Response(
54
+ status_code=HTTPStatus(response.status_code),
55
+ content=response.content,
56
+ headers=response.headers,
57
+ parsed=_parse_response(client=client, response=response),
58
+ )
59
+
60
+
61
+ def sync_detailed(
62
+ budget_id: str,
63
+ *,
64
+ client: AuthenticatedClient | Client,
65
+ last_knowledge_of_server: Unset | int = UNSET,
66
+ ) -> Response[CategoriesResponse | ErrorResponse]:
67
+ """List categories
68
+
69
+ Returns all categories grouped by category group. Amounts (budgeted, activity, balance, etc.) are
70
+ specific to the current budget month (UTC).
71
+
72
+ Args:
73
+ budget_id (str):
74
+ last_knowledge_of_server (Union[Unset, int]):
75
+
76
+ Raises:
77
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
78
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
79
+
80
+ Returns:
81
+ Response[Union[CategoriesResponse, ErrorResponse]]
82
+ """
83
+
84
+ kwargs = _get_kwargs(
85
+ budget_id=budget_id,
86
+ last_knowledge_of_server=last_knowledge_of_server,
87
+ )
88
+
89
+ response = client.get_httpx_client().request(
90
+ **kwargs,
91
+ )
92
+
93
+ return _build_response(client=client, response=response)
94
+
95
+
96
+ def sync(
97
+ budget_id: str,
98
+ *,
99
+ client: AuthenticatedClient | Client,
100
+ last_knowledge_of_server: Unset | int = UNSET,
101
+ ) -> CategoriesResponse | ErrorResponse | None:
102
+ """List categories
103
+
104
+ Returns all categories grouped by category group. Amounts (budgeted, activity, balance, etc.) are
105
+ specific to the current budget month (UTC).
106
+
107
+ Args:
108
+ budget_id (str):
109
+ last_knowledge_of_server (Union[Unset, int]):
110
+
111
+ Raises:
112
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
113
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
114
+
115
+ Returns:
116
+ Union[CategoriesResponse, ErrorResponse]
117
+ """
118
+
119
+ return sync_detailed(
120
+ budget_id=budget_id,
121
+ client=client,
122
+ last_knowledge_of_server=last_knowledge_of_server,
123
+ ).parsed
124
+
125
+
126
+ async def asyncio_detailed(
127
+ budget_id: str,
128
+ *,
129
+ client: AuthenticatedClient | Client,
130
+ last_knowledge_of_server: Unset | int = UNSET,
131
+ ) -> Response[CategoriesResponse | ErrorResponse]:
132
+ """List categories
133
+
134
+ Returns all categories grouped by category group. Amounts (budgeted, activity, balance, etc.) are
135
+ specific to the current budget month (UTC).
136
+
137
+ Args:
138
+ budget_id (str):
139
+ last_knowledge_of_server (Union[Unset, int]):
140
+
141
+ Raises:
142
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
143
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
144
+
145
+ Returns:
146
+ Response[Union[CategoriesResponse, ErrorResponse]]
147
+ """
148
+
149
+ kwargs = _get_kwargs(
150
+ budget_id=budget_id,
151
+ last_knowledge_of_server=last_knowledge_of_server,
152
+ )
153
+
154
+ response = await client.get_async_httpx_client().request(**kwargs)
155
+
156
+ return _build_response(client=client, response=response)
157
+
158
+
159
+ async def asyncio(
160
+ budget_id: str,
161
+ *,
162
+ client: AuthenticatedClient | Client,
163
+ last_knowledge_of_server: Unset | int = UNSET,
164
+ ) -> CategoriesResponse | ErrorResponse | None:
165
+ """List categories
166
+
167
+ Returns all categories grouped by category group. Amounts (budgeted, activity, balance, etc.) are
168
+ specific to the current budget month (UTC).
169
+
170
+ Args:
171
+ budget_id (str):
172
+ last_knowledge_of_server (Union[Unset, int]):
173
+
174
+ Raises:
175
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
176
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
177
+
178
+ Returns:
179
+ Union[CategoriesResponse, ErrorResponse]
180
+ """
181
+
182
+ return (
183
+ await asyncio_detailed(
184
+ budget_id=budget_id,
185
+ client=client,
186
+ last_knowledge_of_server=last_knowledge_of_server,
187
+ )
188
+ ).parsed