diff --git a/barte/models.py b/barte/models.py index 9f4f3c5..6aa7aae 100644 --- a/barte/models.py +++ b/barte/models.py @@ -2,11 +2,12 @@ from datetime import datetime from typing import Optional, List, Dict, Any from dacite import Config +from dateutil.parser import parse as parse_date # Default config for dacite with datetime conversion DACITE_CONFIG = Config( type_hooks={ - datetime: lambda x: datetime.fromisoformat(x.replace("Z", "+00:00")) if isinstance(x, str) else x + datetime: lambda x: parse_date(x) if isinstance(x, str) else x } ) diff --git a/requirements-dev.txt b/requirements-dev.txt index 6dc16e9..4abcdde 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,3 +1,4 @@ pytest>=7.0.0 pytest-cov>=4.0.0 -requests-mock>=1.10.0 \ No newline at end of file +requests-mock>=1.10.0 +python-dateutil>=2.8.0 \ No newline at end of file diff --git a/setup.py b/setup.py index 48954a4..b866ad7 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,8 @@ packages=find_packages(), install_requires=[ "requests>=2.25.0", - "dacite>=1.8.0" + "dacite>=1.8.0", + "python-dateutil>=2.8.0" ], python_requires=">=3.11", classifiers=[ diff --git a/tests/test_client.py b/tests/test_client.py index ad1ca98..7800c16 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -316,6 +316,14 @@ def test_pix_charge_get_qrcode(self, mock_get, mock_charge_response): def test_client_singleton(self): """Test client singleton pattern""" + # Reset singleton for initial state + BarteClient._instance = None + + # Test uninitialized state + with pytest.raises(RuntimeError) as exc_info: + BarteClient.get_instance() + assert "BarteClient not initialized" in str(exc_info.value) + # First initialization client1 = BarteClient(api_key="test_key", environment="sandbox") assert BarteClient.get_instance() == client1