From e1b1911e5fb3821e5acb21cec52ebe12d939a55d Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Fri, 26 Mar 2021 11:28:40 -0600 Subject: [PATCH 01/26] test commit --- cuenca/resources/arpc.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 cuenca/resources/arpc.py diff --git a/cuenca/resources/arpc.py b/cuenca/resources/arpc.py new file mode 100644 index 00000000..e69de29b From f18552d30c6805085e9b732a98aa8b8aa828379d Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Fri, 26 Mar 2021 15:31:28 -0600 Subject: [PATCH 02/26] resources --- cuenca/resources/arpc.py | 38 +++++++++++++++++++++++++ cuenca/resources/card_validations.py | 42 ++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 cuenca/resources/card_validations.py diff --git a/cuenca/resources/arpc.py b/cuenca/resources/arpc.py index e69de29b..165d00cd 100644 --- a/cuenca/resources/arpc.py +++ b/cuenca/resources/arpc.py @@ -0,0 +1,38 @@ +import datetime as dt +from typing import ClassVar, cast + +from pydantic.dataclasses import dataclass + +from ..http import Session, session as global_session +from .base import Creatable +from .tmp import ARPCRequest + + +@dataclass +class ARPC(Creatable): + _resource: ClassVar = 'arpc' + + created_at: dt.datetime + card_id: str + is_valid_arqc: bool + arpc: str + + @classmethod + def create( + cls, + arqc: str, + key_derivation_method: str, + arpc_method: str, + txn_data: str, + *, + session: Session = global_session, + **data, + ) -> 'ARPC': + req = ARPCRequest( + arqc=arqc, + key_derivation_method=key_derivation_method, + arpc_method=arpc_method, + txn_data=txn_data, + **data, + ) + return cast('ARPC', cls._create(session=session, **req.dict())) diff --git a/cuenca/resources/card_validations.py b/cuenca/resources/card_validations.py new file mode 100644 index 00000000..37f41ced --- /dev/null +++ b/cuenca/resources/card_validations.py @@ -0,0 +1,42 @@ +import datetime as dt +from typing import ClassVar, Optional, cast + +from pydantic.dataclasses import dataclass + +from ..http import Session, session as global_session +from .base import Creatable +from .tmp import CardValidationRequest + + +@dataclass +class CardValidations(Creatable): + _resource: ClassVar = 'card_validations' + + created_at: dt.datetime + card_id: str + is_valid_arqc: bool + arpc: str + + @classmethod + def create( + cls, + number: str, + cvv: Optional[str] = None, + cvv2: Optional[str] = None, + icvv: Optional[str] = None, + exp_date: Optional[str] = None, + pin_block: Optional[str] = None, + *, + session: Session = global_session, + ) -> 'CardValidations': + req = CardValidationRequest( + number=number, + cvv=cvv, + cvv2=cvv2, + icvv=icvv, + exp_date=exp_date, + pin_block=pin_block, + ) + return cast( + 'CardValidations', cls._create(session=session, **req.dict()) + ) From bc8615c250825ce99cb5cabfea8e164d23cb406c Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Fri, 26 Mar 2021 15:42:57 -0600 Subject: [PATCH 03/26] propeerty bin --- cuenca/resources/cards.py | 4 ++++ tests/resources/test_cards.py | 1 + 2 files changed, 5 insertions(+) diff --git a/cuenca/resources/cards.py b/cuenca/resources/cards.py index ff602d1b..ab0e1b8d 100644 --- a/cuenca/resources/cards.py +++ b/cuenca/resources/cards.py @@ -35,6 +35,10 @@ class Card(Retrievable, Queryable, Creatable, Updateable): def last_4_digits(self): return self.number[-4:] + @property + def bin(self): + return self.number[:6] + @classmethod def create( cls, diff --git a/tests/resources/test_cards.py b/tests/resources/test_cards.py index ce1d1ec7..f01d4ca1 100644 --- a/tests/resources/test_cards.py +++ b/tests/resources/test_cards.py @@ -35,6 +35,7 @@ def test_card_retrieve(): assert card.id == card_id assert len(card.number) == 16 assert card.last_4_digits == '9849' + assert card.bin == '544875' assert card.type == CardType.virtual From 17da16e98c5a4a8bed1b4e39e6b6c58c454cf9a5 Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Mon, 29 Mar 2021 16:33:36 -0600 Subject: [PATCH 04/26] resource CardValidation --- cuenca/resources/arpc.py | 2 +- cuenca/resources/card_validations.py | 30 ++++++++++++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/cuenca/resources/arpc.py b/cuenca/resources/arpc.py index 165d00cd..f6c62265 100644 --- a/cuenca/resources/arpc.py +++ b/cuenca/resources/arpc.py @@ -1,11 +1,11 @@ import datetime as dt from typing import ClassVar, cast +from cuenca_validations.types.requests import ARPCRequest from pydantic.dataclasses import dataclass from ..http import Session, session as global_session from .base import Creatable -from .tmp import ARPCRequest @dataclass diff --git a/cuenca/resources/card_validations.py b/cuenca/resources/card_validations.py index 37f41ced..3ceea8a8 100644 --- a/cuenca/resources/card_validations.py +++ b/cuenca/resources/card_validations.py @@ -1,21 +1,29 @@ import datetime as dt from typing import ClassVar, Optional, cast +from cuenca_validations.types.requests import CardValidationRequest from pydantic.dataclasses import dataclass +from cuenca import Card + from ..http import Session, session as global_session from .base import Creatable -from .tmp import CardValidationRequest +from .resources import retrieve_uri @dataclass -class CardValidations(Creatable): +class CardValidation(Creatable): _resource: ClassVar = 'card_validations' created_at: dt.datetime - card_id: str - is_valid_arqc: bool - arpc: str + card_uri: str + is_active: bool + is_valid_cvv: Optional[bool] + is_valid_cvv2: Optional[bool] + is_valid_icvv: Optional[bool] + is_valid_pin_block: Optional[bool] + is_valid_exp_date: Optional[bool] + is_expired: bool @classmethod def create( @@ -24,19 +32,25 @@ def create( cvv: Optional[str] = None, cvv2: Optional[str] = None, icvv: Optional[str] = None, - exp_date: Optional[str] = None, + exp_month: Optional[int] = None, + exp_year: Optional[int] = None, pin_block: Optional[str] = None, *, session: Session = global_session, - ) -> 'CardValidations': + ) -> 'CardValidation': req = CardValidationRequest( number=number, cvv=cvv, cvv2=cvv2, icvv=icvv, - exp_date=exp_date, + exp_month=exp_month, + exp_year=exp_year, pin_block=pin_block, ) return cast( 'CardValidations', cls._create(session=session, **req.dict()) ) + + @property # type: ignore + def card(self) -> Card: + return cast(Card, retrieve_uri(self.card_uri)) From 40fb31367e25b0bb047b1ec89735c6c37ca2d43e Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Tue, 30 Mar 2021 11:01:42 -0600 Subject: [PATCH 05/26] tests --- cuenca/resources/__init__.py | 6 ++++++ cuenca/resources/card_validations.py | 9 ++++++--- tests/resources/test_arpc.py | 23 +++++++++++++++++++++++ tests/resources/test_card_validations.py | 22 ++++++++++++++++++++++ 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 tests/resources/test_arpc.py create mode 100644 tests/resources/test_card_validations.py diff --git a/cuenca/resources/__init__.py b/cuenca/resources/__init__.py index c0055cfe..5f6c6868 100644 --- a/cuenca/resources/__init__.py +++ b/cuenca/resources/__init__.py @@ -1,11 +1,13 @@ __all__ = [ 'ApiKey', 'Account', + 'ARPC', 'BalanceEntry', 'BillPayment', 'Card', 'CardActivation', 'CardTransaction', + 'CardValidation', 'Commission', 'Deposit', 'LoginToken', @@ -18,10 +20,12 @@ from .accounts import Account from .api_keys import ApiKey +from .arpc import ARPC from .balance_entries import BalanceEntry from .bill_payments import BillPayment from .card_activations import CardActivation from .card_transactions import CardTransaction +from .card_validations import CardValidation from .cards import Card from .commissions import Commission from .deposits import Deposit @@ -38,11 +42,13 @@ resource_classes = [ ApiKey, Account, + ARPC, BalanceEntry, BillPayment, Card, CardActivation, CardTransaction, + CardValidation, Commission, Deposit, LoginToken, diff --git a/cuenca/resources/card_validations.py b/cuenca/resources/card_validations.py index 3ceea8a8..a5e74694 100644 --- a/cuenca/resources/card_validations.py +++ b/cuenca/resources/card_validations.py @@ -4,10 +4,9 @@ from cuenca_validations.types.requests import CardValidationRequest from pydantic.dataclasses import dataclass -from cuenca import Card - from ..http import Session, session as global_session from .base import Creatable +from .cards import Card from .resources import retrieve_uri @@ -51,6 +50,10 @@ def create( 'CardValidations', cls._create(session=session, **req.dict()) ) - @property # type: ignore + @property def card(self) -> Card: return cast(Card, retrieve_uri(self.card_uri)) + + @property + def card_id(self) -> str: + return self.card_uri.split('/')[-1] diff --git a/tests/resources/test_arpc.py b/tests/resources/test_arpc.py new file mode 100644 index 00000000..e6fbef54 --- /dev/null +++ b/tests/resources/test_arpc.py @@ -0,0 +1,23 @@ +import cuenca +from cuenca import session +from cuenca.resources import ARPC + + +def test_arpc(): + session.host = 'stage.cuenca.com' + api_key = 'AK36EAQXIlurg53pRjcvtx30' + api_secret = 'Ea-6JmpnRX3ZKi4oGHpsmroGEEPU1vgu2Eq362B27KiJG2aLGkuGh3pYfG725yDSNxQn0L92zCoFvEdnrr1Ybw' + cuenca.configure(api_key=api_key, api_secret=api_secret) + arpc_req = dict( + arqc='test_arqc', + key_derivation_method='3', + arpc_method='1', + txn_data='justsomerandomdata', + card_id='CA1234', + arc='arc', + pan_sequence='00', + unique_number='number', + atc='atc', + ) + arpc = ARPC.create(**arpc_req) + assert arpc.is_valid_arqc diff --git a/tests/resources/test_card_validations.py b/tests/resources/test_card_validations.py new file mode 100644 index 00000000..5ef40bf2 --- /dev/null +++ b/tests/resources/test_card_validations.py @@ -0,0 +1,22 @@ +from cuenca.resources import CardValidation + + +def test_card_validations(): + card_data = dict( + number='5448750129965637', + cvv='150', + cvv2='685', + icvv='399', + exp_month=2, + exp_year=25, + pin_block='B57D25D49FD1F88A', + ) + validation = CardValidation.create(**card_data) + assert validation.is_active + assert validation.card_uri is not None + assert validation.is_valid_cvv + assert validation.is_valid_cvv2 + assert validation.is_valid_icvv + assert validation.is_valid_pin_block + assert validation.is_valid_exp_date + assert not validation.is_expired From f893d0436b7dc01ae566fcc6b7a8e8cf4012d2c5 Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Tue, 30 Mar 2021 11:22:49 -0600 Subject: [PATCH 06/26] Fix name --- cuenca/resources/card_validations.py | 2 +- tests/resources/test_arpc.py | 9 +++------ tests/resources/test_card_validations.py | 3 +++ 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cuenca/resources/card_validations.py b/cuenca/resources/card_validations.py index a5e74694..bd61842c 100644 --- a/cuenca/resources/card_validations.py +++ b/cuenca/resources/card_validations.py @@ -47,7 +47,7 @@ def create( pin_block=pin_block, ) return cast( - 'CardValidations', cls._create(session=session, **req.dict()) + 'CardValidation', cls._create(session=session, **req.dict()) ) @property diff --git a/tests/resources/test_arpc.py b/tests/resources/test_arpc.py index e6fbef54..d2d1b4f7 100644 --- a/tests/resources/test_arpc.py +++ b/tests/resources/test_arpc.py @@ -1,13 +1,10 @@ -import cuenca -from cuenca import session +import pytest + from cuenca.resources import ARPC +@pytest.mark.skip(reason="Not ready") def test_arpc(): - session.host = 'stage.cuenca.com' - api_key = 'AK36EAQXIlurg53pRjcvtx30' - api_secret = 'Ea-6JmpnRX3ZKi4oGHpsmroGEEPU1vgu2Eq362B27KiJG2aLGkuGh3pYfG725yDSNxQn0L92zCoFvEdnrr1Ybw' - cuenca.configure(api_key=api_key, api_secret=api_secret) arpc_req = dict( arqc='test_arqc', key_derivation_method='3', diff --git a/tests/resources/test_card_validations.py b/tests/resources/test_card_validations.py index 5ef40bf2..f58e5b3d 100644 --- a/tests/resources/test_card_validations.py +++ b/tests/resources/test_card_validations.py @@ -1,6 +1,9 @@ +import pytest + from cuenca.resources import CardValidation +@pytest.mark.skip(reason="Not ready") def test_card_validations(): card_data = dict( number='5448750129965637', From 6ab75c8ad08dc73389f2826867fd59b5234e7c28 Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Tue, 30 Mar 2021 12:16:21 -0600 Subject: [PATCH 07/26] models in init --- cuenca/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cuenca/__init__.py b/cuenca/__init__.py index 15afeb18..5a67c3ad 100644 --- a/cuenca/__init__.py +++ b/cuenca/__init__.py @@ -2,11 +2,13 @@ '__version__', 'ApiKey', 'Account', + 'ARPC', 'BalanceEntry', 'BillPayment', 'Card', 'CardActivation', 'CardTransaction', + 'CardValidation', 'Commission', 'Deposit', 'LoginToken', @@ -24,11 +26,13 @@ from .resources import ( Account, ApiKey, + ARPC, BalanceEntry, BillPayment, Card, CardActivation, CardTransaction, + CardValidation, Commission, Deposit, LoginToken, From f23c334ee1c686ad98868f68969d5d2d0b9ccc0d Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Tue, 30 Mar 2021 12:47:12 -0600 Subject: [PATCH 08/26] Errors for arpc --- cuenca/__init__.py | 2 +- cuenca/resources/arpc.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cuenca/__init__.py b/cuenca/__init__.py index 5a67c3ad..f1a35f45 100644 --- a/cuenca/__init__.py +++ b/cuenca/__init__.py @@ -24,9 +24,9 @@ from .http import session from .resources import ( + ARPC, Account, ApiKey, - ARPC, BalanceEntry, BillPayment, Card, diff --git a/cuenca/resources/arpc.py b/cuenca/resources/arpc.py index f6c62265..b2643abd 100644 --- a/cuenca/resources/arpc.py +++ b/cuenca/resources/arpc.py @@ -1,5 +1,5 @@ import datetime as dt -from typing import ClassVar, cast +from typing import ClassVar, Optional, cast from cuenca_validations.types.requests import ARPCRequest from pydantic.dataclasses import dataclass @@ -13,9 +13,9 @@ class ARPC(Creatable): _resource: ClassVar = 'arpc' created_at: dt.datetime - card_id: str - is_valid_arqc: bool - arpc: str + card_uri: str + is_valid_arqc: Optional[bool] + arpc: Optional[str] @classmethod def create( From 92dfc871c61db1e4deebc778d7309f72697e46b5 Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Thu, 1 Apr 2021 16:18:25 -0600 Subject: [PATCH 09/26] New field for ARPC --- cuenca/resources/arpc.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cuenca/resources/arpc.py b/cuenca/resources/arpc.py index b2643abd..9cd50197 100644 --- a/cuenca/resources/arpc.py +++ b/cuenca/resources/arpc.py @@ -16,6 +16,7 @@ class ARPC(Creatable): card_uri: str is_valid_arqc: Optional[bool] arpc: Optional[str] + err: Optional[str] @classmethod def create( From 7e817e729a98b3a788e022021fbbfdc071fd17fb Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Thu, 1 Apr 2021 18:13:09 -0600 Subject: [PATCH 10/26] card_id to number --- tests/resources/test_arpc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/resources/test_arpc.py b/tests/resources/test_arpc.py index d2d1b4f7..c9cd2bbc 100644 --- a/tests/resources/test_arpc.py +++ b/tests/resources/test_arpc.py @@ -6,11 +6,11 @@ @pytest.mark.skip(reason="Not ready") def test_arpc(): arpc_req = dict( + number='1234567890123403', arqc='test_arqc', key_derivation_method='3', arpc_method='1', txn_data='justsomerandomdata', - card_id='CA1234', arc='arc', pan_sequence='00', unique_number='number', From 1210f318d3b492b5afa297fdb8dca7a614724af2 Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Wed, 7 Apr 2021 21:09:37 -0500 Subject: [PATCH 11/26] update pin interface --- cuenca/resources/cards.py | 5 ++++- tests/resources/test_cards.py | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/cuenca/resources/cards.py b/cuenca/resources/cards.py index ab0e1b8d..0eff1162 100644 --- a/cuenca/resources/cards.py +++ b/cuenca/resources/cards.py @@ -68,6 +68,7 @@ def update( cls, card_id: str, status: Optional[CardStatus] = None, + pin_block: Optional[str] = None, *, session: Session = global_session, ) -> 'Card': @@ -77,9 +78,11 @@ def update( :param card_id: existing card_id :param status: + :param pin_block + :param session: :return: Updated card object """ - req = CardUpdateRequest(status=status) + req = CardUpdateRequest(status=status, pin_block=pin_block) resp = cls._update(card_id, session=session, **req.dict()) return cast('Card', resp) diff --git a/tests/resources/test_cards.py b/tests/resources/test_cards.py index f01d4ca1..6a8ab4bb 100644 --- a/tests/resources/test_cards.py +++ b/tests/resources/test_cards.py @@ -75,6 +75,13 @@ def test_card_update(): assert card.status == CardStatus.active +@pytest.mark.skip(reason="Not ready") +def test_card_update_pin(): + new_pin = '7AC814A636D901BE' + card = Card.update(card_id, pin_block=new_pin) + assert card.pin == new_pin + + @pytest.mark.vcr def test_deactivate_card(): card = Card.deactivate(card_id) From 8df8dd617969e8f6c8ab289a38ce674698ca97b1 Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Thu, 8 Apr 2021 18:49:09 -0500 Subject: [PATCH 12/26] card_data in cards-validations --- cuenca/resources/card_validations.py | 9 ++++++++- tests/resources/test_card_validations.py | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/cuenca/resources/card_validations.py b/cuenca/resources/card_validations.py index bd61842c..33f8a628 100644 --- a/cuenca/resources/card_validations.py +++ b/cuenca/resources/card_validations.py @@ -1,6 +1,7 @@ import datetime as dt from typing import ClassVar, Optional, cast +from cuenca_validations.types import CardStatus, CardType from cuenca_validations.types.requests import CardValidationRequest from pydantic.dataclasses import dataclass @@ -16,7 +17,9 @@ class CardValidation(Creatable): created_at: dt.datetime card_uri: str - is_active: bool + user_id: str + card_status: CardStatus + card_type: CardType is_valid_cvv: Optional[bool] is_valid_cvv2: Optional[bool] is_valid_icvv: Optional[bool] @@ -57,3 +60,7 @@ def card(self) -> Card: @property def card_id(self) -> str: return self.card_uri.split('/')[-1] + + @property + def is_active(self): + return self.card_status == CardStatus.active diff --git a/tests/resources/test_card_validations.py b/tests/resources/test_card_validations.py index f58e5b3d..ffaeb1d0 100644 --- a/tests/resources/test_card_validations.py +++ b/tests/resources/test_card_validations.py @@ -7,8 +7,8 @@ def test_card_validations(): card_data = dict( number='5448750129965637', - cvv='150', - cvv2='685', + cvv='685', + cvv2='150', icvv='399', exp_month=2, exp_year=25, From d8ffee021ece8162002da9f5812919d80671ea97 Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Mon, 12 Apr 2021 20:45:14 -0500 Subject: [PATCH 13/26] arpc and rebase --- cuenca/resources/arpc.py | 18 ++++++++++++------ cuenca/version.py | 2 +- requirements.txt | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/cuenca/resources/arpc.py b/cuenca/resources/arpc.py index 9cd50197..14766096 100644 --- a/cuenca/resources/arpc.py +++ b/cuenca/resources/arpc.py @@ -21,19 +21,25 @@ class ARPC(Creatable): @classmethod def create( cls, + number: str, arqc: str, - key_derivation_method: str, arpc_method: str, - txn_data: str, + transaction_data: str, + response_code: str, + transaction_counter: str, + pan_sequence: str, + unique_number: str, *, session: Session = global_session, - **data, ) -> 'ARPC': req = ARPCRequest( + number=number, arqc=arqc, - key_derivation_method=key_derivation_method, arpc_method=arpc_method, - txn_data=txn_data, - **data, + transaction_data=transaction_data, + response_code=response_code, + transaction_counter=transaction_counter, + pan_sequence=pan_sequence, + unique_number=unique_number, ) return cast('ARPC', cls._create(session=session, **req.dict())) diff --git a/cuenca/version.py b/cuenca/version.py index 7cab8a4e..4eb99dcf 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '0.7.4' +__version__ = '0.7.5.dev1' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' diff --git a/requirements.txt b/requirements.txt index b6ea7db1..da75b8d0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.25.1 -cuenca-validations==0.9.2 +cuenca-validations==0.9.3.dev1 dataclasses>=0.7;python_version<"3.7" From bd58a80b5e04db0278a622aafb4722047df05ad4 Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Tue, 13 Apr 2021 12:12:34 -0500 Subject: [PATCH 14/26] track_data_method --- cuenca/resources/arpc.py | 2 ++ cuenca/version.py | 2 +- requirements.txt | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cuenca/resources/arpc.py b/cuenca/resources/arpc.py index 14766096..8d7fa585 100644 --- a/cuenca/resources/arpc.py +++ b/cuenca/resources/arpc.py @@ -29,6 +29,7 @@ def create( transaction_counter: str, pan_sequence: str, unique_number: str, + track_data_method: str, *, session: Session = global_session, ) -> 'ARPC': @@ -41,5 +42,6 @@ def create( transaction_counter=transaction_counter, pan_sequence=pan_sequence, unique_number=unique_number, + track_data_method=track_data_method, ) return cast('ARPC', cls._create(session=session, **req.dict())) diff --git a/cuenca/version.py b/cuenca/version.py index 4eb99dcf..b806be70 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '0.7.5.dev1' +__version__ = '0.7.5.dev2' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' diff --git a/requirements.txt b/requirements.txt index da75b8d0..af750660 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.25.1 -cuenca-validations==0.9.3.dev1 +cuenca-validations==0.9.3.dev2 dataclasses>=0.7;python_version<"3.7" From 04273a4a8979503086c3b2a63e9c0c4ac38f0509 Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Wed, 14 Apr 2021 15:02:01 -0500 Subject: [PATCH 15/26] Version --- cuenca/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca/version.py b/cuenca/version.py index b806be70..8187c3d7 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '0.7.5.dev2' +__version__ = '0.7.5' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' From b0cb38153c0a71c67194c17d1401070321143bd9 Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Wed, 14 Apr 2021 15:40:45 -0500 Subject: [PATCH 16/26] Test for ARQC resource --- tests/resources/cassettes/test_arpc.yaml | 59 ++++++++++++++++++++++++ tests/resources/test_arpc.py | 16 +++---- 2 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 tests/resources/cassettes/test_arpc.yaml diff --git a/tests/resources/cassettes/test_arpc.yaml b/tests/resources/cassettes/test_arpc.yaml new file mode 100644 index 00000000..647e4f1e --- /dev/null +++ b/tests/resources/cassettes/test_arpc.yaml @@ -0,0 +1,59 @@ +interactions: +- request: + body: '{"number": "1234567890123403", "arqc": "DB3C77D5469C53C6", "arpc_method": + "1", "transaction_data": "somerandomtransactiondata", + "response_code": "0010", "transaction_counter": "001D", "pan_sequence": "01", + "unique_number": "42D6A016", "track_data_method": "terminal"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - DUMMY + Connection: + - keep-alive + Content-Length: + - '320' + Content-Type: + - application/json + User-Agent: + - cuenca-python/0.7.5 + X-Cuenca-Api-Version: + - '2020-03-19' + method: POST + uri: https://sandbox.cuenca.com/arpc + response: + body: + string: '{"id":"ARfuiaeihfusbcibec","created_at":"2021-04-14T20:27:45.485000","card_uri":"/cards/CAoawhiursbcbeac","is_valid_arqc":true,"arpc":"16404ADAFB227B4D","err":null}' + headers: + Connection: + - keep-alive + Content-Length: + - '178' + Content-Type: + - application/json + Date: + - Wed, 14 Apr 2021 20:27:45 GMT + X-Amzn-Trace-Id: + - Root=1-60775040-62cf8efc0574bee15063442b;Sampled=0 + X-Request-Time: + - 'value: 1.001' + x-amz-apigw-id: + - dyl6HE7DiYcFdVg= + x-amzn-Remapped-Connection: + - keep-alive + x-amzn-Remapped-Content-Length: + - '178' + x-amzn-Remapped-Date: + - Wed, 14 Apr 2021 20:27:45 GMT + x-amzn-Remapped-Server: + - nginx/1.18.0 + x-amzn-Remapped-x-amzn-RequestId: + - fc51600d-4747-4443-89f1-a3c4040831b1 + x-amzn-RequestId: + - 342cac75-f28e-486d-9c8d-51923caf0624 + status: + code: 201 + message: Created +version: 1 diff --git a/tests/resources/test_arpc.py b/tests/resources/test_arpc.py index c9cd2bbc..df52139a 100644 --- a/tests/resources/test_arpc.py +++ b/tests/resources/test_arpc.py @@ -3,18 +3,18 @@ from cuenca.resources import ARPC -@pytest.mark.skip(reason="Not ready") +@pytest.mark.vcr def test_arpc(): arpc_req = dict( number='1234567890123403', - arqc='test_arqc', - key_derivation_method='3', + arqc='DB3C77D5469C53C6', arpc_method='1', - txn_data='justsomerandomdata', - arc='arc', - pan_sequence='00', - unique_number='number', - atc='atc', + transaction_data='somerandomtransactiondata', + response_code='0010', + pan_sequence='01', + unique_number='42D6A016', + transaction_counter='001D', + track_data_method='terminal', ) arpc = ARPC.create(**arpc_req) assert arpc.is_valid_arqc From a6cfeccf9f2642c619ed8907b8dfde004498f274 Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Wed, 14 Apr 2021 17:30:43 -0500 Subject: [PATCH 17/26] Testing card_validations --- .../cassettes/test_card_validations.yaml | 57 +++++++++++++++++++ tests/resources/test_card_validations.py | 6 +- 2 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 tests/resources/cassettes/test_card_validations.yaml diff --git a/tests/resources/cassettes/test_card_validations.yaml b/tests/resources/cassettes/test_card_validations.yaml new file mode 100644 index 00000000..39ae9392 --- /dev/null +++ b/tests/resources/cassettes/test_card_validations.yaml @@ -0,0 +1,57 @@ +interactions: +- request: + body: '{"number": "1234567890123403", "exp_month": 2, "exp_year": 25, "cvv": "685", + "cvv2": "150", "icvv": "399", "pin_block": "BDIEHA38457W"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - DUMMY + Connection: + - keep-alive + Content-Length: + - '139' + Content-Type: + - application/json + User-Agent: + - cuenca-python/0.7.5 + X-Cuenca-Api-Version: + - '2020-03-19' + method: POST + uri: https://sandbox.cuenca.com/card_validations + response: + body: + string: '{"id":"CVMEQXfhGwRNq9kwSGRJhu2g","created_at":"2021-04-14T22:26:18.912000","card_uri":"/cards/CA7pET83WM25VXO3IQ8BwYO3","user_id":"US3zGWi1n852bTyqD1wCZ1ft","card_status":"active","card_type":"physical","is_active":true,"is_valid_cvv":true,"is_valid_cvv2":true,"is_valid_icvv":true,"is_valid_pin_block":true,"is_valid_exp_date":true,"is_expired":false}' + headers: + Connection: + - keep-alive + Content-Length: + - '353' + Content-Type: + - application/json + Date: + - Wed, 14 Apr 2021 22:26:19 GMT + X-Amzn-Trace-Id: + - Root=1-60776c06-3500cd4101b3df9c5286d781;Sampled=0 + X-Request-Time: + - 'value: 5.058' + x-amz-apigw-id: + - dy3Q9HaXCYcFbTA= + x-amzn-Remapped-Connection: + - keep-alive + x-amzn-Remapped-Content-Length: + - '353' + x-amzn-Remapped-Date: + - Wed, 14 Apr 2021 22:26:19 GMT + x-amzn-Remapped-Server: + - nginx/1.18.0 + x-amzn-Remapped-x-amzn-RequestId: + - 431683b7-aef6-4229-9c69-1e059be697e7 + x-amzn-RequestId: + - 442c436b-502e-4f7d-b824-a393c4cc7ac7 + status: + code: 201 + message: Created +version: 1 diff --git a/tests/resources/test_card_validations.py b/tests/resources/test_card_validations.py index ffaeb1d0..8c8d923d 100644 --- a/tests/resources/test_card_validations.py +++ b/tests/resources/test_card_validations.py @@ -3,16 +3,16 @@ from cuenca.resources import CardValidation -@pytest.mark.skip(reason="Not ready") +@pytest.mark.vcr def test_card_validations(): card_data = dict( - number='5448750129965637', + number='1234567890123403', cvv='685', cvv2='150', icvv='399', exp_month=2, exp_year=25, - pin_block='B57D25D49FD1F88A', + pin_block='BDIEHA38457W', ) validation = CardValidation.create(**card_data) assert validation.is_active From 70c50181e770f78e2384c85addc6d846155bfc73 Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Wed, 14 Apr 2021 18:23:47 -0500 Subject: [PATCH 18/26] Coverage --- cuenca/resources/cards.py | 3 + .../cassettes/test_card_update_pin.yaml | 56 ++++++++++++++++ .../cassettes/test_card_validations.yaml | 66 ++++++++++++++++--- tests/resources/test_card_validations.py | 3 + tests/resources/test_cards.py | 4 +- 5 files changed, 122 insertions(+), 10 deletions(-) create mode 100644 tests/resources/cassettes/test_card_update_pin.yaml diff --git a/cuenca/resources/cards.py b/cuenca/resources/cards.py index 0eff1162..dd1edda4 100644 --- a/cuenca/resources/cards.py +++ b/cuenca/resources/cards.py @@ -30,6 +30,9 @@ class Card(Retrievable, Queryable, Creatable, Updateable): status: CardStatus issuer: CardIssuer funding_type: CardFundingType + pin_block: Optional[str] = None + pin_block_switch: Optional[str] = None + pin_block_embosser: Optional[str] = None @property def last_4_digits(self): diff --git a/tests/resources/cassettes/test_card_update_pin.yaml b/tests/resources/cassettes/test_card_update_pin.yaml new file mode 100644 index 00000000..40f1e20a --- /dev/null +++ b/tests/resources/cassettes/test_card_update_pin.yaml @@ -0,0 +1,56 @@ +interactions: +- request: + body: '{"pin_block": "7AC814A636D901BE"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - DUMMY + Connection: + - keep-alive + Content-Length: + - '33' + Content-Type: + - application/json + User-Agent: + - cuenca-python/0.7.5 + X-Cuenca-Api-Version: + - '2020-03-19' + method: PATCH + uri: https://sandbox.cuenca.com/cards/CAycvo_X9TQoKOKsaAvdqn3w + response: + body: + string: '{"id":"CAycvo_X9TQoKOKsaAvdqn3w","created_at":"2021-03-11T22:54:35.337000","updated_at":"2021-03-11T23:45:23.266000","user_id":"USfeauhf3873g85","number":"1234567890123403","exp_month":2,"exp_year":25,"cvv2":"150","type":"physical","status":"active","pin":"6725","issuer":"cuenca","funding_type":"debit","pin_block":"461F248CA285A5CB","batch":null,"manufacturer":null,"cvv":"685","icvv":"399","pin_block_switch":"7AC814A636D901BE","pin_block_embosser":"26641FB1CB03B667"}' + headers: + Connection: + - keep-alive + Content-Length: + - '480' + Content-Type: + - application/json + Date: + - Wed, 14 Apr 2021 23:05:36 GMT + X-Amzn-Trace-Id: + - Root=1-60777538-1d5098837edce6774d61ecb7;Sampled=0 + X-Request-Time: + - 'value: 7.757' + x-amz-apigw-id: + - dy9A0EDaCYcFWzw= + x-amzn-Remapped-Connection: + - keep-alive + x-amzn-Remapped-Content-Length: + - '480' + x-amzn-Remapped-Date: + - Wed, 14 Apr 2021 23:05:36 GMT + x-amzn-Remapped-Server: + - nginx/1.18.0 + x-amzn-Remapped-x-amzn-RequestId: + - 85b2184b-d132-46d8-9fc3-2abb4167eb0f + x-amzn-RequestId: + - 07367a9e-1066-419a-8048-07dabe32595d + status: + code: 200 + message: OK +version: 1 diff --git a/tests/resources/cassettes/test_card_validations.yaml b/tests/resources/cassettes/test_card_validations.yaml index 39ae9392..eda3c0ec 100644 --- a/tests/resources/cassettes/test_card_validations.yaml +++ b/tests/resources/cassettes/test_card_validations.yaml @@ -23,7 +23,7 @@ interactions: uri: https://sandbox.cuenca.com/card_validations response: body: - string: '{"id":"CVMEQXfhGwRNq9kwSGRJhu2g","created_at":"2021-04-14T22:26:18.912000","card_uri":"/cards/CA7pET83WM25VXO3IQ8BwYO3","user_id":"US3zGWi1n852bTyqD1wCZ1ft","card_status":"active","card_type":"physical","is_active":true,"is_valid_cvv":true,"is_valid_cvv2":true,"is_valid_icvv":true,"is_valid_pin_block":true,"is_valid_exp_date":true,"is_expired":false}' + string: '{"id":"CVlYj-hNIfQpmJH7mcc8GpoA","created_at":"2021-04-14T23:19:53.928000","card_uri":"/cards/CA7pET83WM25VXO3IQ8BwYO3","user_id":"US3zGWi1n852bTyqD1wCZ1ft","card_status":"active","card_type":"physical","is_active":true,"is_valid_cvv":true,"is_valid_cvv2":true,"is_valid_icvv":true,"is_valid_pin_block":true,"is_valid_exp_date":true,"is_expired":false}' headers: Connection: - keep-alive @@ -32,26 +32,76 @@ interactions: Content-Type: - application/json Date: - - Wed, 14 Apr 2021 22:26:19 GMT + - Wed, 14 Apr 2021 23:19:54 GMT X-Amzn-Trace-Id: - - Root=1-60776c06-3500cd4101b3df9c5286d781;Sampled=0 + - Root=1-60777894-7b1b1c365ab7d3e818fd9b89;Sampled=0 X-Request-Time: - - 'value: 5.058' + - 'value: 5.099' x-amz-apigw-id: - - dy3Q9HaXCYcFbTA= + - dy_HSH_miYcF2Yw= x-amzn-Remapped-Connection: - keep-alive x-amzn-Remapped-Content-Length: - '353' x-amzn-Remapped-Date: - - Wed, 14 Apr 2021 22:26:19 GMT + - Wed, 14 Apr 2021 23:19:54 GMT x-amzn-Remapped-Server: - nginx/1.18.0 x-amzn-Remapped-x-amzn-RequestId: - - 431683b7-aef6-4229-9c69-1e059be697e7 + - 1b3475f9-24d3-4d08-bad5-de61287be5e4 x-amzn-RequestId: - - 442c436b-502e-4f7d-b824-a393c4cc7ac7 + - c0f8ddfb-88d8-4d11-b3cf-7a4048abdea5 status: code: 201 message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - DUMMY + Connection: + - keep-alive + User-Agent: + - cuenca-python/0.7.5 + X-Cuenca-Api-Version: + - '2020-03-19' + method: GET + uri: https://sandbox.cuenca.com/cards/CA7pET83WM25VXO3IQ8BwYO3 + response: + body: + string: '{"id":"CA7pET83WM25VXO3IQ8BwYO3","created_at":"2021-03-11T22:54:35.337000","updated_at":"2021-03-11T23:45:23.266000","user_id":"US3zGWi1n852bTyqD1wCZ1ft","number":"5448750129965637","exp_month":2,"exp_year":25,"cvv2":"150","type":"physical","status":"active","pin":"6725","issuer":"cuenca","funding_type":"debit","pin_block":"461F248CA285A5CB","batch":null,"manufacturer":null,"cvv":"685","icvv":"399","pin_block_switch":"3B241739AB05D290","pin_block_embosser":"26641FB1CB03B667"}' + headers: + Connection: + - keep-alive + Content-Length: + - '480' + Content-Type: + - application/json + Date: + - Wed, 14 Apr 2021 23:19:54 GMT + X-Amzn-Trace-Id: + - Root=1-6077789a-1895180e4d53b05655b53c24;Sampled=0 + X-Request-Time: + - 'value: 0.708' + x-amz-apigw-id: + - dy_IHEEZiYcFQsw= + x-amzn-Remapped-Connection: + - keep-alive + x-amzn-Remapped-Content-Length: + - '480' + x-amzn-Remapped-Date: + - Wed, 14 Apr 2021 23:19:54 GMT + x-amzn-Remapped-Server: + - nginx/1.18.0 + x-amzn-Remapped-x-amzn-RequestId: + - fbde3e85-a233-481e-b0c0-33b0e9fc92d1 + x-amzn-RequestId: + - 624ac3a8-9c57-4b4e-83b8-a7f21722e4ff + status: + code: 200 + message: OK version: 1 diff --git a/tests/resources/test_card_validations.py b/tests/resources/test_card_validations.py index 8c8d923d..948e7efa 100644 --- a/tests/resources/test_card_validations.py +++ b/tests/resources/test_card_validations.py @@ -23,3 +23,6 @@ def test_card_validations(): assert validation.is_valid_pin_block assert validation.is_valid_exp_date assert not validation.is_expired + c = validation.card + assert validation.card_id == c.id + assert validation.is_active diff --git a/tests/resources/test_cards.py b/tests/resources/test_cards.py index 6a8ab4bb..55640543 100644 --- a/tests/resources/test_cards.py +++ b/tests/resources/test_cards.py @@ -75,11 +75,11 @@ def test_card_update(): assert card.status == CardStatus.active -@pytest.mark.skip(reason="Not ready") +@pytest.mark.vcr def test_card_update_pin(): new_pin = '7AC814A636D901BE' card = Card.update(card_id, pin_block=new_pin) - assert card.pin == new_pin + assert card.pin_block_switch == new_pin @pytest.mark.vcr From 82e10e4b50b2d4c2d27fa8f823e0f3498446258d Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Wed, 14 Apr 2021 18:49:55 -0500 Subject: [PATCH 19/26] removing pin_block --- cuenca/resources/cards.py | 3 --- tests/resources/test_cards.py | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/cuenca/resources/cards.py b/cuenca/resources/cards.py index dd1edda4..0eff1162 100644 --- a/cuenca/resources/cards.py +++ b/cuenca/resources/cards.py @@ -30,9 +30,6 @@ class Card(Retrievable, Queryable, Creatable, Updateable): status: CardStatus issuer: CardIssuer funding_type: CardFundingType - pin_block: Optional[str] = None - pin_block_switch: Optional[str] = None - pin_block_embosser: Optional[str] = None @property def last_4_digits(self): diff --git a/tests/resources/test_cards.py b/tests/resources/test_cards.py index 55640543..19b4a42c 100644 --- a/tests/resources/test_cards.py +++ b/tests/resources/test_cards.py @@ -79,7 +79,7 @@ def test_card_update(): def test_card_update_pin(): new_pin = '7AC814A636D901BE' card = Card.update(card_id, pin_block=new_pin) - assert card.pin_block_switch == new_pin + assert card @pytest.mark.vcr From f8fb30da9e3d8d37a428cf61b90117e0b4a5427b Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Thu, 15 Apr 2021 11:36:20 -0500 Subject: [PATCH 20/26] Bump cuenca-validations --- 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 8187c3d7..e04b0fd8 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '0.7.5' +__version__ = '0.7.6' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' diff --git a/requirements.txt b/requirements.txt index af750660..c9bed349 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.25.1 -cuenca-validations==0.9.3.dev2 +cuenca-validations==0.9.3.dev3 dataclasses>=0.7;python_version<"3.7" From 1b4ed71affcec1bacf2d1515c675bf9ffe5d2c60 Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Thu, 15 Apr 2021 11:37:19 -0500 Subject: [PATCH 21/26] Version --- cuenca/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca/version.py b/cuenca/version.py index e04b0fd8..a77560c6 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '0.7.6' +__version__ = '0.7.5.dev3' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' From b9a0d8ba196cfa2876260d496f8df3ff3c481997 Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Tue, 20 Apr 2021 18:05:50 -0500 Subject: [PATCH 22/26] arpc comments --- cuenca/__init__.py | 4 ++-- cuenca/resources/__init__.py | 6 +++--- cuenca/resources/arpc.py | 15 +++++++++++++-- tests/resources/test_arpc.py | 4 ++-- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/cuenca/__init__.py b/cuenca/__init__.py index f1a35f45..5bd6d5bd 100644 --- a/cuenca/__init__.py +++ b/cuenca/__init__.py @@ -2,7 +2,7 @@ '__version__', 'ApiKey', 'Account', - 'ARPC', + 'Arpc', 'BalanceEntry', 'BillPayment', 'Card', @@ -24,9 +24,9 @@ from .http import session from .resources import ( - ARPC, Account, ApiKey, + Arpc, BalanceEntry, BillPayment, Card, diff --git a/cuenca/resources/__init__.py b/cuenca/resources/__init__.py index 5f6c6868..70b07b56 100644 --- a/cuenca/resources/__init__.py +++ b/cuenca/resources/__init__.py @@ -1,7 +1,7 @@ __all__ = [ 'ApiKey', 'Account', - 'ARPC', + 'Arpc', 'BalanceEntry', 'BillPayment', 'Card', @@ -20,7 +20,7 @@ from .accounts import Account from .api_keys import ApiKey -from .arpc import ARPC +from .arpc import Arpc from .balance_entries import BalanceEntry from .bill_payments import BillPayment from .card_activations import CardActivation @@ -42,7 +42,7 @@ resource_classes = [ ApiKey, Account, - ARPC, + Arpc, BalanceEntry, BillPayment, Card, diff --git a/cuenca/resources/arpc.py b/cuenca/resources/arpc.py index 8d7fa585..b083b803 100644 --- a/cuenca/resources/arpc.py +++ b/cuenca/resources/arpc.py @@ -9,7 +9,18 @@ @dataclass -class ARPC(Creatable): +class Arpc(Creatable): + """ + An ARPC (Authorisation Response Cryptogram) is generated by the issuer + to authorize EMV transactions (Chip, Contactless) + + The point of sales terminal or ATM generate an ARQC (Authorization Request + Cryptogram) to obtain authorization for transactions. + After, the issuer has to verified the ARQC and generate an ARPC. + Finally the ARPC is sent back to the point of sales terminal to authorize + the transaction and validate the issuer as authentic + """ + _resource: ClassVar = 'arpc' created_at: dt.datetime @@ -32,7 +43,7 @@ def create( track_data_method: str, *, session: Session = global_session, - ) -> 'ARPC': + ) -> 'Arpc': req = ARPCRequest( number=number, arqc=arqc, diff --git a/tests/resources/test_arpc.py b/tests/resources/test_arpc.py index df52139a..aad649ae 100644 --- a/tests/resources/test_arpc.py +++ b/tests/resources/test_arpc.py @@ -1,6 +1,6 @@ import pytest -from cuenca.resources import ARPC +from cuenca.resources import Arpc @pytest.mark.vcr @@ -16,5 +16,5 @@ def test_arpc(): transaction_counter='001D', track_data_method='terminal', ) - arpc = ARPC.create(**arpc_req) + arpc = Arpc.create(**arpc_req) assert arpc.is_valid_arqc From b04f5f89274b152b7626bf5b542a0ce958531728 Mon Sep 17 00:00:00 2001 From: rogelioLpz Date: Tue, 20 Apr 2021 18:46:08 -0500 Subject: [PATCH 23/26] lint --- cuenca/resources/arpc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca/resources/arpc.py b/cuenca/resources/arpc.py index b083b803..73237231 100644 --- a/cuenca/resources/arpc.py +++ b/cuenca/resources/arpc.py @@ -55,4 +55,4 @@ def create( unique_number=unique_number, track_data_method=track_data_method, ) - return cast('ARPC', cls._create(session=session, **req.dict())) + return cast('Arpc', cls._create(session=session, **req.dict())) From 0f8cb9ace5a1f842da8c24cdcc77720976444ad1 Mon Sep 17 00:00:00 2001 From: Pach Date: Thu, 22 Apr 2021 10:56:31 -0500 Subject: [PATCH 24/26] update cuenca-valdiations --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c9bed349..7b6a9c46 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ requests==2.25.1 -cuenca-validations==0.9.3.dev3 +cuenca-validations==0.9.3 dataclasses>=0.7;python_version<"3.7" From d9429eedf5758d66e89aef38f416c4a5db6dd690 Mon Sep 17 00:00:00 2001 From: Pach Date: Thu, 22 Apr 2021 10:56:52 -0500 Subject: [PATCH 25/26] update version --- cuenca/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca/version.py b/cuenca/version.py index a77560c6..adb8f92e 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '0.7.5.dev3' +__version__ = '0.7.5 CLIENT_VERSION = __version__ API_VERSION = '2020-03-19' From 764edbde37a2e2a9b222f95ce99b83888c196038 Mon Sep 17 00:00:00 2001 From: Manuel Avalos Date: Thu, 22 Apr 2021 10:59:26 -0500 Subject: [PATCH 26/26] Lint --- cuenca/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca/version.py b/cuenca/version.py index adb8f92e..8187c3d7 100644 --- a/cuenca/version.py +++ b/cuenca/version.py @@ -1,3 +1,3 @@ -__version__ = '0.7.5 +__version__ = '0.7.5' CLIENT_VERSION = __version__ API_VERSION = '2020-03-19'