diff --git a/pfbudget/core/manager.py b/pfbudget/core/manager.py index 9877e09..2dcf45c 100644 --- a/pfbudget/core/manager.py +++ b/pfbudget/core/manager.py @@ -1,8 +1,6 @@ import csv -import dotenv from pathlib import Path import pickle -import os import webbrowser from pfbudget.common.types import Operation @@ -27,13 +25,10 @@ from pfbudget.db.model import ( Transaction, TransactionCategory, ) -from pfbudget.extract.credentials import Credentials -from pfbudget.extract.nordigen import NordigenClient +from pfbudget.extract.nordigen import NordigenClient, NordigenCredentialsManager from pfbudget.extract.parsers import parse_data from pfbudget.extract.psd2 import PSD2Extractor -dotenv.load_dotenv() - class Manager: def __init__(self, db: str, verbosity: int = 0): @@ -422,9 +417,4 @@ class Manager: @staticmethod def nordigen_client() -> NordigenClient: - credentials = Credentials( - os.environ.get("SECRET_ID"), - os.environ.get("SECRET_KEY"), - os.environ.get("TOKEN"), - ) - return NordigenClient(credentials) + return NordigenClient(NordigenCredentialsManager.default) diff --git a/pfbudget/extract/credentials.py b/pfbudget/extract/credentials.py deleted file mode 100644 index c69d8ac..0000000 --- a/pfbudget/extract/credentials.py +++ /dev/null @@ -1,11 +0,0 @@ -from dataclasses import dataclass - - -@dataclass -class Credentials: - id: str - key: str - token: str = "" - - def valid(self) -> bool: - return self.id and self.key diff --git a/pfbudget/extract/nordigen.py b/pfbudget/extract/nordigen.py index 7edb378..b4aaa14 100644 --- a/pfbudget/extract/nordigen.py +++ b/pfbudget/extract/nordigen.py @@ -1,17 +1,31 @@ +from dataclasses import dataclass +import dotenv import json import nordigen +import os import requests import time import uuid -from .credentials import Credentials from .exceptions import CredentialsError, DownloadError +dotenv.load_dotenv() + + +@dataclass +class NordigenCredentials: + id: str + key: str + token: str = "" + + def valid(self) -> bool: + return self.id and self.key + class NordigenClient: redirect_url = "https://murta.dev" - def __init__(self, credentials: Credentials): + def __init__(self, credentials: NordigenCredentials): super().__init__() if not credentials.valid(): @@ -90,3 +104,11 @@ class NordigenClient: if self._token: print("Replacing existing token with {value}") self._token = value + + +class NordigenCredentialsManager: + default = NordigenCredentials( + os.environ.get("SECRET_ID"), + os.environ.get("SECRET_KEY"), + os.environ.get("TOKEN"), + ) diff --git a/tests/test_psd2.py b/tests/test_psd2.py index eb5c2ba..0265432 100644 --- a/tests/test_psd2.py +++ b/tests/test_psd2.py @@ -6,9 +6,8 @@ import requests import mocks.nordigen as mock from pfbudget.db.model import Bank, BankTransaction, Nordigen -from pfbudget.extract.credentials import Credentials from pfbudget.extract.exceptions import BankError, CredentialsError -from pfbudget.extract.nordigen import NordigenClient +from pfbudget.extract.nordigen import NordigenClient, NordigenCredentials from pfbudget.extract.psd2 import PSD2Extractor @@ -57,7 +56,7 @@ def mock_requests(monkeypatch): @pytest.fixture def extractor() -> NordigenClient: - credentials = Credentials("ID", "KEY", "TOKEN") + credentials = NordigenCredentials("ID", "KEY", "TOKEN") return PSD2Extractor(NordigenClient(credentials)) @@ -70,7 +69,7 @@ def bank() -> list[Bank]: class TestExtractPSD2: def test_empty_credentials(self): - cred = Credentials("", "") + cred = NordigenCredentials("", "") with pytest.raises(CredentialsError): NordigenClient(cred)