From 7a717d0319dcba2e192b57df6bc8293f1db3000f Mon Sep 17 00:00:00 2001 From: gabino Date: Wed, 25 Jun 2025 12:15:41 -0600 Subject: [PATCH 1/7] Add PostalCodes resource to exports --- cuenca/__init__.py | 2 ++ cuenca/resources/__init__.py | 2 ++ cuenca/resources/postal_codes.py | 21 +++++++++++++++++++++ cuenca/version.py | 2 +- requirements.txt | 2 +- 5 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 cuenca/resources/postal_codes.py diff --git a/cuenca/__init__.py b/cuenca/__init__.py index 32551ede..40533eaf 100644 --- a/cuenca/__init__.py +++ b/cuenca/__init__.py @@ -44,6 +44,7 @@ 'JwtToken', 'TermsOfService', 'UserTOSAgreement', + 'PostalCodes', ] from . import http @@ -73,6 +74,7 @@ LoginToken, Otp, Platform, + PostalCodes, Questionnaires, Saving, ServiceProvider, diff --git a/cuenca/resources/__init__.py b/cuenca/resources/__init__.py index 9a0191ea..2546baa5 100644 --- a/cuenca/resources/__init__.py +++ b/cuenca/resources/__init__.py @@ -40,6 +40,7 @@ 'JwtToken', 'TermsOfService', 'UserTOSAgreement', + 'PostalCodes', ] from .accounts import Account @@ -67,6 +68,7 @@ from .login_tokens import LoginToken from .otps import Otp from .platforms import Platform +from .postal_codes import PostalCodes from .questionnaires import Questionnaires from .resources import RESOURCES from .savings import Saving diff --git a/cuenca/resources/postal_codes.py b/cuenca/resources/postal_codes.py new file mode 100644 index 00000000..398018d1 --- /dev/null +++ b/cuenca/resources/postal_codes.py @@ -0,0 +1,21 @@ +import datetime as dt +from typing import ClassVar + +from cuenca_validations.types import Country, PostalCodeQuery, State + +from .base import Queryable, Retrievable + + +class PostalCodes(Retrievable, Queryable): + _resource: ClassVar = 'postal_codes' + _query_params: ClassVar = PostalCodeQuery + + id: str + created_at: dt.datetime + postal_code: str + colonia: str + city: str + state: State + state_name: str + country: Country + country_name: str diff --git a/cuenca/version.py b/cuenca/version.py index 0888f04c..8c121fec 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '2.1.4' +__version__ = '2.1.5' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' diff --git a/requirements.txt b/requirements.txt index 50818af8..ea95e481 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.32.3 -cuenca-validations==2.1.5 +cuenca-validations==2.1.8.dev2 pydantic-extra-types==2.10.2 From dd58df4740813acd0b0bfb6ce32d2d3efcdfdd4c Mon Sep 17 00:00:00 2001 From: gabino Date: Thu, 3 Jul 2025 12:48:45 -0600 Subject: [PATCH 2/7] Add tests --- cuenca/resources/__init__.py | 1 + ...postal_codes_retrieve_multiple_colony.yaml | 42 +++++++++++++++++++ .../test_postal_codes_retrieve_not_found.yaml | 40 ++++++++++++++++++ ...test_postal_codes_retrieve_one_colony.yaml | 41 ++++++++++++++++++ tests/resources/test_postal_codes.py | 21 ++++++++++ 5 files changed, 145 insertions(+) create mode 100644 tests/resources/cassettes/test_postal_codes_retrieve_multiple_colony.yaml create mode 100644 tests/resources/cassettes/test_postal_codes_retrieve_not_found.yaml create mode 100644 tests/resources/cassettes/test_postal_codes_retrieve_one_colony.yaml create mode 100644 tests/resources/test_postal_codes.py diff --git a/cuenca/resources/__init__.py b/cuenca/resources/__init__.py index 2546baa5..b61650c0 100644 --- a/cuenca/resources/__init__.py +++ b/cuenca/resources/__init__.py @@ -128,6 +128,7 @@ WhatsappTransfer, Webhook, Platform, + PostalCodes, JwtToken, TermsOfService, UserTOSAgreement, diff --git a/tests/resources/cassettes/test_postal_codes_retrieve_multiple_colony.yaml b/tests/resources/cassettes/test_postal_codes_retrieve_multiple_colony.yaml new file mode 100644 index 00000000..b18d0b07 --- /dev/null +++ b/tests/resources/cassettes/test_postal_codes_retrieve_multiple_colony.yaml @@ -0,0 +1,42 @@ +interactions: +- request: + body: null + headers: + User-Agent: + - cuenca-python/2.1.5 + X-Cuenca-Api-Version: + - '2020-03-19' + method: GET + uri: https://sandbox.cuenca.com/postal_codes?postal_code=40106 + response: + body: + string: "{\"items\":[{\"id\":\"PCqpCtquNnTTWj4afusCWbXQ\",\"created_at\":\"2025-06-25T18:44:14.409000\",\"postal_code\":\"40106\",\"colonia\":\"El + Naranjo\",\"city\":\"Iguala de la Independencia\",\"state\":\"GR\",\"state_name\":\"Guerrero\",\"country\":\"MX\",\"country_name\":\"M\xE9xico\"},{\"id\":\"PCN2-h_t4ASn-yr46-5C352g\",\"created_at\":\"2025-06-25T18:44:14.409000\",\"postal_code\":\"40106\",\"colonia\":\"Ficus\",\"city\":\"Iguala + de la Independencia\",\"state\":\"GR\",\"state_name\":\"Guerrero\",\"country\":\"MX\",\"country_name\":\"M\xE9xico\"}],\"next_page_uri\":null}" + headers: + Connection: + - keep-alive + Content-Length: + - '495' + Content-Type: + - application/json + Date: + - Thu, 03 Jul 2025 18:44:22 GMT + X-Request-Time: + - 'value: 0.045' + x-amz-apigw-id: + - NJVdFHJXCYcEPzw= + x-amzn-Remapped-Connection: + - keep-alive + x-amzn-Remapped-Content-Length: + - '495' + x-amzn-Remapped-Date: + - Thu, 03 Jul 2025 18:44:22 GMT + x-amzn-Remapped-Server: + - nginx/1.28.0 + x-amzn-RequestId: + - 3ff50d45-d63b-4244-9bba-9f7dc776d4bb + status: + code: 200 + message: OK +version: 1 diff --git a/tests/resources/cassettes/test_postal_codes_retrieve_not_found.yaml b/tests/resources/cassettes/test_postal_codes_retrieve_not_found.yaml new file mode 100644 index 00000000..314f64bc --- /dev/null +++ b/tests/resources/cassettes/test_postal_codes_retrieve_not_found.yaml @@ -0,0 +1,40 @@ +interactions: +- request: + body: null + headers: + User-Agent: + - cuenca-python/2.1.5 + X-Cuenca-Api-Version: + - '2020-03-19' + method: GET + uri: https://sandbox.cuenca.com/postal_codes?postal_code=401000 + response: + body: + string: '{"items":[],"next_page_uri":null}' + headers: + Connection: + - keep-alive + Content-Length: + - '33' + Content-Type: + - application/json + Date: + - Thu, 03 Jul 2025 18:44:22 GMT + X-Request-Time: + - 'value: 0.044' + x-amz-apigw-id: + - NJVdIFzWCYcEQnA= + x-amzn-Remapped-Connection: + - keep-alive + x-amzn-Remapped-Content-Length: + - '33' + x-amzn-Remapped-Date: + - Thu, 03 Jul 2025 18:44:22 GMT + x-amzn-Remapped-Server: + - nginx/1.28.0 + x-amzn-RequestId: + - 00d3f3a3-2fb5-4b74-8fbf-8ac6dc615ae7 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/resources/cassettes/test_postal_codes_retrieve_one_colony.yaml b/tests/resources/cassettes/test_postal_codes_retrieve_one_colony.yaml new file mode 100644 index 00000000..2f1cc2b2 --- /dev/null +++ b/tests/resources/cassettes/test_postal_codes_retrieve_one_colony.yaml @@ -0,0 +1,41 @@ +interactions: +- request: + body: null + headers: + User-Agent: + - cuenca-python/2.1.5 + X-Cuenca-Api-Version: + - '2020-03-19' + method: GET + uri: https://sandbox.cuenca.com/postal_codes?postal_code=40100 + response: + body: + string: "{\"items\":[{\"id\":\"PCHOECy9u6QQeXPR6HdR5Bgw\",\"created_at\":\"2025-06-25T18:44:14.409000\",\"postal_code\":\"40100\",\"colonia\":\"Metlapa\",\"city\":\"Iguala + de la Independencia\",\"state\":\"GR\",\"state_name\":\"Guerrero\",\"country\":\"MX\",\"country_name\":\"M\xE9xico\"}],\"next_page_uri\":null}" + headers: + Connection: + - keep-alive + Content-Length: + - '263' + Content-Type: + - application/json + Date: + - Thu, 03 Jul 2025 18:42:12 GMT + X-Request-Time: + - 'value: 0.046' + x-amz-apigw-id: + - NJVIwHRyCYcEeIw= + x-amzn-Remapped-Connection: + - keep-alive + x-amzn-Remapped-Content-Length: + - '263' + x-amzn-Remapped-Date: + - Thu, 03 Jul 2025 18:42:12 GMT + x-amzn-Remapped-Server: + - nginx/1.28.0 + x-amzn-RequestId: + - 75a527b3-8a33-42ed-8633-23dd2b1ddeff + status: + code: 200 + message: OK +version: 1 diff --git a/tests/resources/test_postal_codes.py b/tests/resources/test_postal_codes.py new file mode 100644 index 00000000..f02a3593 --- /dev/null +++ b/tests/resources/test_postal_codes.py @@ -0,0 +1,21 @@ +import pytest + +from cuenca.resources import PostalCodes + + +@pytest.mark.vcr +def test_postal_codes_retrieve_one_colony() -> None: + postal_codes = list(PostalCodes.all(postal_code='40100')) + assert len(postal_codes) == 1 + + +@pytest.mark.vcr +def test_postal_codes_retrieve_multiple_colony() -> None: + postal_codes = list(PostalCodes.all(postal_code='40106')) + assert len(postal_codes) > 1 + + +@pytest.mark.vcr +def test_postal_codes_retrieve_not_found() -> None: + postal_codes = list(PostalCodes.all(postal_code='401000')) + assert len(postal_codes) == 0 From 9eb9372533aa0aaa5e94977c32f5aa5a4eed8c35 Mon Sep 17 00:00:00 2001 From: gabino Date: Tue, 8 Jul 2025 18:02:01 -0600 Subject: [PATCH 3/7] Refactor postal code tests to use parameterized testing and remove obsolete cassette files --- ... test_postal_codes_retrieve[00000-0].yaml} | 2 +- ... test_postal_codes_retrieve[40100-1].yaml} | 0 ... test_postal_codes_retrieve[40106-2].yaml} | 0 tests/resources/test_postal_codes.py | 26 ++++++++----------- 4 files changed, 12 insertions(+), 16 deletions(-) rename tests/resources/cassettes/{test_postal_codes_retrieve_not_found.yaml => test_postal_codes_retrieve[00000-0].yaml} (92%) rename tests/resources/cassettes/{test_postal_codes_retrieve_one_colony.yaml => test_postal_codes_retrieve[40100-1].yaml} (100%) rename tests/resources/cassettes/{test_postal_codes_retrieve_multiple_colony.yaml => test_postal_codes_retrieve[40106-2].yaml} (100%) diff --git a/tests/resources/cassettes/test_postal_codes_retrieve_not_found.yaml b/tests/resources/cassettes/test_postal_codes_retrieve[00000-0].yaml similarity index 92% rename from tests/resources/cassettes/test_postal_codes_retrieve_not_found.yaml rename to tests/resources/cassettes/test_postal_codes_retrieve[00000-0].yaml index 314f64bc..e893ed4d 100644 --- a/tests/resources/cassettes/test_postal_codes_retrieve_not_found.yaml +++ b/tests/resources/cassettes/test_postal_codes_retrieve[00000-0].yaml @@ -7,7 +7,7 @@ interactions: X-Cuenca-Api-Version: - '2020-03-19' method: GET - uri: https://sandbox.cuenca.com/postal_codes?postal_code=401000 + uri: https://sandbox.cuenca.com/postal_codes?postal_code=00000 response: body: string: '{"items":[],"next_page_uri":null}' diff --git a/tests/resources/cassettes/test_postal_codes_retrieve_one_colony.yaml b/tests/resources/cassettes/test_postal_codes_retrieve[40100-1].yaml similarity index 100% rename from tests/resources/cassettes/test_postal_codes_retrieve_one_colony.yaml rename to tests/resources/cassettes/test_postal_codes_retrieve[40100-1].yaml diff --git a/tests/resources/cassettes/test_postal_codes_retrieve_multiple_colony.yaml b/tests/resources/cassettes/test_postal_codes_retrieve[40106-2].yaml similarity index 100% rename from tests/resources/cassettes/test_postal_codes_retrieve_multiple_colony.yaml rename to tests/resources/cassettes/test_postal_codes_retrieve[40106-2].yaml diff --git a/tests/resources/test_postal_codes.py b/tests/resources/test_postal_codes.py index f02a3593..76f80712 100644 --- a/tests/resources/test_postal_codes.py +++ b/tests/resources/test_postal_codes.py @@ -4,18 +4,14 @@ @pytest.mark.vcr -def test_postal_codes_retrieve_one_colony() -> None: - postal_codes = list(PostalCodes.all(postal_code='40100')) - assert len(postal_codes) == 1 - - -@pytest.mark.vcr -def test_postal_codes_retrieve_multiple_colony() -> None: - postal_codes = list(PostalCodes.all(postal_code='40106')) - assert len(postal_codes) > 1 - - -@pytest.mark.vcr -def test_postal_codes_retrieve_not_found() -> None: - postal_codes = list(PostalCodes.all(postal_code='401000')) - assert len(postal_codes) == 0 +@pytest.mark.parametrize( + "postal_code,expected_count", + [ + ("40100", 1), + ("40106", 2), + ("00000", 0), + ], +) +def test_postal_codes_retrieve(postal_code: str, expected_count: int) -> None: + postal_codes = list(PostalCodes.all(postal_code=postal_code)) + assert len(postal_codes) == expected_count From 500cb27d9e2fc237a75be5f16810f6fb11f56778 Mon Sep 17 00:00:00 2001 From: gabino Date: Wed, 9 Jul 2025 17:03:22 -0600 Subject: [PATCH 4/7] Update cuenca-validations to version 2.1.8.dev7 and bump internal version to 2.1.5.dev1 --- cuenca/version.py | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cuenca/version.py b/cuenca/version.py index 8c121fec..1261825d 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '2.1.5' +__version__ = '2.1.5.dev1' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' diff --git a/requirements.txt b/requirements.txt index ea95e481..c55aa50c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.32.3 -cuenca-validations==2.1.8.dev2 +cuenca-validations==2.1.8.dev7 pydantic-extra-types==2.10.2 From bdc72400b8a1162a7456a891485a55974a261b19 Mon Sep 17 00:00:00 2001 From: gabino Date: Wed, 9 Jul 2025 17:58:36 -0600 Subject: [PATCH 5/7] Update version to 2.1.5 for stable release --- cuenca/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca/version.py b/cuenca/version.py index 1261825d..8c121fec 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '2.1.5.dev1' +__version__ = '2.1.5' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' From 0177a23b193d33e7e87c724ac9c3f3c59d60d5ff Mon Sep 17 00:00:00 2001 From: gabino Date: Wed, 9 Jul 2025 18:10:42 -0600 Subject: [PATCH 6/7] Update user profession and add verification IDs in tests --- tests/conftest.py | 9 +++++---- tests/resources/test_users.py | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index c659e32e..73269127 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,6 +3,7 @@ import pytest from cuenca_validations.types import Country, Gender, State +from cuenca_validations.types.enums import Profession import cuenca @@ -49,15 +50,15 @@ def user_request() -> dict: curp='LOHJ660606HDFPRS02', phone_number='+525511223344', email_address='jose@test.com', - profession='employee', + profession=Profession.empleado, address=dict( street='calle 1', ext_number='2', int_number='3', - postal_code='09900', - state=State.DF.value, - country=Country.MX, + postal_code_id='PC2ygq9j2bS9-9tsuVawzErA', ), + phone_verification_id='VERdkuqOCjSA2PSS-VCj7HhQ', + email_verification_id='VERppwdqsQSAQFFF-CDsWD8s', ) return user_dict diff --git a/tests/resources/test_users.py b/tests/resources/test_users.py index ef5453d1..c8746e1e 100644 --- a/tests/resources/test_users.py +++ b/tests/resources/test_users.py @@ -2,6 +2,7 @@ import pytest from cuenca_validations.types import VerificationType +from cuenca_validations.types.enums import Profession from cuenca import Verification from cuenca.resources import CurpValidation, User @@ -30,7 +31,7 @@ def test_user_query(): def test_user_update(): user_id = 'USCM-zlFcNQk6ue4gZ_mTGeQ' changes = dict( - profession='programmer', + profession=Profession.sistemas, phone_number='+525555555555', govt_id=dict( type='ine', From e72923cd5fcbb338b8469043a7a304b0dd45b4ce Mon Sep 17 00:00:00 2001 From: gabino Date: Wed, 9 Jul 2025 18:33:26 -0600 Subject: [PATCH 7/7] Update cuenca-validations to version 2.1.8 in requirements.txt --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c55aa50c..b2c46c75 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.32.3 -cuenca-validations==2.1.8.dev7 +cuenca-validations==2.1.8 pydantic-extra-types==2.10.2