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