From 501ef0b34ccc081c631a8fbdd012896d6bcfad72 Mon Sep 17 00:00:00 2001 From: Jose Marchant Date: Tue, 31 Mar 2026 12:38:34 -0300 Subject: [PATCH 1/2] feat: add account_statements resource under v2 accounts Add AccountStatement resource and AccountStatementsManager to support the new GET /v2/accounts/{account_id}/account_statements endpoint. --- fintoc/managers/v2/__init__.py | 1 + fintoc/managers/v2/account_statements_manager.py | 10 ++++++++++ fintoc/managers/v2/accounts_manager.py | 16 ++++++++++++++++ fintoc/resources/v2/__init__.py | 1 + fintoc/resources/v2/account_statement.py | 7 +++++++ 5 files changed, 35 insertions(+) create mode 100644 fintoc/managers/v2/account_statements_manager.py create mode 100644 fintoc/resources/v2/account_statement.py diff --git a/fintoc/managers/v2/__init__.py b/fintoc/managers/v2/__init__.py index 1095269..f3cda57 100644 --- a/fintoc/managers/v2/__init__.py +++ b/fintoc/managers/v2/__init__.py @@ -1,6 +1,7 @@ """Init file for the v2 managers module of the SDK.""" from .account_numbers_manager import AccountNumbersManager +from .account_statements_manager import AccountStatementsManager from .account_verifications_manager import AccountVerificationsManager from .accounts_manager import AccountsManager from .checkout_sessions_manager import CheckoutSessionsManager diff --git a/fintoc/managers/v2/account_statements_manager.py b/fintoc/managers/v2/account_statements_manager.py new file mode 100644 index 0000000..a7a241a --- /dev/null +++ b/fintoc/managers/v2/account_statements_manager.py @@ -0,0 +1,10 @@ +"""Module to hold the account statements manager.""" + +from fintoc.mixins import ManagerMixin + + +class AccountStatementsManager(ManagerMixin): + """Represents an account statements manager.""" + + resource = "account_statement" + methods = ["list"] diff --git a/fintoc/managers/v2/accounts_manager.py b/fintoc/managers/v2/accounts_manager.py index 83c18ae..3645454 100644 --- a/fintoc/managers/v2/accounts_manager.py +++ b/fintoc/managers/v2/accounts_manager.py @@ -1,6 +1,7 @@ # pylint: disable=duplicate-code """Module to hold the accounts manager.""" +from fintoc.managers.v2.account_statements_manager import AccountStatementsManager from fintoc.managers.v2.movements_manager import MovementsManager from fintoc.mixins import ManagerMixin @@ -13,8 +14,23 @@ class AccountsManager(ManagerMixin): def __init__(self, path, client): super().__init__(path, client) + self.__account_statements_manager = None self.__movements_manager = None + @property + def account_statements(self): + """Proxies the account statements manager.""" + if self.__account_statements_manager is None: + self.__account_statements_manager = AccountStatementsManager( + "/v2/accounts/{account_id}/account_statements", + self._client, + ) + return self.__account_statements_manager + + @account_statements.setter + def account_statements(self, new_value): + raise NameError("Attribute name corresponds to a manager") + @property def movements(self): """Proxies the movements manager.""" diff --git a/fintoc/resources/v2/__init__.py b/fintoc/resources/v2/__init__.py index 4cd404d..90cac09 100644 --- a/fintoc/resources/v2/__init__.py +++ b/fintoc/resources/v2/__init__.py @@ -2,6 +2,7 @@ from .account import Account from .account_number import AccountNumber +from .account_statement import AccountStatement from .account_verification import AccountVerification from .entity import Entity from .invoice import Invoice diff --git a/fintoc/resources/v2/account_statement.py b/fintoc/resources/v2/account_statement.py new file mode 100644 index 0000000..cd4d907 --- /dev/null +++ b/fintoc/resources/v2/account_statement.py @@ -0,0 +1,7 @@ +"""Module to hold the AccountStatement resource.""" + +from fintoc.mixins import ResourceMixin + + +class AccountStatement(ResourceMixin): + """Represents a Fintoc Account Statement.""" From 8de7e5a42f1823db5bbf4dc2d397f13ff7ba6106 Mon Sep 17 00:00:00 2001 From: Jose Marchant Date: Tue, 31 Mar 2026 12:51:44 -0300 Subject: [PATCH 2/2] test: add tests for account_statements and fix pylint Add integration test for v2 account_statements.list endpoint. Add pylint disable comments for duplicate-code and no-self-use. --- fintoc/managers/v2/account_statements_manager.py | 1 + fintoc/managers/v2/accounts_manager.py | 2 +- tests/test_integration.py | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/fintoc/managers/v2/account_statements_manager.py b/fintoc/managers/v2/account_statements_manager.py index a7a241a..2865899 100644 --- a/fintoc/managers/v2/account_statements_manager.py +++ b/fintoc/managers/v2/account_statements_manager.py @@ -1,3 +1,4 @@ +# pylint: disable=duplicate-code """Module to hold the account statements manager.""" from fintoc.mixins import ManagerMixin diff --git a/fintoc/managers/v2/accounts_manager.py b/fintoc/managers/v2/accounts_manager.py index 3645454..299adad 100644 --- a/fintoc/managers/v2/accounts_manager.py +++ b/fintoc/managers/v2/accounts_manager.py @@ -28,7 +28,7 @@ def account_statements(self): return self.__account_statements_manager @account_statements.setter - def account_statements(self, new_value): + def account_statements(self, new_value): # pylint: disable=no-self-use raise NameError("Attribute name corresponds to a manager") @property diff --git a/tests/test_integration.py b/tests/test_integration.py index 86cce65..a344010 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -1052,6 +1052,20 @@ def test_v2_invoice_get(self): assert invoice.method == "get" assert invoice.url == f"v2/invoices/{invoice_id}" + def test_v2_account_statements_list(self): + """Test getting account statements from an account using v2 API.""" + account_id = "acc_12345" + account_statements = list( + self.fintoc.v2.accounts.account_statements.list(account_id=account_id) + ) + + assert len(account_statements) > 0 + for account_statement in account_statements: + assert account_statement.method == "get" + assert ( + account_statement.url == f"v2/accounts/{account_id}/account_statements" + ) + if __name__ == "__main__": pytest.main()