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,310 @@
1
+ import datetime
2
+ from collections.abc import Mapping
3
+ from typing import Any, TypeVar, cast
4
+ from uuid import UUID
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+ from dateutil.parser import isoparse
9
+
10
+ from ynab_cli.adapters.ynab.models.scheduled_transaction_summary_frequency import ScheduledTransactionSummaryFrequency
11
+ from ynab_cli.adapters.ynab.models.transaction_flag_color_type_1 import TransactionFlagColorType1
12
+ from ynab_cli.adapters.ynab.models.transaction_flag_color_type_2_type_1 import TransactionFlagColorType2Type1
13
+ from ynab_cli.adapters.ynab.models.transaction_flag_color_type_3_type_1 import TransactionFlagColorType3Type1
14
+ from ynab_cli.adapters.ynab.types import UNSET, Unset
15
+
16
+ T = TypeVar("T", bound="ScheduledTransactionSummary")
17
+
18
+
19
+ @_attrs_define
20
+ class ScheduledTransactionSummary:
21
+ """
22
+ Attributes:
23
+ id (UUID):
24
+ date_first (datetime.date): The first date for which the Scheduled Transaction was scheduled.
25
+ date_next (datetime.date): The next date for which the Scheduled Transaction is scheduled.
26
+ frequency (ScheduledTransactionSummaryFrequency):
27
+ amount (int): The scheduled transaction amount in milliunits format
28
+ account_id (UUID):
29
+ deleted (bool): Whether or not the scheduled transaction has been deleted. Deleted scheduled transactions will
30
+ only be included in delta requests.
31
+ memo (Union[None, Unset, str]):
32
+ flag_color (Union[None, TransactionFlagColorType1, TransactionFlagColorType2Type1,
33
+ TransactionFlagColorType3Type1, Unset]): The transaction flag
34
+ flag_name (Union[None, Unset, str]): The customized name of a transaction flag
35
+ payee_id (Union[None, UUID, Unset]):
36
+ category_id (Union[None, UUID, Unset]):
37
+ transfer_account_id (Union[None, UUID, Unset]): If a transfer, the account_id which the scheduled transaction
38
+ transfers to
39
+ """
40
+
41
+ id: UUID
42
+ date_first: datetime.date
43
+ date_next: datetime.date
44
+ frequency: ScheduledTransactionSummaryFrequency
45
+ amount: int
46
+ account_id: UUID
47
+ deleted: bool
48
+ memo: None | Unset | str = UNSET
49
+ flag_color: (
50
+ None | TransactionFlagColorType1 | TransactionFlagColorType2Type1 | TransactionFlagColorType3Type1 | Unset
51
+ ) = UNSET
52
+ flag_name: None | Unset | str = UNSET
53
+ payee_id: None | UUID | Unset = UNSET
54
+ category_id: None | UUID | Unset = UNSET
55
+ transfer_account_id: None | UUID | Unset = UNSET
56
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
57
+
58
+ def to_dict(self) -> dict[str, Any]:
59
+ id = str(self.id)
60
+
61
+ date_first = self.date_first.isoformat()
62
+
63
+ date_next = self.date_next.isoformat()
64
+
65
+ frequency = self.frequency.value
66
+
67
+ amount = self.amount
68
+
69
+ account_id = str(self.account_id)
70
+
71
+ deleted = self.deleted
72
+
73
+ memo: None | Unset | str
74
+ if isinstance(self.memo, Unset):
75
+ memo = UNSET
76
+ else:
77
+ memo = self.memo
78
+
79
+ flag_color: None | Unset | str
80
+ if isinstance(self.flag_color, Unset):
81
+ flag_color = UNSET
82
+ elif isinstance(self.flag_color, TransactionFlagColorType1):
83
+ flag_color = self.flag_color.value
84
+ elif isinstance(self.flag_color, TransactionFlagColorType2Type1):
85
+ flag_color = self.flag_color.value
86
+ elif isinstance(self.flag_color, TransactionFlagColorType3Type1):
87
+ flag_color = self.flag_color.value
88
+ else:
89
+ flag_color = self.flag_color
90
+
91
+ flag_name: None | Unset | str
92
+ if isinstance(self.flag_name, Unset):
93
+ flag_name = UNSET
94
+ else:
95
+ flag_name = self.flag_name
96
+
97
+ payee_id: None | Unset | str
98
+ if isinstance(self.payee_id, Unset):
99
+ payee_id = UNSET
100
+ elif isinstance(self.payee_id, UUID):
101
+ payee_id = str(self.payee_id)
102
+ else:
103
+ payee_id = self.payee_id
104
+
105
+ category_id: None | Unset | str
106
+ if isinstance(self.category_id, Unset):
107
+ category_id = UNSET
108
+ elif isinstance(self.category_id, UUID):
109
+ category_id = str(self.category_id)
110
+ else:
111
+ category_id = self.category_id
112
+
113
+ transfer_account_id: None | Unset | str
114
+ if isinstance(self.transfer_account_id, Unset):
115
+ transfer_account_id = UNSET
116
+ elif isinstance(self.transfer_account_id, UUID):
117
+ transfer_account_id = str(self.transfer_account_id)
118
+ else:
119
+ transfer_account_id = self.transfer_account_id
120
+
121
+ field_dict: dict[str, Any] = {}
122
+ field_dict.update(self.additional_properties)
123
+ field_dict.update(
124
+ {
125
+ "id": id,
126
+ "date_first": date_first,
127
+ "date_next": date_next,
128
+ "frequency": frequency,
129
+ "amount": amount,
130
+ "account_id": account_id,
131
+ "deleted": deleted,
132
+ }
133
+ )
134
+ if memo is not UNSET:
135
+ field_dict["memo"] = memo
136
+ if flag_color is not UNSET:
137
+ field_dict["flag_color"] = flag_color
138
+ if flag_name is not UNSET:
139
+ field_dict["flag_name"] = flag_name
140
+ if payee_id is not UNSET:
141
+ field_dict["payee_id"] = payee_id
142
+ if category_id is not UNSET:
143
+ field_dict["category_id"] = category_id
144
+ if transfer_account_id is not UNSET:
145
+ field_dict["transfer_account_id"] = transfer_account_id
146
+
147
+ return field_dict
148
+
149
+ @classmethod
150
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
151
+ d = dict(src_dict)
152
+ id = UUID(d.pop("id"))
153
+
154
+ date_first = isoparse(d.pop("date_first")).date()
155
+
156
+ date_next = isoparse(d.pop("date_next")).date()
157
+
158
+ frequency = ScheduledTransactionSummaryFrequency(d.pop("frequency"))
159
+
160
+ amount = d.pop("amount")
161
+
162
+ account_id = UUID(d.pop("account_id"))
163
+
164
+ deleted = d.pop("deleted")
165
+
166
+ def _parse_memo(data: object) -> None | Unset | str:
167
+ if data is None:
168
+ return data
169
+ if isinstance(data, Unset):
170
+ return data
171
+ return cast(None | Unset | str, data)
172
+
173
+ memo = _parse_memo(d.pop("memo", UNSET))
174
+
175
+ def _parse_flag_color(
176
+ data: object,
177
+ ) -> None | TransactionFlagColorType1 | TransactionFlagColorType2Type1 | TransactionFlagColorType3Type1 | Unset:
178
+ if data is None:
179
+ return data
180
+ if isinstance(data, Unset):
181
+ return data
182
+ try:
183
+ if not isinstance(data, str):
184
+ raise TypeError()
185
+ componentsschemas_transaction_flag_color_type_1 = TransactionFlagColorType1(data)
186
+
187
+ return componentsschemas_transaction_flag_color_type_1
188
+ except: # noqa: E722
189
+ pass
190
+ try:
191
+ if not isinstance(data, str):
192
+ raise TypeError()
193
+ componentsschemas_transaction_flag_color_type_2_type_1 = TransactionFlagColorType2Type1(data)
194
+
195
+ return componentsschemas_transaction_flag_color_type_2_type_1
196
+ except: # noqa: E722
197
+ pass
198
+ try:
199
+ if not isinstance(data, str):
200
+ raise TypeError()
201
+ componentsschemas_transaction_flag_color_type_3_type_1 = TransactionFlagColorType3Type1(data)
202
+
203
+ return componentsschemas_transaction_flag_color_type_3_type_1
204
+ except: # noqa: E722
205
+ pass
206
+ return cast(
207
+ None
208
+ | TransactionFlagColorType1
209
+ | TransactionFlagColorType2Type1
210
+ | TransactionFlagColorType3Type1
211
+ | Unset,
212
+ data,
213
+ )
214
+
215
+ flag_color = _parse_flag_color(d.pop("flag_color", UNSET))
216
+
217
+ def _parse_flag_name(data: object) -> None | Unset | str:
218
+ if data is None:
219
+ return data
220
+ if isinstance(data, Unset):
221
+ return data
222
+ return cast(None | Unset | str, data)
223
+
224
+ flag_name = _parse_flag_name(d.pop("flag_name", UNSET))
225
+
226
+ def _parse_payee_id(data: object) -> None | UUID | Unset:
227
+ if data is None:
228
+ return data
229
+ if isinstance(data, Unset):
230
+ return data
231
+ try:
232
+ if not isinstance(data, str):
233
+ raise TypeError()
234
+ payee_id_type_0 = UUID(data)
235
+
236
+ return payee_id_type_0
237
+ except: # noqa: E722
238
+ pass
239
+ return cast(None | UUID | Unset, data)
240
+
241
+ payee_id = _parse_payee_id(d.pop("payee_id", UNSET))
242
+
243
+ def _parse_category_id(data: object) -> None | UUID | Unset:
244
+ if data is None:
245
+ return data
246
+ if isinstance(data, Unset):
247
+ return data
248
+ try:
249
+ if not isinstance(data, str):
250
+ raise TypeError()
251
+ category_id_type_0 = UUID(data)
252
+
253
+ return category_id_type_0
254
+ except: # noqa: E722
255
+ pass
256
+ return cast(None | UUID | Unset, data)
257
+
258
+ category_id = _parse_category_id(d.pop("category_id", UNSET))
259
+
260
+ def _parse_transfer_account_id(data: object) -> None | UUID | Unset:
261
+ if data is None:
262
+ return data
263
+ if isinstance(data, Unset):
264
+ return data
265
+ try:
266
+ if not isinstance(data, str):
267
+ raise TypeError()
268
+ transfer_account_id_type_0 = UUID(data)
269
+
270
+ return transfer_account_id_type_0
271
+ except: # noqa: E722
272
+ pass
273
+ return cast(None | UUID | Unset, data)
274
+
275
+ transfer_account_id = _parse_transfer_account_id(d.pop("transfer_account_id", UNSET))
276
+
277
+ scheduled_transaction_summary = cls(
278
+ id=id,
279
+ date_first=date_first,
280
+ date_next=date_next,
281
+ frequency=frequency,
282
+ amount=amount,
283
+ account_id=account_id,
284
+ deleted=deleted,
285
+ memo=memo,
286
+ flag_color=flag_color,
287
+ flag_name=flag_name,
288
+ payee_id=payee_id,
289
+ category_id=category_id,
290
+ transfer_account_id=transfer_account_id,
291
+ )
292
+
293
+ scheduled_transaction_summary.additional_properties = d
294
+ return scheduled_transaction_summary
295
+
296
+ @property
297
+ def additional_keys(self) -> list[str]:
298
+ return list(self.additional_properties.keys())
299
+
300
+ def __getitem__(self, key: str) -> Any:
301
+ return self.additional_properties[key]
302
+
303
+ def __setitem__(self, key: str, value: Any) -> None:
304
+ self.additional_properties[key] = value
305
+
306
+ def __delitem__(self, key: str) -> None:
307
+ del self.additional_properties[key]
308
+
309
+ def __contains__(self, key: str) -> bool:
310
+ return key in self.additional_properties
@@ -0,0 +1,23 @@
1
+ from enum import Enum
2
+
3
+ from typing_extensions import override
4
+
5
+
6
+ class ScheduledTransactionSummaryFrequency(str, Enum):
7
+ DAILY = "daily"
8
+ EVERY3MONTHS = "every3Months"
9
+ EVERY4MONTHS = "every4Months"
10
+ EVERY4WEEKS = "every4Weeks"
11
+ EVERYOTHERMONTH = "everyOtherMonth"
12
+ EVERYOTHERWEEK = "everyOtherWeek"
13
+ EVERYOTHERYEAR = "everyOtherYear"
14
+ MONTHLY = "monthly"
15
+ NEVER = "never"
16
+ TWICEAMONTH = "twiceAMonth"
17
+ TWICEAYEAR = "twiceAYear"
18
+ WEEKLY = "weekly"
19
+ YEARLY = "yearly"
20
+
21
+ @override
22
+ def __str__(self) -> str:
23
+ return str(self.value)
@@ -0,0 +1,65 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING, Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ if TYPE_CHECKING:
8
+ from ynab_cli.adapters.ynab.models.scheduled_transactions_response_data import ScheduledTransactionsResponseData
9
+
10
+
11
+ T = TypeVar("T", bound="ScheduledTransactionsResponse")
12
+
13
+
14
+ @_attrs_define
15
+ class ScheduledTransactionsResponse:
16
+ """
17
+ Attributes:
18
+ data (ScheduledTransactionsResponseData):
19
+ """
20
+
21
+ data: "ScheduledTransactionsResponseData"
22
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
23
+
24
+ def to_dict(self) -> dict[str, Any]:
25
+ data = self.data.to_dict()
26
+
27
+ field_dict: dict[str, Any] = {}
28
+ field_dict.update(self.additional_properties)
29
+ field_dict.update(
30
+ {
31
+ "data": data,
32
+ }
33
+ )
34
+
35
+ return field_dict
36
+
37
+ @classmethod
38
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
39
+ from ynab_cli.adapters.ynab.models.scheduled_transactions_response_data import ScheduledTransactionsResponseData
40
+
41
+ d = dict(src_dict)
42
+ data = ScheduledTransactionsResponseData.from_dict(d.pop("data"))
43
+
44
+ scheduled_transactions_response = cls(
45
+ data=data,
46
+ )
47
+
48
+ scheduled_transactions_response.additional_properties = d
49
+ return scheduled_transactions_response
50
+
51
+ @property
52
+ def additional_keys(self) -> list[str]:
53
+ return list(self.additional_properties.keys())
54
+
55
+ def __getitem__(self, key: str) -> Any:
56
+ return self.additional_properties[key]
57
+
58
+ def __setitem__(self, key: str, value: Any) -> None:
59
+ self.additional_properties[key] = value
60
+
61
+ def __delitem__(self, key: str) -> None:
62
+ del self.additional_properties[key]
63
+
64
+ def __contains__(self, key: str) -> bool:
65
+ return key in self.additional_properties
@@ -0,0 +1,81 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING, Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ if TYPE_CHECKING:
8
+ from ynab_cli.adapters.ynab.models.scheduled_transaction_detail import ScheduledTransactionDetail
9
+
10
+
11
+ T = TypeVar("T", bound="ScheduledTransactionsResponseData")
12
+
13
+
14
+ @_attrs_define
15
+ class ScheduledTransactionsResponseData:
16
+ """
17
+ Attributes:
18
+ scheduled_transactions (list['ScheduledTransactionDetail']):
19
+ server_knowledge (int): The knowledge of the server
20
+ """
21
+
22
+ scheduled_transactions: list["ScheduledTransactionDetail"]
23
+ server_knowledge: int
24
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
25
+
26
+ def to_dict(self) -> dict[str, Any]:
27
+ scheduled_transactions = []
28
+ for scheduled_transactions_item_data in self.scheduled_transactions:
29
+ scheduled_transactions_item = scheduled_transactions_item_data.to_dict()
30
+ scheduled_transactions.append(scheduled_transactions_item)
31
+
32
+ server_knowledge = self.server_knowledge
33
+
34
+ field_dict: dict[str, Any] = {}
35
+ field_dict.update(self.additional_properties)
36
+ field_dict.update(
37
+ {
38
+ "scheduled_transactions": scheduled_transactions,
39
+ "server_knowledge": server_knowledge,
40
+ }
41
+ )
42
+
43
+ return field_dict
44
+
45
+ @classmethod
46
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
47
+ from ynab_cli.adapters.ynab.models.scheduled_transaction_detail import ScheduledTransactionDetail
48
+
49
+ d = dict(src_dict)
50
+ scheduled_transactions = []
51
+ _scheduled_transactions = d.pop("scheduled_transactions")
52
+ for scheduled_transactions_item_data in _scheduled_transactions:
53
+ scheduled_transactions_item = ScheduledTransactionDetail.from_dict(scheduled_transactions_item_data)
54
+
55
+ scheduled_transactions.append(scheduled_transactions_item)
56
+
57
+ server_knowledge = d.pop("server_knowledge")
58
+
59
+ scheduled_transactions_response_data = cls(
60
+ scheduled_transactions=scheduled_transactions,
61
+ server_knowledge=server_knowledge,
62
+ )
63
+
64
+ scheduled_transactions_response_data.additional_properties = d
65
+ return scheduled_transactions_response_data
66
+
67
+ @property
68
+ def additional_keys(self) -> list[str]:
69
+ return list(self.additional_properties.keys())
70
+
71
+ def __getitem__(self, key: str) -> Any:
72
+ return self.additional_properties[key]
73
+
74
+ def __setitem__(self, key: str, value: Any) -> None:
75
+ self.additional_properties[key] = value
76
+
77
+ def __delitem__(self, key: str) -> None:
78
+ del self.additional_properties[key]
79
+
80
+ def __contains__(self, key: str) -> bool:
81
+ return key in self.additional_properties