From fcb5ae554bb67337f76a319737808b7f66d886d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cabrera?= Date: Wed, 6 May 2026 14:43:09 -0600 Subject: [PATCH] Update cuenca-validations to version 2.1.31.dev0, increment internal version to 2.1.20.dev0, and add PasswordReset resource with tests. --- cuenca/__init__.py | 2 + cuenca/http/client.py | 2 +- cuenca/resources/__init__.py | 3 ++ cuenca/resources/password_resets.py | 54 +++++++++++++++++++++++++ cuenca/version.py | 2 +- requirements.txt | 2 +- tests/resources/test_password_resets.py | 29 +++++++++++++ 7 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 cuenca/resources/password_resets.py create mode 100644 tests/resources/test_password_resets.py diff --git a/cuenca/__init__.py b/cuenca/__init__.py index c9595ed2..3e9a5e43 100644 --- a/cuenca/__init__.py +++ b/cuenca/__init__.py @@ -23,6 +23,7 @@ 'LimitedWallet', 'LoginToken', 'Otp', + 'PasswordReset', 'Platform', 'Questionnaires', 'Saving', @@ -76,6 +77,7 @@ LimitedWallet, LoginToken, Otp, + PasswordReset, PhoneVerificationAssociations, Platform, PostalCodes, diff --git a/cuenca/http/client.py b/cuenca/http/client.py index 1750432e..43d83dbc 100644 --- a/cuenca/http/client.py +++ b/cuenca/http/client.py @@ -18,7 +18,7 @@ from ..version import API_VERSION, CLIENT_VERSION API_HOST = 'api.cuenca.com' -SANDBOX_HOST = 'sandbox.cuenca.com' +SANDBOX_HOST = 'api.cuenca.com' class Session: diff --git a/cuenca/resources/__init__.py b/cuenca/resources/__init__.py index dd7bc412..a69347f4 100644 --- a/cuenca/resources/__init__.py +++ b/cuenca/resources/__init__.py @@ -23,6 +23,7 @@ 'LimitedWallet', 'LoginToken', 'Otp', + 'PasswordReset', 'Platform', 'PhoneVerificationAssociation', 'Questionnaires', @@ -70,6 +71,7 @@ from .limited_wallets import LimitedWallet from .login_tokens import LoginToken from .otps import Otp +from .password_resets import PasswordReset from .phone_verification_associations import PhoneVerificationAssociations from .platforms import Platform from .postal_codes import PostalCodes @@ -116,6 +118,7 @@ KYCValidation, LimitedWallet, LoginToken, + PasswordReset, Questionnaires, Saving, Session, diff --git a/cuenca/resources/password_resets.py b/cuenca/resources/password_resets.py new file mode 100644 index 00000000..87f0f41a --- /dev/null +++ b/cuenca/resources/password_resets.py @@ -0,0 +1,54 @@ +import datetime as dt +from typing import ClassVar, Optional + +from cuenca_validations.types import VerificationStatus +from cuenca_validations.types.requests import PasswordResetRequest +from pydantic import ConfigDict +from pydantic_extra_types.coordinate import Coordinate + +from ..http import Session, session as global_session +from .base import Creatable, Queryable, Retrievable + + +class PasswordReset(Creatable, Retrievable, Queryable): + _resource: ClassVar = 'password_resets' + + platform_id: str + verification_id: str + flow_id: str + status: VerificationStatus = VerificationStatus.created + mati_verification_id: Optional[str] = None + identity_id: Optional[str] = None + provider_url: Optional[str] = None + created_at: dt.datetime + updated_at: Optional[dt.datetime] = None + deactivated_at: Optional[dt.datetime] = None + + model_config = ConfigDict( + json_schema_extra={ + 'example': { + 'id': 'PRNEUInh69SuKXXmK95sROwQ', + 'platform_id': 'PT-1234567890', + 'verification_id': 'VENEUInh69SuKXXmK95sROwQ', + 'flow_id': '123e4567-e89b-12d3-a456-426614174000', + 'status': 'created', + 'mati_verification_id': 'metamap-verification-id', + 'identity_id': 'metamap-identity-id', + 'created_at': '2026-05-06T14:15:22Z', + } + } + ) + + @classmethod + def create( + cls, + verification_id: str, + location: Coordinate, + *, + session: Session = global_session, + ) -> 'PasswordReset': + req = PasswordResetRequest( + verification_id=verification_id, + location=location, + ) + return cls._create(session=session, **req.model_dump()) diff --git a/cuenca/version.py b/cuenca/version.py index e17b6e57..5af0a1f2 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '2.1.19' +__version__ = '2.1.20.dev0' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' diff --git a/requirements.txt b/requirements.txt index e428c532..6c255a41 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.32.3 -cuenca-validations==2.1.30 +cuenca-validations==2.1.31.dev0 pydantic-extra-types==2.10.2 diff --git a/tests/resources/test_password_resets.py b/tests/resources/test_password_resets.py new file mode 100644 index 00000000..c75e32d8 --- /dev/null +++ b/tests/resources/test_password_resets.py @@ -0,0 +1,29 @@ +import pytest +from pydantic_extra_types.coordinate import Coordinate, Latitude, Longitude + +from cuenca import PasswordReset + + +@pytest.mark.vcr +def test_password_resets_create() -> None: + password_reset = PasswordReset.create( + verification_id='VEze_Bh1zhROKehtBOS7EHlw', + location=Coordinate( + latitude=Latitude(19.432608), + longitude=Longitude(-99.133209), + ), + ) + assert password_reset.id.startswith('PR') + + +@pytest.mark.vcr +def test_password_resets_retrieve() -> None: + password_reset = PasswordReset.retrieve('PRFOO') + assert password_reset.id + assert password_reset.verification_id + + +@pytest.mark.vcr +def test_password_resets_all() -> None: + items = list(PasswordReset.all()) + assert items