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.
- ynab_cli/__init__.py +0 -0
- ynab_cli/adapters/__init__.py +0 -0
- ynab_cli/adapters/rich/__init__.py +0 -0
- ynab_cli/adapters/rich/io.py +38 -0
- ynab_cli/adapters/textual/__init__.py +0 -0
- ynab_cli/adapters/textual/io.py +62 -0
- ynab_cli/adapters/ynab/__init__.py +8 -0
- ynab_cli/adapters/ynab/api/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/accounts/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/accounts/create_account.py +186 -0
- ynab_cli/adapters/ynab/api/accounts/get_account_by_id.py +177 -0
- ynab_cli/adapters/ynab/api/accounts/get_accounts.py +184 -0
- ynab_cli/adapters/ynab/api/budgets/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/budgets/get_budget_by_id.py +188 -0
- ynab_cli/adapters/ynab/api/budgets/get_budget_settings_by_id.py +163 -0
- ynab_cli/adapters/ynab/api/budgets/get_budgets.py +171 -0
- ynab_cli/adapters/ynab/api/categories/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/categories/get_categories.py +188 -0
- ynab_cli/adapters/ynab/api/categories/get_category_by_id.py +180 -0
- ynab_cli/adapters/ynab/api/categories/get_month_category_by_id.py +194 -0
- ynab_cli/adapters/ynab/api/categories/update_category.py +199 -0
- ynab_cli/adapters/ynab/api/categories/update_month_category.py +213 -0
- ynab_cli/adapters/ynab/api/months/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/months/get_budget_month.py +177 -0
- ynab_cli/adapters/ynab/api/months/get_budget_months.py +184 -0
- ynab_cli/adapters/ynab/api/payee_locations/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/payee_locations/get_payee_location_by_id.py +176 -0
- ynab_cli/adapters/ynab/api/payee_locations/get_payee_locations.py +163 -0
- ynab_cli/adapters/ynab/api/payee_locations/get_payee_locations_by_payee.py +176 -0
- ynab_cli/adapters/ynab/api/payees/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/payees/get_payee_by_id.py +176 -0
- ynab_cli/adapters/ynab/api/payees/get_payees.py +184 -0
- ynab_cli/adapters/ynab/api/payees/update_payee.py +199 -0
- ynab_cli/adapters/ynab/api/scheduled_transactions/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/scheduled_transactions/create_scheduled_transaction.py +186 -0
- ynab_cli/adapters/ynab/api/scheduled_transactions/delete_scheduled_transaction.py +176 -0
- ynab_cli/adapters/ynab/api/scheduled_transactions/get_scheduled_transaction_by_id.py +176 -0
- ynab_cli/adapters/ynab/api/scheduled_transactions/get_scheduled_transactions.py +184 -0
- ynab_cli/adapters/ynab/api/scheduled_transactions/update_scheduled_transaction.py +199 -0
- ynab_cli/adapters/ynab/api/transactions/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/transactions/create_transaction.py +202 -0
- ynab_cli/adapters/ynab/api/transactions/delete_transaction.py +176 -0
- ynab_cli/adapters/ynab/api/transactions/get_transaction_by_id.py +176 -0
- ynab_cli/adapters/ynab/api/transactions/get_transactions.py +227 -0
- ynab_cli/adapters/ynab/api/transactions/get_transactions_by_account.py +236 -0
- ynab_cli/adapters/ynab/api/transactions/get_transactions_by_category.py +236 -0
- ynab_cli/adapters/ynab/api/transactions/get_transactions_by_month.py +236 -0
- ynab_cli/adapters/ynab/api/transactions/get_transactions_by_payee.py +236 -0
- ynab_cli/adapters/ynab/api/transactions/import_transactions.py +183 -0
- ynab_cli/adapters/ynab/api/transactions/update_transaction.py +199 -0
- ynab_cli/adapters/ynab/api/transactions/update_transactions.py +177 -0
- ynab_cli/adapters/ynab/api/user/__init__.py +1 -0
- ynab_cli/adapters/ynab/api/user/get_user.py +130 -0
- ynab_cli/adapters/ynab/client.py +268 -0
- ynab_cli/adapters/ynab/errors.py +16 -0
- ynab_cli/adapters/ynab/models/__init__.py +229 -0
- ynab_cli/adapters/ynab/models/account.py +345 -0
- ynab_cli/adapters/ynab/models/account_response.py +65 -0
- ynab_cli/adapters/ynab/models/account_response_data.py +65 -0
- ynab_cli/adapters/ynab/models/account_type.py +23 -0
- ynab_cli/adapters/ynab/models/accounts_response.py +65 -0
- ynab_cli/adapters/ynab/models/accounts_response_data.py +81 -0
- ynab_cli/adapters/ynab/models/budget_detail.py +405 -0
- ynab_cli/adapters/ynab/models/budget_detail_response.py +65 -0
- ynab_cli/adapters/ynab/models/budget_detail_response_data.py +73 -0
- ynab_cli/adapters/ynab/models/budget_settings.py +115 -0
- ynab_cli/adapters/ynab/models/budget_settings_response.py +65 -0
- ynab_cli/adapters/ynab/models/budget_settings_response_data.py +65 -0
- ynab_cli/adapters/ynab/models/budget_summary.py +216 -0
- ynab_cli/adapters/ynab/models/budget_summary_response.py +65 -0
- ynab_cli/adapters/ynab/models/budget_summary_response_data.py +91 -0
- ynab_cli/adapters/ynab/models/bulk_response.py +65 -0
- ynab_cli/adapters/ynab/models/bulk_response_data.py +65 -0
- ynab_cli/adapters/ynab/models/bulk_response_data_bulk.py +68 -0
- ynab_cli/adapters/ynab/models/bulk_transactions.py +75 -0
- ynab_cli/adapters/ynab/models/categories_response.py +65 -0
- ynab_cli/adapters/ynab/models/categories_response_data.py +81 -0
- ynab_cli/adapters/ynab/models/category.py +519 -0
- ynab_cli/adapters/ynab/models/category_goal_type_type_1.py +15 -0
- ynab_cli/adapters/ynab/models/category_goal_type_type_2_type_1.py +15 -0
- ynab_cli/adapters/ynab/models/category_goal_type_type_3_type_1.py +15 -0
- ynab_cli/adapters/ynab/models/category_group.py +85 -0
- ynab_cli/adapters/ynab/models/category_group_with_categories.py +108 -0
- ynab_cli/adapters/ynab/models/category_response.py +65 -0
- ynab_cli/adapters/ynab/models/category_response_data.py +65 -0
- ynab_cli/adapters/ynab/models/currency_format_type_0.py +117 -0
- ynab_cli/adapters/ynab/models/date_format_type_0.py +61 -0
- ynab_cli/adapters/ynab/models/error_detail.py +75 -0
- ynab_cli/adapters/ynab/models/error_response.py +65 -0
- ynab_cli/adapters/ynab/models/existing_transaction.py +322 -0
- ynab_cli/adapters/ynab/models/get_transactions_by_account_type.py +12 -0
- ynab_cli/adapters/ynab/models/get_transactions_by_category_type.py +12 -0
- ynab_cli/adapters/ynab/models/get_transactions_by_month_type.py +12 -0
- ynab_cli/adapters/ynab/models/get_transactions_by_payee_type.py +12 -0
- ynab_cli/adapters/ynab/models/get_transactions_type.py +12 -0
- ynab_cli/adapters/ynab/models/hybrid_transaction.py +567 -0
- ynab_cli/adapters/ynab/models/hybrid_transaction_type.py +12 -0
- ynab_cli/adapters/ynab/models/hybrid_transactions_response.py +65 -0
- ynab_cli/adapters/ynab/models/hybrid_transactions_response_data.py +84 -0
- ynab_cli/adapters/ynab/models/loan_account_periodic_value_type_0.py +44 -0
- ynab_cli/adapters/ynab/models/month_detail.py +168 -0
- ynab_cli/adapters/ynab/models/month_detail_response.py +65 -0
- ynab_cli/adapters/ynab/models/month_detail_response_data.py +65 -0
- ynab_cli/adapters/ynab/models/month_summaries_response.py +65 -0
- ynab_cli/adapters/ynab/models/month_summaries_response_data.py +81 -0
- ynab_cli/adapters/ynab/models/month_summary.py +145 -0
- ynab_cli/adapters/ynab/models/new_transaction.py +352 -0
- ynab_cli/adapters/ynab/models/patch_category_wrapper.py +65 -0
- ynab_cli/adapters/ynab/models/patch_month_category_wrapper.py +65 -0
- ynab_cli/adapters/ynab/models/patch_payee_wrapper.py +65 -0
- ynab_cli/adapters/ynab/models/patch_transactions_wrapper.py +73 -0
- ynab_cli/adapters/ynab/models/payee.py +100 -0
- ynab_cli/adapters/ynab/models/payee_location.py +93 -0
- ynab_cli/adapters/ynab/models/payee_location_response.py +65 -0
- ynab_cli/adapters/ynab/models/payee_location_response_data.py +65 -0
- ynab_cli/adapters/ynab/models/payee_locations_response.py +65 -0
- ynab_cli/adapters/ynab/models/payee_locations_response_data.py +73 -0
- ynab_cli/adapters/ynab/models/payee_response.py +65 -0
- ynab_cli/adapters/ynab/models/payee_response_data.py +65 -0
- ynab_cli/adapters/ynab/models/payees_response.py +65 -0
- ynab_cli/adapters/ynab/models/payees_response_data.py +81 -0
- ynab_cli/adapters/ynab/models/post_account_wrapper.py +65 -0
- ynab_cli/adapters/ynab/models/post_scheduled_transaction_wrapper.py +65 -0
- ynab_cli/adapters/ynab/models/post_transactions_wrapper.py +91 -0
- ynab_cli/adapters/ynab/models/put_scheduled_transaction_wrapper.py +65 -0
- ynab_cli/adapters/ynab/models/put_transaction_wrapper.py +65 -0
- ynab_cli/adapters/ynab/models/save_account.py +77 -0
- ynab_cli/adapters/ynab/models/save_category.py +129 -0
- ynab_cli/adapters/ynab/models/save_category_response.py +65 -0
- ynab_cli/adapters/ynab/models/save_category_response_data.py +73 -0
- ynab_cli/adapters/ynab/models/save_month_category.py +59 -0
- ynab_cli/adapters/ynab/models/save_payee.py +59 -0
- ynab_cli/adapters/ynab/models/save_payee_response.py +65 -0
- ynab_cli/adapters/ynab/models/save_payee_response_data.py +73 -0
- ynab_cli/adapters/ynab/models/save_scheduled_transaction.py +269 -0
- ynab_cli/adapters/ynab/models/save_sub_transaction.py +166 -0
- ynab_cli/adapters/ynab/models/save_transaction_with_id_or_import_id.py +366 -0
- ynab_cli/adapters/ynab/models/save_transaction_with_optional_fields.py +322 -0
- ynab_cli/adapters/ynab/models/save_transactions_response.py +65 -0
- ynab_cli/adapters/ynab/models/save_transactions_response_data.py +123 -0
- ynab_cli/adapters/ynab/models/scheduled_sub_transaction.py +238 -0
- ynab_cli/adapters/ynab/models/scheduled_transaction_detail.py +381 -0
- ynab_cli/adapters/ynab/models/scheduled_transaction_frequency.py +23 -0
- ynab_cli/adapters/ynab/models/scheduled_transaction_response.py +65 -0
- ynab_cli/adapters/ynab/models/scheduled_transaction_response_data.py +65 -0
- ynab_cli/adapters/ynab/models/scheduled_transaction_summary.py +310 -0
- ynab_cli/adapters/ynab/models/scheduled_transaction_summary_frequency.py +23 -0
- ynab_cli/adapters/ynab/models/scheduled_transactions_response.py +65 -0
- ynab_cli/adapters/ynab/models/scheduled_transactions_response_data.py +81 -0
- ynab_cli/adapters/ynab/models/sub_transaction.py +259 -0
- ynab_cli/adapters/ynab/models/transaction_cleared_status.py +13 -0
- ynab_cli/adapters/ynab/models/transaction_detail.py +570 -0
- ynab_cli/adapters/ynab/models/transaction_flag_color_type_1.py +16 -0
- ynab_cli/adapters/ynab/models/transaction_flag_color_type_2_type_1.py +16 -0
- ynab_cli/adapters/ynab/models/transaction_flag_color_type_3_type_1.py +16 -0
- ynab_cli/adapters/ynab/models/transaction_response.py +65 -0
- ynab_cli/adapters/ynab/models/transaction_response_data.py +65 -0
- ynab_cli/adapters/ynab/models/transaction_summary.py +499 -0
- ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_1.py +18 -0
- ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_2_type_1.py +18 -0
- ynab_cli/adapters/ynab/models/transaction_summary_debt_transaction_type_type_3_type_1.py +18 -0
- ynab_cli/adapters/ynab/models/transactions_import_response.py +65 -0
- ynab_cli/adapters/ynab/models/transactions_import_response_data.py +59 -0
- ynab_cli/adapters/ynab/models/transactions_response.py +65 -0
- ynab_cli/adapters/ynab/models/transactions_response_data.py +81 -0
- ynab_cli/adapters/ynab/models/user.py +60 -0
- ynab_cli/adapters/ynab/models/user_response.py +65 -0
- ynab_cli/adapters/ynab/models/user_response_data.py +65 -0
- ynab_cli/adapters/ynab/types.py +46 -0
- ynab_cli/adapters/ynab/util.py +78 -0
- ynab_cli/domain/__init__.py +0 -0
- ynab_cli/domain/constants.py +3 -0
- ynab_cli/domain/models/__init__.py +0 -0
- ynab_cli/domain/models/rules.py +37 -0
- ynab_cli/domain/ports/__init__.py +5 -0
- ynab_cli/domain/ports/io.py +63 -0
- ynab_cli/domain/settings.py +16 -0
- ynab_cli/domain/use_cases/__init__.py +0 -0
- ynab_cli/domain/use_cases/categories.py +105 -0
- ynab_cli/domain/use_cases/payees.py +232 -0
- ynab_cli/domain/use_cases/transactions.py +93 -0
- ynab_cli/host/__init__.py +14 -0
- ynab_cli/host/cli.py +37 -0
- ynab_cli/host/click/__init__.py +0 -0
- ynab_cli/host/click/cli.py +44 -0
- ynab_cli/host/click/commands/__init__.py +0 -0
- ynab_cli/host/click/commands/categories.py +92 -0
- ynab_cli/host/click/commands/payees.py +157 -0
- ynab_cli/host/click/commands/rich/__init__.py +0 -0
- ynab_cli/host/click/commands/rich/progress_table.py +37 -0
- ynab_cli/host/click/commands/transactions.py +76 -0
- ynab_cli/host/constants.py +3 -0
- ynab_cli/host/textual/__init__.py +0 -0
- ynab_cli/host/textual/app.py +98 -0
- ynab_cli/host/textual/app.tcss +47 -0
- ynab_cli/host/textual/cli.py +42 -0
- ynab_cli/host/textual/widgets/__init__.py +58 -0
- ynab_cli/host/textual/widgets/categories.py +90 -0
- ynab_cli/host/textual/widgets/payees.py +154 -0
- ynab_cli/host/textual/widgets/transactions.py +89 -0
- ynab_cli/py.typed +0 -0
- ynab_cli-0.3.0.dist-info/METADATA +102 -0
- ynab_cli-0.3.0.dist-info/RECORD +206 -0
- ynab_cli-0.3.0.dist-info/WHEEL +4 -0
- ynab_cli-0.3.0.dist-info/entry_points.txt +2 -0
- ynab_cli-0.3.0.dist-info/licenses/LICENSE.md +21 -0
|
@@ -0,0 +1,269 @@
|
|
|
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_frequency import ScheduledTransactionFrequency
|
|
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="SaveScheduledTransaction")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@_attrs_define
|
|
20
|
+
class SaveScheduledTransaction:
|
|
21
|
+
"""
|
|
22
|
+
Attributes:
|
|
23
|
+
account_id (UUID):
|
|
24
|
+
date (datetime.date): The scheduled transaction date in ISO format (e.g. 2016-12-01). This should be a future
|
|
25
|
+
date no more than 5 years into the future.
|
|
26
|
+
amount (Union[Unset, int]): The scheduled transaction amount in milliunits format.
|
|
27
|
+
payee_id (Union[None, UUID, Unset]): The payee for the scheduled transaction. To create a transfer between two
|
|
28
|
+
accounts, use the account transfer payee pointing to the target account. Account transfer payees are specified
|
|
29
|
+
as `transfer_payee_id` on the account resource.
|
|
30
|
+
payee_name (Union[None, Unset, str]): The payee name for the the scheduled transaction. If a `payee_name` value
|
|
31
|
+
is provided and `payee_id` has a null value, the `payee_name` value will be used to resolve the payee by either
|
|
32
|
+
(1) a payee with the same name or (2) creation of a new payee.
|
|
33
|
+
category_id (Union[None, UUID, Unset]): The category for the scheduled transaction. Credit Card Payment
|
|
34
|
+
categories are not permitted. Creating a split scheduled transaction is not currently supported.
|
|
35
|
+
memo (Union[None, Unset, str]):
|
|
36
|
+
flag_color (Union[None, TransactionFlagColorType1, TransactionFlagColorType2Type1,
|
|
37
|
+
TransactionFlagColorType3Type1, Unset]): The transaction flag
|
|
38
|
+
frequency (Union[Unset, ScheduledTransactionFrequency]): The scheduled transaction frequency
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
account_id: UUID
|
|
42
|
+
date: datetime.date
|
|
43
|
+
amount: Unset | int = UNSET
|
|
44
|
+
payee_id: None | UUID | Unset = UNSET
|
|
45
|
+
payee_name: None | Unset | str = UNSET
|
|
46
|
+
category_id: None | UUID | Unset = UNSET
|
|
47
|
+
memo: None | Unset | str = UNSET
|
|
48
|
+
flag_color: (
|
|
49
|
+
None | TransactionFlagColorType1 | TransactionFlagColorType2Type1 | TransactionFlagColorType3Type1 | Unset
|
|
50
|
+
) = UNSET
|
|
51
|
+
frequency: Unset | ScheduledTransactionFrequency = UNSET
|
|
52
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
53
|
+
|
|
54
|
+
def to_dict(self) -> dict[str, Any]:
|
|
55
|
+
account_id = str(self.account_id)
|
|
56
|
+
|
|
57
|
+
date = self.date.isoformat()
|
|
58
|
+
|
|
59
|
+
amount = self.amount
|
|
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
|
+
memo: None | Unset | str
|
|
84
|
+
if isinstance(self.memo, Unset):
|
|
85
|
+
memo = UNSET
|
|
86
|
+
else:
|
|
87
|
+
memo = self.memo
|
|
88
|
+
|
|
89
|
+
flag_color: None | Unset | str
|
|
90
|
+
if isinstance(self.flag_color, Unset):
|
|
91
|
+
flag_color = UNSET
|
|
92
|
+
elif isinstance(self.flag_color, TransactionFlagColorType1):
|
|
93
|
+
flag_color = self.flag_color.value
|
|
94
|
+
elif isinstance(self.flag_color, TransactionFlagColorType2Type1):
|
|
95
|
+
flag_color = self.flag_color.value
|
|
96
|
+
elif isinstance(self.flag_color, TransactionFlagColorType3Type1):
|
|
97
|
+
flag_color = self.flag_color.value
|
|
98
|
+
else:
|
|
99
|
+
flag_color = self.flag_color
|
|
100
|
+
|
|
101
|
+
frequency: Unset | str = UNSET
|
|
102
|
+
if not isinstance(self.frequency, Unset):
|
|
103
|
+
frequency = self.frequency.value
|
|
104
|
+
|
|
105
|
+
field_dict: dict[str, Any] = {}
|
|
106
|
+
field_dict.update(self.additional_properties)
|
|
107
|
+
field_dict.update(
|
|
108
|
+
{
|
|
109
|
+
"account_id": account_id,
|
|
110
|
+
"date": date,
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
if amount is not UNSET:
|
|
114
|
+
field_dict["amount"] = amount
|
|
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 memo is not UNSET:
|
|
122
|
+
field_dict["memo"] = memo
|
|
123
|
+
if flag_color is not UNSET:
|
|
124
|
+
field_dict["flag_color"] = flag_color
|
|
125
|
+
if frequency is not UNSET:
|
|
126
|
+
field_dict["frequency"] = frequency
|
|
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
|
+
account_id = UUID(d.pop("account_id"))
|
|
134
|
+
|
|
135
|
+
date = isoparse(d.pop("date")).date()
|
|
136
|
+
|
|
137
|
+
amount = d.pop("amount", 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_memo(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
|
+
memo = _parse_memo(d.pop("memo", UNSET))
|
|
190
|
+
|
|
191
|
+
def _parse_flag_color(
|
|
192
|
+
data: object,
|
|
193
|
+
) -> None | TransactionFlagColorType1 | TransactionFlagColorType2Type1 | TransactionFlagColorType3Type1 | Unset:
|
|
194
|
+
if data is None:
|
|
195
|
+
return data
|
|
196
|
+
if isinstance(data, Unset):
|
|
197
|
+
return data
|
|
198
|
+
try:
|
|
199
|
+
if not isinstance(data, str):
|
|
200
|
+
raise TypeError()
|
|
201
|
+
componentsschemas_transaction_flag_color_type_1 = TransactionFlagColorType1(data)
|
|
202
|
+
|
|
203
|
+
return componentsschemas_transaction_flag_color_type_1
|
|
204
|
+
except: # noqa: E722
|
|
205
|
+
pass
|
|
206
|
+
try:
|
|
207
|
+
if not isinstance(data, str):
|
|
208
|
+
raise TypeError()
|
|
209
|
+
componentsschemas_transaction_flag_color_type_2_type_1 = TransactionFlagColorType2Type1(data)
|
|
210
|
+
|
|
211
|
+
return componentsschemas_transaction_flag_color_type_2_type_1
|
|
212
|
+
except: # noqa: E722
|
|
213
|
+
pass
|
|
214
|
+
try:
|
|
215
|
+
if not isinstance(data, str):
|
|
216
|
+
raise TypeError()
|
|
217
|
+
componentsschemas_transaction_flag_color_type_3_type_1 = TransactionFlagColorType3Type1(data)
|
|
218
|
+
|
|
219
|
+
return componentsschemas_transaction_flag_color_type_3_type_1
|
|
220
|
+
except: # noqa: E722
|
|
221
|
+
pass
|
|
222
|
+
return cast(
|
|
223
|
+
None
|
|
224
|
+
| TransactionFlagColorType1
|
|
225
|
+
| TransactionFlagColorType2Type1
|
|
226
|
+
| TransactionFlagColorType3Type1
|
|
227
|
+
| Unset,
|
|
228
|
+
data,
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
flag_color = _parse_flag_color(d.pop("flag_color", UNSET))
|
|
232
|
+
|
|
233
|
+
_frequency = d.pop("frequency", UNSET)
|
|
234
|
+
frequency: Unset | ScheduledTransactionFrequency
|
|
235
|
+
if isinstance(_frequency, Unset):
|
|
236
|
+
frequency = UNSET
|
|
237
|
+
else:
|
|
238
|
+
frequency = ScheduledTransactionFrequency(_frequency)
|
|
239
|
+
|
|
240
|
+
save_scheduled_transaction = cls(
|
|
241
|
+
account_id=account_id,
|
|
242
|
+
date=date,
|
|
243
|
+
amount=amount,
|
|
244
|
+
payee_id=payee_id,
|
|
245
|
+
payee_name=payee_name,
|
|
246
|
+
category_id=category_id,
|
|
247
|
+
memo=memo,
|
|
248
|
+
flag_color=flag_color,
|
|
249
|
+
frequency=frequency,
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
save_scheduled_transaction.additional_properties = d
|
|
253
|
+
return save_scheduled_transaction
|
|
254
|
+
|
|
255
|
+
@property
|
|
256
|
+
def additional_keys(self) -> list[str]:
|
|
257
|
+
return list(self.additional_properties.keys())
|
|
258
|
+
|
|
259
|
+
def __getitem__(self, key: str) -> Any:
|
|
260
|
+
return self.additional_properties[key]
|
|
261
|
+
|
|
262
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
263
|
+
self.additional_properties[key] = value
|
|
264
|
+
|
|
265
|
+
def __delitem__(self, key: str) -> None:
|
|
266
|
+
del self.additional_properties[key]
|
|
267
|
+
|
|
268
|
+
def __contains__(self, key: str) -> bool:
|
|
269
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,166 @@
|
|
|
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="SaveSubTransaction")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@_attrs_define
|
|
14
|
+
class SaveSubTransaction:
|
|
15
|
+
"""
|
|
16
|
+
Attributes:
|
|
17
|
+
amount (int): The subtransaction amount in milliunits format.
|
|
18
|
+
payee_id (Union[None, UUID, Unset]): The payee for the subtransaction.
|
|
19
|
+
payee_name (Union[None, Unset, str]): The payee name. If a `payee_name` value is provided and `payee_id` has a
|
|
20
|
+
null value, the `payee_name` value will be used to resolve the payee by either (1) a matching payee rename rule
|
|
21
|
+
(only if import_id is also specified on parent transaction) or (2) a payee with the same name or (3) creation of
|
|
22
|
+
a new payee.
|
|
23
|
+
category_id (Union[None, UUID, Unset]): The category for the subtransaction. Credit Card Payment categories are
|
|
24
|
+
not permitted and will be ignored if supplied.
|
|
25
|
+
memo (Union[None, Unset, str]):
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
amount: int
|
|
29
|
+
payee_id: None | UUID | Unset = UNSET
|
|
30
|
+
payee_name: None | Unset | str = UNSET
|
|
31
|
+
category_id: None | UUID | Unset = UNSET
|
|
32
|
+
memo: None | Unset | str = UNSET
|
|
33
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
34
|
+
|
|
35
|
+
def to_dict(self) -> dict[str, Any]:
|
|
36
|
+
amount = self.amount
|
|
37
|
+
|
|
38
|
+
payee_id: None | Unset | str
|
|
39
|
+
if isinstance(self.payee_id, Unset):
|
|
40
|
+
payee_id = UNSET
|
|
41
|
+
elif isinstance(self.payee_id, UUID):
|
|
42
|
+
payee_id = str(self.payee_id)
|
|
43
|
+
else:
|
|
44
|
+
payee_id = self.payee_id
|
|
45
|
+
|
|
46
|
+
payee_name: None | Unset | str
|
|
47
|
+
if isinstance(self.payee_name, Unset):
|
|
48
|
+
payee_name = UNSET
|
|
49
|
+
else:
|
|
50
|
+
payee_name = self.payee_name
|
|
51
|
+
|
|
52
|
+
category_id: None | Unset | str
|
|
53
|
+
if isinstance(self.category_id, Unset):
|
|
54
|
+
category_id = UNSET
|
|
55
|
+
elif isinstance(self.category_id, UUID):
|
|
56
|
+
category_id = str(self.category_id)
|
|
57
|
+
else:
|
|
58
|
+
category_id = self.category_id
|
|
59
|
+
|
|
60
|
+
memo: None | Unset | str
|
|
61
|
+
if isinstance(self.memo, Unset):
|
|
62
|
+
memo = UNSET
|
|
63
|
+
else:
|
|
64
|
+
memo = self.memo
|
|
65
|
+
|
|
66
|
+
field_dict: dict[str, Any] = {}
|
|
67
|
+
field_dict.update(self.additional_properties)
|
|
68
|
+
field_dict.update(
|
|
69
|
+
{
|
|
70
|
+
"amount": amount,
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
if payee_id is not UNSET:
|
|
74
|
+
field_dict["payee_id"] = payee_id
|
|
75
|
+
if payee_name is not UNSET:
|
|
76
|
+
field_dict["payee_name"] = payee_name
|
|
77
|
+
if category_id is not UNSET:
|
|
78
|
+
field_dict["category_id"] = category_id
|
|
79
|
+
if memo is not UNSET:
|
|
80
|
+
field_dict["memo"] = memo
|
|
81
|
+
|
|
82
|
+
return field_dict
|
|
83
|
+
|
|
84
|
+
@classmethod
|
|
85
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
86
|
+
d = dict(src_dict)
|
|
87
|
+
amount = d.pop("amount")
|
|
88
|
+
|
|
89
|
+
def _parse_payee_id(data: object) -> None | UUID | Unset:
|
|
90
|
+
if data is None:
|
|
91
|
+
return data
|
|
92
|
+
if isinstance(data, Unset):
|
|
93
|
+
return data
|
|
94
|
+
try:
|
|
95
|
+
if not isinstance(data, str):
|
|
96
|
+
raise TypeError()
|
|
97
|
+
payee_id_type_0 = UUID(data)
|
|
98
|
+
|
|
99
|
+
return payee_id_type_0
|
|
100
|
+
except: # noqa: E722
|
|
101
|
+
pass
|
|
102
|
+
return cast(None | UUID | Unset, data)
|
|
103
|
+
|
|
104
|
+
payee_id = _parse_payee_id(d.pop("payee_id", UNSET))
|
|
105
|
+
|
|
106
|
+
def _parse_payee_name(data: object) -> None | Unset | str:
|
|
107
|
+
if data is None:
|
|
108
|
+
return data
|
|
109
|
+
if isinstance(data, Unset):
|
|
110
|
+
return data
|
|
111
|
+
return cast(None | Unset | str, data)
|
|
112
|
+
|
|
113
|
+
payee_name = _parse_payee_name(d.pop("payee_name", UNSET))
|
|
114
|
+
|
|
115
|
+
def _parse_category_id(data: object) -> None | UUID | Unset:
|
|
116
|
+
if data is None:
|
|
117
|
+
return data
|
|
118
|
+
if isinstance(data, Unset):
|
|
119
|
+
return data
|
|
120
|
+
try:
|
|
121
|
+
if not isinstance(data, str):
|
|
122
|
+
raise TypeError()
|
|
123
|
+
category_id_type_0 = UUID(data)
|
|
124
|
+
|
|
125
|
+
return category_id_type_0
|
|
126
|
+
except: # noqa: E722
|
|
127
|
+
pass
|
|
128
|
+
return cast(None | UUID | Unset, data)
|
|
129
|
+
|
|
130
|
+
category_id = _parse_category_id(d.pop("category_id", UNSET))
|
|
131
|
+
|
|
132
|
+
def _parse_memo(data: object) -> None | Unset | str:
|
|
133
|
+
if data is None:
|
|
134
|
+
return data
|
|
135
|
+
if isinstance(data, Unset):
|
|
136
|
+
return data
|
|
137
|
+
return cast(None | Unset | str, data)
|
|
138
|
+
|
|
139
|
+
memo = _parse_memo(d.pop("memo", UNSET))
|
|
140
|
+
|
|
141
|
+
save_sub_transaction = cls(
|
|
142
|
+
amount=amount,
|
|
143
|
+
payee_id=payee_id,
|
|
144
|
+
payee_name=payee_name,
|
|
145
|
+
category_id=category_id,
|
|
146
|
+
memo=memo,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
save_sub_transaction.additional_properties = d
|
|
150
|
+
return save_sub_transaction
|
|
151
|
+
|
|
152
|
+
@property
|
|
153
|
+
def additional_keys(self) -> list[str]:
|
|
154
|
+
return list(self.additional_properties.keys())
|
|
155
|
+
|
|
156
|
+
def __getitem__(self, key: str) -> Any:
|
|
157
|
+
return self.additional_properties[key]
|
|
158
|
+
|
|
159
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
160
|
+
self.additional_properties[key] = value
|
|
161
|
+
|
|
162
|
+
def __delitem__(self, key: str) -> None:
|
|
163
|
+
del self.additional_properties[key]
|
|
164
|
+
|
|
165
|
+
def __contains__(self, key: str) -> bool:
|
|
166
|
+
return key in self.additional_properties
|