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,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
|