Skip to content

Commit 3fc92b3

Browse files
author
Karl Wooster
committed
feat(refactor): starting a wholescale refactor for better maintainability
1 parent f725c03 commit 3fc92b3

File tree

9 files changed

+114
-71
lines changed

9 files changed

+114
-71
lines changed

ruff.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
target-version = "py311"
1+
target-version = "py39"
22

33
[lint]
44
extend-select = ["B", "C90", "D", "RUF", "UP"]

src/ynamazon/_version.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# file generated by setuptools-scm
2+
# don't change, don't track in version control
3+
4+
__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5+
6+
TYPE_CHECKING = False
7+
if TYPE_CHECKING:
8+
from typing import Tuple
9+
from typing import Union
10+
11+
VERSION_TUPLE = Tuple[Union[int, str], ...]
12+
else:
13+
VERSION_TUPLE = object
14+
15+
version: str
16+
__version__: str
17+
__version_tuple__: VERSION_TUPLE
18+
version_tuple: VERSION_TUPLE
19+
20+
__version__ = version = '0.1.dev96+g1cb66e2'
21+
__version_tuple__ = version_tuple = (0, 1, 'dev96', 'g1cb66e2')
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from .accounts import Account
2+
from .transactions import MemoField
3+
4+
__all__ = ["Account", "MemoField"]
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,12 @@
1-
import abc
2-
from decimal import Decimal
3-
import enum
4-
from typing import Annotated, Any, Generic, TypeVar
5-
from pydantic import (
6-
BaseModel,
7-
ConfigDict,
8-
StrictBool,
9-
StrictInt,
10-
StrictStr,
11-
model_validator,
12-
)
131
import datetime as dt
2+
import enum
3+
from decimal import Decimal
4+
from typing import Annotated, Union
145

6+
from pydantic import Field, StrictBool, StrictInt, StrictStr
157

16-
class YnabBase(BaseModel, abc.ABC):
17-
"""Base class for YNAB."""
18-
19-
model_config = ConfigDict(from_attributes=True)
20-
21-
22-
_F = TypeVar("_F")
23-
24-
25-
class Field(BaseModel, Generic[_F], abc.ABC):
26-
value: _F
27-
28-
@model_validator(mode="before")
29-
@classmethod
30-
def from_value(cls, data: Any) -> Any:
31-
if not isinstance(data, dict):
32-
return {"value": data}
33-
return data
8+
from ynamazon.wrappers.ynab.common import YnabBase
9+
from ynamazon.wrappers.ynab.payees import Payee
3410

3511

3612
class AccountType(enum.StrEnum):
@@ -62,7 +38,7 @@ class Account(YnabBase):
6238
balance: StrictInt
6339
cleared_balance: StrictInt
6440
uncleared_balance: StrictInt
65-
transfer_payee: "Payee" | None = None
41+
transfer_payee: Union[Payee, None] = None
6642
direct_import_linked: StrictBool | None = None
6743
direct_import_in_error: StrictBool | None = None
6844
last_reconciled_at: dt.datetime | None = None
@@ -86,42 +62,3 @@ def cleared_balance_decimal(self) -> Decimal:
8662
def uncleared_balance_decimal(self) -> Decimal:
8763
"""Returns the uncleared balance in currency."""
8864
return self._milliunit_to_decimal("uncleared_balance")
89-
90-
91-
class Payee(YnabBase):
92-
id: StrictStr
93-
name: StrictStr
94-
95-
96-
class MemoField(Field[str]):
97-
"""Memo field for YNAB."""
98-
99-
100-
class TransactionClearedStatus(enum.StrEnum):
101-
"""The cleared status of the transaction."""
102-
103-
CLEARED = "cleared"
104-
UNCLEARED = "uncleared"
105-
RECONCILED = "reconciled"
106-
107-
108-
class TransactionFlagColor(enum.StrEnum):
109-
"""The flag color of the transaction."""
110-
111-
RED = "red"
112-
ORANGE = "orange"
113-
YELLOW = "yellow"
114-
GREEN = "green"
115-
BLUE = "blue"
116-
PURPLE = "purple"
117-
118-
119-
class BaseTransaction(YnabBase):
120-
var_date: dt.date | None = None
121-
amount: StrictInt
122-
memo: MemoField | None = None
123-
cleared: TransactionClearedStatus | None = None
124-
approved: StrictBool | None = None
125-
flag_color: TransactionFlagColor | None = None
126-
account_id: StrictStr | None = None
127-
payee_id: StrictStr | None = None
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import abc
2+
from typing import Any, Generic, TypeVar
3+
4+
from pydantic import BaseModel, ConfigDict, model_validator
5+
6+
7+
class YnabBase(BaseModel, abc.ABC):
8+
"""Base class for YNAB."""
9+
10+
model_config = ConfigDict(from_attributes=True)
11+
12+
13+
_F = TypeVar("_F")
14+
15+
16+
class YnabField(BaseModel, Generic[_F], abc.ABC):
17+
value: _F
18+
19+
@model_validator(mode="before")
20+
@classmethod
21+
def from_value(cls, data: Any) -> Any:
22+
if not isinstance(data, dict):
23+
return {"value": data}
24+
return data
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from pydantic import StrictStr
2+
3+
from ynamazon.wrappers.ynab.common import YnabBase
4+
5+
6+
class Payee(YnabBase):
7+
id: StrictStr
8+
name: StrictStr
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import datetime as dt
2+
import enum
3+
4+
from pydantic import StrictBool, StrictInt, StrictStr
5+
6+
from ynamazon.wrappers.ynab.common import YnabBase, YnabField
7+
8+
9+
class MemoField(YnabField[str]):
10+
"""Memo field for YNAB."""
11+
12+
13+
class TransactionClearedStatus(enum.StrEnum):
14+
"""The cleared status of the transaction."""
15+
16+
CLEARED = "cleared"
17+
UNCLEARED = "uncleared"
18+
RECONCILED = "reconciled"
19+
20+
21+
class TransactionFlagColor(enum.StrEnum):
22+
"""The flag color of the transaction."""
23+
24+
RED = "red"
25+
ORANGE = "orange"
26+
YELLOW = "yellow"
27+
GREEN = "green"
28+
BLUE = "blue"
29+
PURPLE = "purple"
30+
31+
32+
class BaseTransaction(YnabBase):
33+
var_date: dt.date | None = None
34+
amount: StrictInt
35+
memo: MemoField | None = None
36+
cleared: TransactionClearedStatus | None = None
37+
approved: StrictBool | None = None
38+
flag_color: TransactionFlagColor | None = None
39+
account_id: StrictStr | None = None
40+
payee_id: StrictStr | None = None

src/ynamazon/ynab/__init__.py

Whitespace-only changes.

src/ynamazon/ynab/memo.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import Union
2+
3+
from pydantic import BaseModel
4+
5+
from ynamazon.wrappers.ynab import MemoField
6+
7+
8+
class TransactionMemo(BaseModel):
9+
_value: Union[str, None] = None

0 commit comments

Comments
 (0)