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,259 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any, TypeVar, cast
3
+ from uuid import UUID
4
+
5
+ from attrs import define as _attrs_define
6
+ from attrs import field as _attrs_field
7
+
8
+ from ynab_cli.adapters.ynab.types import UNSET, Unset
9
+
10
+ T = TypeVar("T", bound="SubTransaction")
11
+
12
+
13
+ @_attrs_define
14
+ class SubTransaction:
15
+ """
16
+ Attributes:
17
+ id (str):
18
+ transaction_id (str):
19
+ amount (int): The subtransaction amount in milliunits format
20
+ deleted (bool): Whether or not the subtransaction has been deleted. Deleted subtransactions will only be
21
+ included in delta requests.
22
+ memo (Union[None, Unset, str]):
23
+ payee_id (Union[None, UUID, Unset]):
24
+ payee_name (Union[None, Unset, str]):
25
+ category_id (Union[None, UUID, Unset]):
26
+ category_name (Union[None, Unset, str]):
27
+ transfer_account_id (Union[None, UUID, Unset]): If a transfer, the account_id which the subtransaction transfers
28
+ to
29
+ transfer_transaction_id (Union[None, Unset, str]): If a transfer, the id of transaction on the other side of the
30
+ transfer
31
+ """
32
+
33
+ id: str
34
+ transaction_id: str
35
+ amount: int
36
+ deleted: bool
37
+ memo: None | Unset | str = UNSET
38
+ payee_id: None | UUID | Unset = UNSET
39
+ payee_name: None | Unset | str = UNSET
40
+ category_id: None | UUID | Unset = UNSET
41
+ category_name: None | Unset | str = UNSET
42
+ transfer_account_id: None | UUID | Unset = UNSET
43
+ transfer_transaction_id: None | Unset | str = UNSET
44
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
45
+
46
+ def to_dict(self) -> dict[str, Any]:
47
+ id = self.id
48
+
49
+ transaction_id = self.transaction_id
50
+
51
+ amount = self.amount
52
+
53
+ deleted = self.deleted
54
+
55
+ memo: None | Unset | str
56
+ if isinstance(self.memo, Unset):
57
+ memo = UNSET
58
+ else:
59
+ memo = self.memo
60
+
61
+ payee_id: None | Unset | str
62
+ if isinstance(self.payee_id, Unset):
63
+ payee_id = UNSET
64
+ elif isinstance(self.payee_id, UUID):
65
+ payee_id = str(self.payee_id)
66
+ else:
67
+ payee_id = self.payee_id
68
+
69
+ payee_name: None | Unset | str
70
+ if isinstance(self.payee_name, Unset):
71
+ payee_name = UNSET
72
+ else:
73
+ payee_name = self.payee_name
74
+
75
+ category_id: None | Unset | str
76
+ if isinstance(self.category_id, Unset):
77
+ category_id = UNSET
78
+ elif isinstance(self.category_id, UUID):
79
+ category_id = str(self.category_id)
80
+ else:
81
+ category_id = self.category_id
82
+
83
+ category_name: None | Unset | str
84
+ if isinstance(self.category_name, Unset):
85
+ category_name = UNSET
86
+ else:
87
+ category_name = self.category_name
88
+
89
+ transfer_account_id: None | Unset | str
90
+ if isinstance(self.transfer_account_id, Unset):
91
+ transfer_account_id = UNSET
92
+ elif isinstance(self.transfer_account_id, UUID):
93
+ transfer_account_id = str(self.transfer_account_id)
94
+ else:
95
+ transfer_account_id = self.transfer_account_id
96
+
97
+ transfer_transaction_id: None | Unset | str
98
+ if isinstance(self.transfer_transaction_id, Unset):
99
+ transfer_transaction_id = UNSET
100
+ else:
101
+ transfer_transaction_id = self.transfer_transaction_id
102
+
103
+ field_dict: dict[str, Any] = {}
104
+ field_dict.update(self.additional_properties)
105
+ field_dict.update(
106
+ {
107
+ "id": id,
108
+ "transaction_id": transaction_id,
109
+ "amount": amount,
110
+ "deleted": deleted,
111
+ }
112
+ )
113
+ if memo is not UNSET:
114
+ field_dict["memo"] = memo
115
+ if payee_id is not UNSET:
116
+ field_dict["payee_id"] = payee_id
117
+ if payee_name is not UNSET:
118
+ field_dict["payee_name"] = payee_name
119
+ if category_id is not UNSET:
120
+ field_dict["category_id"] = category_id
121
+ if category_name is not UNSET:
122
+ field_dict["category_name"] = category_name
123
+ if transfer_account_id is not UNSET:
124
+ field_dict["transfer_account_id"] = transfer_account_id
125
+ if transfer_transaction_id is not UNSET:
126
+ field_dict["transfer_transaction_id"] = transfer_transaction_id
127
+
128
+ return field_dict
129
+
130
+ @classmethod
131
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
132
+ d = dict(src_dict)
133
+ id = d.pop("id")
134
+
135
+ transaction_id = d.pop("transaction_id")
136
+
137
+ amount = d.pop("amount")
138
+
139
+ deleted = d.pop("deleted")
140
+
141
+ def _parse_memo(data: object) -> None | Unset | str:
142
+ if data is None:
143
+ return data
144
+ if isinstance(data, Unset):
145
+ return data
146
+ return cast(None | Unset | str, data)
147
+
148
+ memo = _parse_memo(d.pop("memo", UNSET))
149
+
150
+ def _parse_payee_id(data: object) -> None | UUID | Unset:
151
+ if data is None:
152
+ return data
153
+ if isinstance(data, Unset):
154
+ return data
155
+ try:
156
+ if not isinstance(data, str):
157
+ raise TypeError()
158
+ payee_id_type_0 = UUID(data)
159
+
160
+ return payee_id_type_0
161
+ except: # noqa: E722
162
+ pass
163
+ return cast(None | UUID | Unset, data)
164
+
165
+ payee_id = _parse_payee_id(d.pop("payee_id", UNSET))
166
+
167
+ def _parse_payee_name(data: object) -> None | Unset | str:
168
+ if data is None:
169
+ return data
170
+ if isinstance(data, Unset):
171
+ return data
172
+ return cast(None | Unset | str, data)
173
+
174
+ payee_name = _parse_payee_name(d.pop("payee_name", UNSET))
175
+
176
+ def _parse_category_id(data: object) -> None | UUID | Unset:
177
+ if data is None:
178
+ return data
179
+ if isinstance(data, Unset):
180
+ return data
181
+ try:
182
+ if not isinstance(data, str):
183
+ raise TypeError()
184
+ category_id_type_0 = UUID(data)
185
+
186
+ return category_id_type_0
187
+ except: # noqa: E722
188
+ pass
189
+ return cast(None | UUID | Unset, data)
190
+
191
+ category_id = _parse_category_id(d.pop("category_id", UNSET))
192
+
193
+ def _parse_category_name(data: object) -> None | Unset | str:
194
+ if data is None:
195
+ return data
196
+ if isinstance(data, Unset):
197
+ return data
198
+ return cast(None | Unset | str, data)
199
+
200
+ category_name = _parse_category_name(d.pop("category_name", UNSET))
201
+
202
+ def _parse_transfer_account_id(data: object) -> None | UUID | Unset:
203
+ if data is None:
204
+ return data
205
+ if isinstance(data, Unset):
206
+ return data
207
+ try:
208
+ if not isinstance(data, str):
209
+ raise TypeError()
210
+ transfer_account_id_type_0 = UUID(data)
211
+
212
+ return transfer_account_id_type_0
213
+ except: # noqa: E722
214
+ pass
215
+ return cast(None | UUID | Unset, data)
216
+
217
+ transfer_account_id = _parse_transfer_account_id(d.pop("transfer_account_id", UNSET))
218
+
219
+ def _parse_transfer_transaction_id(data: object) -> None | Unset | str:
220
+ if data is None:
221
+ return data
222
+ if isinstance(data, Unset):
223
+ return data
224
+ return cast(None | Unset | str, data)
225
+
226
+ transfer_transaction_id = _parse_transfer_transaction_id(d.pop("transfer_transaction_id", UNSET))
227
+
228
+ sub_transaction = cls(
229
+ id=id,
230
+ transaction_id=transaction_id,
231
+ amount=amount,
232
+ deleted=deleted,
233
+ memo=memo,
234
+ payee_id=payee_id,
235
+ payee_name=payee_name,
236
+ category_id=category_id,
237
+ category_name=category_name,
238
+ transfer_account_id=transfer_account_id,
239
+ transfer_transaction_id=transfer_transaction_id,
240
+ )
241
+
242
+ sub_transaction.additional_properties = d
243
+ return sub_transaction
244
+
245
+ @property
246
+ def additional_keys(self) -> list[str]:
247
+ return list(self.additional_properties.keys())
248
+
249
+ def __getitem__(self, key: str) -> Any:
250
+ return self.additional_properties[key]
251
+
252
+ def __setitem__(self, key: str, value: Any) -> None:
253
+ self.additional_properties[key] = value
254
+
255
+ def __delitem__(self, key: str) -> None:
256
+ del self.additional_properties[key]
257
+
258
+ def __contains__(self, key: str) -> bool:
259
+ return key in self.additional_properties
@@ -0,0 +1,13 @@
1
+ from enum import Enum
2
+
3
+ from typing_extensions import override
4
+
5
+
6
+ class TransactionClearedStatus(str, Enum):
7
+ CLEARED = "cleared"
8
+ RECONCILED = "reconciled"
9
+ UNCLEARED = "uncleared"
10
+
11
+ @override
12
+ def __str__(self) -> str:
13
+ return str(self.value)