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,176 @@
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.error_response import ErrorResponse
9
+ from ynab_cli.adapters.ynab.models.transaction_response import TransactionResponse
10
+ from ynab_cli.adapters.ynab.types import Response
11
+
12
+
13
+ def _get_kwargs(
14
+ budget_id: str,
15
+ transaction_id: str,
16
+ ) -> dict[str, Any]:
17
+ _kwargs: dict[str, Any] = {
18
+ "method": "get",
19
+ "url": f"/budgets/{budget_id}/transactions/{transaction_id}",
20
+ }
21
+
22
+ return _kwargs
23
+
24
+
25
+ def _parse_response(
26
+ *, client: AuthenticatedClient | Client, response: httpx.Response
27
+ ) -> ErrorResponse | TransactionResponse | None:
28
+ if response.status_code == 200:
29
+ response_200 = TransactionResponse.from_dict(response.json())
30
+
31
+ return response_200
32
+ if response.status_code == 404:
33
+ response_404 = ErrorResponse.from_dict(response.json())
34
+
35
+ return response_404
36
+ if client.raise_on_unexpected_status:
37
+ raise errors.UnexpectedStatusError(response.status_code, response.content)
38
+ else:
39
+ return None
40
+
41
+
42
+ def _build_response(
43
+ *, client: AuthenticatedClient | Client, response: httpx.Response
44
+ ) -> Response[ErrorResponse | TransactionResponse]:
45
+ return Response(
46
+ status_code=HTTPStatus(response.status_code),
47
+ content=response.content,
48
+ headers=response.headers,
49
+ parsed=_parse_response(client=client, response=response),
50
+ )
51
+
52
+
53
+ def sync_detailed(
54
+ budget_id: str,
55
+ transaction_id: str,
56
+ *,
57
+ client: AuthenticatedClient | Client,
58
+ ) -> Response[ErrorResponse | TransactionResponse]:
59
+ """Single transaction
60
+
61
+ Returns a single transaction
62
+
63
+ Args:
64
+ budget_id (str):
65
+ transaction_id (str):
66
+
67
+ Raises:
68
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
69
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
70
+
71
+ Returns:
72
+ Response[Union[ErrorResponse, TransactionResponse]]
73
+ """
74
+
75
+ kwargs = _get_kwargs(
76
+ budget_id=budget_id,
77
+ transaction_id=transaction_id,
78
+ )
79
+
80
+ response = client.get_httpx_client().request(
81
+ **kwargs,
82
+ )
83
+
84
+ return _build_response(client=client, response=response)
85
+
86
+
87
+ def sync(
88
+ budget_id: str,
89
+ transaction_id: str,
90
+ *,
91
+ client: AuthenticatedClient | Client,
92
+ ) -> ErrorResponse | TransactionResponse | None:
93
+ """Single transaction
94
+
95
+ Returns a single transaction
96
+
97
+ Args:
98
+ budget_id (str):
99
+ transaction_id (str):
100
+
101
+ Raises:
102
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
103
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
104
+
105
+ Returns:
106
+ Union[ErrorResponse, TransactionResponse]
107
+ """
108
+
109
+ return sync_detailed(
110
+ budget_id=budget_id,
111
+ transaction_id=transaction_id,
112
+ client=client,
113
+ ).parsed
114
+
115
+
116
+ async def asyncio_detailed(
117
+ budget_id: str,
118
+ transaction_id: str,
119
+ *,
120
+ client: AuthenticatedClient | Client,
121
+ ) -> Response[ErrorResponse | TransactionResponse]:
122
+ """Single transaction
123
+
124
+ Returns a single transaction
125
+
126
+ Args:
127
+ budget_id (str):
128
+ transaction_id (str):
129
+
130
+ Raises:
131
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
132
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
133
+
134
+ Returns:
135
+ Response[Union[ErrorResponse, TransactionResponse]]
136
+ """
137
+
138
+ kwargs = _get_kwargs(
139
+ budget_id=budget_id,
140
+ transaction_id=transaction_id,
141
+ )
142
+
143
+ response = await client.get_async_httpx_client().request(**kwargs)
144
+
145
+ return _build_response(client=client, response=response)
146
+
147
+
148
+ async def asyncio(
149
+ budget_id: str,
150
+ transaction_id: str,
151
+ *,
152
+ client: AuthenticatedClient | Client,
153
+ ) -> ErrorResponse | TransactionResponse | None:
154
+ """Single transaction
155
+
156
+ Returns a single transaction
157
+
158
+ Args:
159
+ budget_id (str):
160
+ transaction_id (str):
161
+
162
+ Raises:
163
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
164
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
165
+
166
+ Returns:
167
+ Union[ErrorResponse, TransactionResponse]
168
+ """
169
+
170
+ return (
171
+ await asyncio_detailed(
172
+ budget_id=budget_id,
173
+ transaction_id=transaction_id,
174
+ client=client,
175
+ )
176
+ ).parsed
@@ -0,0 +1,227 @@
1
+ import datetime
2
+ from http import HTTPStatus
3
+ from typing import Any
4
+
5
+ import httpx
6
+
7
+ from ynab_cli.adapters.ynab import errors
8
+ from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
9
+ from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
10
+ from ynab_cli.adapters.ynab.models.get_transactions_type import GetTransactionsType
11
+ from ynab_cli.adapters.ynab.models.transactions_response import TransactionsResponse
12
+ from ynab_cli.adapters.ynab.types import UNSET, Response, Unset
13
+
14
+
15
+ def _get_kwargs(
16
+ budget_id: str,
17
+ *,
18
+ since_date: Unset | datetime.date = UNSET,
19
+ type_: Unset | GetTransactionsType = UNSET,
20
+ last_knowledge_of_server: Unset | int = UNSET,
21
+ ) -> dict[str, Any]:
22
+ params: dict[str, Any] = {}
23
+
24
+ json_since_date: Unset | str = UNSET
25
+ if not isinstance(since_date, Unset):
26
+ json_since_date = since_date.isoformat()
27
+ params["since_date"] = json_since_date
28
+
29
+ json_type_: Unset | str = UNSET
30
+ if not isinstance(type_, Unset):
31
+ json_type_ = type_.value
32
+
33
+ params["type"] = json_type_
34
+
35
+ params["last_knowledge_of_server"] = last_knowledge_of_server
36
+
37
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
38
+
39
+ _kwargs: dict[str, Any] = {
40
+ "method": "get",
41
+ "url": f"/budgets/{budget_id}/transactions",
42
+ "params": params,
43
+ }
44
+
45
+ return _kwargs
46
+
47
+
48
+ def _parse_response(
49
+ *, client: AuthenticatedClient | Client, response: httpx.Response
50
+ ) -> ErrorResponse | TransactionsResponse | None:
51
+ if response.status_code == 200:
52
+ response_200 = TransactionsResponse.from_dict(response.json())
53
+
54
+ return response_200
55
+ if response.status_code == 400:
56
+ response_400 = ErrorResponse.from_dict(response.json())
57
+
58
+ return response_400
59
+ if response.status_code == 404:
60
+ response_404 = ErrorResponse.from_dict(response.json())
61
+
62
+ return response_404
63
+ if client.raise_on_unexpected_status:
64
+ raise errors.UnexpectedStatusError(response.status_code, response.content)
65
+ else:
66
+ return None
67
+
68
+
69
+ def _build_response(
70
+ *, client: AuthenticatedClient | Client, response: httpx.Response
71
+ ) -> Response[ErrorResponse | TransactionsResponse]:
72
+ return Response(
73
+ status_code=HTTPStatus(response.status_code),
74
+ content=response.content,
75
+ headers=response.headers,
76
+ parsed=_parse_response(client=client, response=response),
77
+ )
78
+
79
+
80
+ def sync_detailed(
81
+ budget_id: str,
82
+ *,
83
+ client: AuthenticatedClient | Client,
84
+ since_date: Unset | datetime.date = UNSET,
85
+ type_: Unset | GetTransactionsType = UNSET,
86
+ last_knowledge_of_server: Unset | int = UNSET,
87
+ ) -> Response[ErrorResponse | TransactionsResponse]:
88
+ """List transactions
89
+
90
+ Returns budget transactions, excluding any pending transactions
91
+
92
+ Args:
93
+ budget_id (str):
94
+ since_date (Union[Unset, datetime.date]):
95
+ type_ (Union[Unset, GetTransactionsType]):
96
+ last_knowledge_of_server (Union[Unset, int]):
97
+
98
+ Raises:
99
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
100
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
101
+
102
+ Returns:
103
+ Response[Union[ErrorResponse, TransactionsResponse]]
104
+ """
105
+
106
+ kwargs = _get_kwargs(
107
+ budget_id=budget_id,
108
+ since_date=since_date,
109
+ type_=type_,
110
+ last_knowledge_of_server=last_knowledge_of_server,
111
+ )
112
+
113
+ response = client.get_httpx_client().request(
114
+ **kwargs,
115
+ )
116
+
117
+ return _build_response(client=client, response=response)
118
+
119
+
120
+ def sync(
121
+ budget_id: str,
122
+ *,
123
+ client: AuthenticatedClient | Client,
124
+ since_date: Unset | datetime.date = UNSET,
125
+ type_: Unset | GetTransactionsType = UNSET,
126
+ last_knowledge_of_server: Unset | int = UNSET,
127
+ ) -> ErrorResponse | TransactionsResponse | None:
128
+ """List transactions
129
+
130
+ Returns budget transactions, excluding any pending transactions
131
+
132
+ Args:
133
+ budget_id (str):
134
+ since_date (Union[Unset, datetime.date]):
135
+ type_ (Union[Unset, GetTransactionsType]):
136
+ last_knowledge_of_server (Union[Unset, int]):
137
+
138
+ Raises:
139
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
140
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
141
+
142
+ Returns:
143
+ Union[ErrorResponse, TransactionsResponse]
144
+ """
145
+
146
+ return sync_detailed(
147
+ budget_id=budget_id,
148
+ client=client,
149
+ since_date=since_date,
150
+ type_=type_,
151
+ last_knowledge_of_server=last_knowledge_of_server,
152
+ ).parsed
153
+
154
+
155
+ async def asyncio_detailed(
156
+ budget_id: str,
157
+ *,
158
+ client: AuthenticatedClient | Client,
159
+ since_date: Unset | datetime.date = UNSET,
160
+ type_: Unset | GetTransactionsType = UNSET,
161
+ last_knowledge_of_server: Unset | int = UNSET,
162
+ ) -> Response[ErrorResponse | TransactionsResponse]:
163
+ """List transactions
164
+
165
+ Returns budget transactions, excluding any pending transactions
166
+
167
+ Args:
168
+ budget_id (str):
169
+ since_date (Union[Unset, datetime.date]):
170
+ type_ (Union[Unset, GetTransactionsType]):
171
+ last_knowledge_of_server (Union[Unset, int]):
172
+
173
+ Raises:
174
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
175
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
176
+
177
+ Returns:
178
+ Response[Union[ErrorResponse, TransactionsResponse]]
179
+ """
180
+
181
+ kwargs = _get_kwargs(
182
+ budget_id=budget_id,
183
+ since_date=since_date,
184
+ type_=type_,
185
+ last_knowledge_of_server=last_knowledge_of_server,
186
+ )
187
+
188
+ response = await client.get_async_httpx_client().request(**kwargs)
189
+
190
+ return _build_response(client=client, response=response)
191
+
192
+
193
+ async def asyncio(
194
+ budget_id: str,
195
+ *,
196
+ client: AuthenticatedClient | Client,
197
+ since_date: Unset | datetime.date = UNSET,
198
+ type_: Unset | GetTransactionsType = UNSET,
199
+ last_knowledge_of_server: Unset | int = UNSET,
200
+ ) -> ErrorResponse | TransactionsResponse | None:
201
+ """List transactions
202
+
203
+ Returns budget transactions, excluding any pending transactions
204
+
205
+ Args:
206
+ budget_id (str):
207
+ since_date (Union[Unset, datetime.date]):
208
+ type_ (Union[Unset, GetTransactionsType]):
209
+ last_knowledge_of_server (Union[Unset, int]):
210
+
211
+ Raises:
212
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
213
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
214
+
215
+ Returns:
216
+ Union[ErrorResponse, TransactionsResponse]
217
+ """
218
+
219
+ return (
220
+ await asyncio_detailed(
221
+ budget_id=budget_id,
222
+ client=client,
223
+ since_date=since_date,
224
+ type_=type_,
225
+ last_knowledge_of_server=last_knowledge_of_server,
226
+ )
227
+ ).parsed
@@ -0,0 +1,236 @@
1
+ import datetime
2
+ from http import HTTPStatus
3
+ from typing import Any
4
+
5
+ import httpx
6
+
7
+ from ynab_cli.adapters.ynab import errors
8
+ from ynab_cli.adapters.ynab.client import AuthenticatedClient, Client
9
+ from ynab_cli.adapters.ynab.models.error_response import ErrorResponse
10
+ from ynab_cli.adapters.ynab.models.get_transactions_by_account_type import GetTransactionsByAccountType
11
+ from ynab_cli.adapters.ynab.models.transactions_response import TransactionsResponse
12
+ from ynab_cli.adapters.ynab.types import UNSET, Response, Unset
13
+
14
+
15
+ def _get_kwargs(
16
+ budget_id: str,
17
+ account_id: str,
18
+ *,
19
+ since_date: Unset | datetime.date = UNSET,
20
+ type_: Unset | GetTransactionsByAccountType = UNSET,
21
+ last_knowledge_of_server: Unset | int = UNSET,
22
+ ) -> dict[str, Any]:
23
+ params: dict[str, Any] = {}
24
+
25
+ json_since_date: Unset | str = UNSET
26
+ if not isinstance(since_date, Unset):
27
+ json_since_date = since_date.isoformat()
28
+ params["since_date"] = json_since_date
29
+
30
+ json_type_: Unset | str = UNSET
31
+ if not isinstance(type_, Unset):
32
+ json_type_ = type_.value
33
+
34
+ params["type"] = json_type_
35
+
36
+ params["last_knowledge_of_server"] = last_knowledge_of_server
37
+
38
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
39
+
40
+ _kwargs: dict[str, Any] = {
41
+ "method": "get",
42
+ "url": f"/budgets/{budget_id}/accounts/{account_id}/transactions",
43
+ "params": params,
44
+ }
45
+
46
+ return _kwargs
47
+
48
+
49
+ def _parse_response(
50
+ *, client: AuthenticatedClient | Client, response: httpx.Response
51
+ ) -> ErrorResponse | TransactionsResponse | None:
52
+ if response.status_code == 200:
53
+ response_200 = TransactionsResponse.from_dict(response.json())
54
+
55
+ return response_200
56
+ if response.status_code == 404:
57
+ response_404 = ErrorResponse.from_dict(response.json())
58
+
59
+ return response_404
60
+ if client.raise_on_unexpected_status:
61
+ raise errors.UnexpectedStatusError(response.status_code, response.content)
62
+ else:
63
+ return None
64
+
65
+
66
+ def _build_response(
67
+ *, client: AuthenticatedClient | Client, response: httpx.Response
68
+ ) -> Response[ErrorResponse | TransactionsResponse]:
69
+ return Response(
70
+ status_code=HTTPStatus(response.status_code),
71
+ content=response.content,
72
+ headers=response.headers,
73
+ parsed=_parse_response(client=client, response=response),
74
+ )
75
+
76
+
77
+ def sync_detailed(
78
+ budget_id: str,
79
+ account_id: str,
80
+ *,
81
+ client: AuthenticatedClient | Client,
82
+ since_date: Unset | datetime.date = UNSET,
83
+ type_: Unset | GetTransactionsByAccountType = UNSET,
84
+ last_knowledge_of_server: Unset | int = UNSET,
85
+ ) -> Response[ErrorResponse | TransactionsResponse]:
86
+ """List account transactions
87
+
88
+ Returns all transactions for a specified account, excluding any pending transactions
89
+
90
+ Args:
91
+ budget_id (str):
92
+ account_id (str):
93
+ since_date (Union[Unset, datetime.date]):
94
+ type_ (Union[Unset, GetTransactionsByAccountType]):
95
+ last_knowledge_of_server (Union[Unset, int]):
96
+
97
+ Raises:
98
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
99
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
100
+
101
+ Returns:
102
+ Response[Union[ErrorResponse, TransactionsResponse]]
103
+ """
104
+
105
+ kwargs = _get_kwargs(
106
+ budget_id=budget_id,
107
+ account_id=account_id,
108
+ since_date=since_date,
109
+ type_=type_,
110
+ last_knowledge_of_server=last_knowledge_of_server,
111
+ )
112
+
113
+ response = client.get_httpx_client().request(
114
+ **kwargs,
115
+ )
116
+
117
+ return _build_response(client=client, response=response)
118
+
119
+
120
+ def sync(
121
+ budget_id: str,
122
+ account_id: str,
123
+ *,
124
+ client: AuthenticatedClient | Client,
125
+ since_date: Unset | datetime.date = UNSET,
126
+ type_: Unset | GetTransactionsByAccountType = UNSET,
127
+ last_knowledge_of_server: Unset | int = UNSET,
128
+ ) -> ErrorResponse | TransactionsResponse | None:
129
+ """List account transactions
130
+
131
+ Returns all transactions for a specified account, excluding any pending transactions
132
+
133
+ Args:
134
+ budget_id (str):
135
+ account_id (str):
136
+ since_date (Union[Unset, datetime.date]):
137
+ type_ (Union[Unset, GetTransactionsByAccountType]):
138
+ last_knowledge_of_server (Union[Unset, int]):
139
+
140
+ Raises:
141
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
142
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
143
+
144
+ Returns:
145
+ Union[ErrorResponse, TransactionsResponse]
146
+ """
147
+
148
+ return sync_detailed(
149
+ budget_id=budget_id,
150
+ account_id=account_id,
151
+ client=client,
152
+ since_date=since_date,
153
+ type_=type_,
154
+ last_knowledge_of_server=last_knowledge_of_server,
155
+ ).parsed
156
+
157
+
158
+ async def asyncio_detailed(
159
+ budget_id: str,
160
+ account_id: str,
161
+ *,
162
+ client: AuthenticatedClient | Client,
163
+ since_date: Unset | datetime.date = UNSET,
164
+ type_: Unset | GetTransactionsByAccountType = UNSET,
165
+ last_knowledge_of_server: Unset | int = UNSET,
166
+ ) -> Response[ErrorResponse | TransactionsResponse]:
167
+ """List account transactions
168
+
169
+ Returns all transactions for a specified account, excluding any pending transactions
170
+
171
+ Args:
172
+ budget_id (str):
173
+ account_id (str):
174
+ since_date (Union[Unset, datetime.date]):
175
+ type_ (Union[Unset, GetTransactionsByAccountType]):
176
+ last_knowledge_of_server (Union[Unset, int]):
177
+
178
+ Raises:
179
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
180
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
181
+
182
+ Returns:
183
+ Response[Union[ErrorResponse, TransactionsResponse]]
184
+ """
185
+
186
+ kwargs = _get_kwargs(
187
+ budget_id=budget_id,
188
+ account_id=account_id,
189
+ since_date=since_date,
190
+ type_=type_,
191
+ last_knowledge_of_server=last_knowledge_of_server,
192
+ )
193
+
194
+ response = await client.get_async_httpx_client().request(**kwargs)
195
+
196
+ return _build_response(client=client, response=response)
197
+
198
+
199
+ async def asyncio(
200
+ budget_id: str,
201
+ account_id: str,
202
+ *,
203
+ client: AuthenticatedClient | Client,
204
+ since_date: Unset | datetime.date = UNSET,
205
+ type_: Unset | GetTransactionsByAccountType = UNSET,
206
+ last_knowledge_of_server: Unset | int = UNSET,
207
+ ) -> ErrorResponse | TransactionsResponse | None:
208
+ """List account transactions
209
+
210
+ Returns all transactions for a specified account, excluding any pending transactions
211
+
212
+ Args:
213
+ budget_id (str):
214
+ account_id (str):
215
+ since_date (Union[Unset, datetime.date]):
216
+ type_ (Union[Unset, GetTransactionsByAccountType]):
217
+ last_knowledge_of_server (Union[Unset, int]):
218
+
219
+ Raises:
220
+ errors.UnexpectedStatusError: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
221
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
222
+
223
+ Returns:
224
+ Union[ErrorResponse, TransactionsResponse]
225
+ """
226
+
227
+ return (
228
+ await asyncio_detailed(
229
+ budget_id=budget_id,
230
+ account_id=account_id,
231
+ client=client,
232
+ since_date=since_date,
233
+ type_=type_,
234
+ last_knowledge_of_server=last_knowledge_of_server,
235
+ )
236
+ ).parsed