budget/pfbudget/utils/converters.py

49 lines
1.2 KiB
Python

from functools import singledispatch
from pfbudget.common.types import Bank, Transaction, TransactionError
from pfbudget.db.schema import DbBank, DbTransaction
from .utils import parse_decimal
@singledispatch
def convert(t):
print("No converter as been found")
pass
@convert.register
def _(t: Transaction) -> DbTransaction:
return (t.date, t.description, t.bank, t.value, t.category)
@convert.register
def _(db: DbTransaction) -> Transaction:
try:
return Transaction(db)
except TransactionError:
print(f"{db} is in the wrong format")
@convert.register
def _(db: DbBank, key: str = "") -> Bank:
return Bank(db.name, db.bic, db.requisition_id, db.invert, key=key)
@convert.register
def _(bank: Bank, key: str = "") -> DbBank:
return DbBank(bank.name, bank.bic, "", "", bank.requisition_id, bank.invert)
@convert.register
def _(json: dict, bank: str, invert: bool) -> Transaction:
i = -1 if invert else 1
try:
return Transaction(
json["bookingDate"],
json["remittanceInformationUnstructured"],
bank,
i * parse_decimal(json["transactionAmount"]["amount"]),
)
except TransactionError:
print(f"{json} is in the wrong format")