Skip to content

Commit e26630d

Browse files
author
Ricardo
authored
New cards (#132)
* This is a way to solve it... * This one is clearer * Lint and test * Another lint * Fix test * Add another test just in case and its corresponding fix * To be clear * Add customized session * Bump versions * Adding issuer and funding_type * Adding card_activations * Rebase * Cassettes for everyone * Upgrade version * Upgrade version * Allow cuenca-validations * Conflict dependencies * card_activations model and version * Fix testt * Version * Adapting card_activations * Lint * Missing file * Version * cassettes and user_id optional * from_dict * Missing assert * Adding pin * Adding dacite as requirement * card_activations * Correct version * Revert file * Using card_uri instead of the card * Remove dacite * Fix cassette * Alex comments and cuenca-validations
1 parent cabf724 commit e26630d

19 files changed

+814
-187
lines changed

cuenca/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
'BalanceEntry',
66
'BillPayment',
77
'Card',
8+
'CardActivation',
89
'CardTransaction',
910
'Commission',
1011
'Deposit',
@@ -26,6 +27,7 @@
2627
BalanceEntry,
2728
BillPayment,
2829
Card,
30+
CardActivation,
2931
CardTransaction,
3032
Commission,
3133
Deposit,

cuenca/resources/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
'BalanceEntry',
55
'BillPayment',
66
'Card',
7+
'CardActivation',
78
'CardTransaction',
89
'Commission',
910
'Deposit',
@@ -19,6 +20,7 @@
1920
from .api_keys import ApiKey
2021
from .balance_entries import BalanceEntry
2122
from .bill_payments import BillPayment
23+
from .card_activations import CardActivation
2224
from .card_transactions import CardTransaction
2325
from .cards import Card
2426
from .commissions import Commission
@@ -39,6 +41,7 @@
3941
BalanceEntry,
4042
BillPayment,
4143
Card,
44+
CardActivation,
4245
CardTransaction,
4346
Commission,
4447
Deposit,
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import datetime as dt
2+
from dataclasses import dataclass
3+
from typing import ClassVar, Optional, cast
4+
5+
from cuenca_validations.types.requests import CardActivationRequest
6+
7+
from ..http import Session, session as global_session
8+
from .base import Creatable
9+
from .cards import Card
10+
from .resources import retrieve_uri
11+
12+
13+
@dataclass
14+
class CardActivation(Creatable):
15+
_resource: ClassVar = 'card_activations'
16+
17+
created_at: dt.datetime
18+
user_id: str
19+
ip_address: str
20+
card_uri: Optional[str]
21+
succeeded: bool
22+
23+
@classmethod
24+
def create(
25+
cls,
26+
number: str,
27+
exp_month: int,
28+
exp_year: int,
29+
cvv2: str,
30+
*,
31+
session: Session = global_session,
32+
) -> 'CardActivation':
33+
"""
34+
Associates a physical card with the current user
35+
36+
:param number: Card number
37+
:param exp_month:
38+
:param exp_year:
39+
:param cvv2:
40+
"""
41+
req = CardActivationRequest(
42+
number=number,
43+
exp_month=exp_month,
44+
exp_year=exp_year,
45+
cvv2=cvv2,
46+
)
47+
return cast(
48+
'CardActivation', cls._create(session=session, **req.dict())
49+
)
50+
51+
@property
52+
def card(self) -> Optional[Card]:
53+
result = None
54+
if self.card_uri:
55+
result = cast(Card, retrieve_uri(self.card_uri))
56+
return result

cuenca/resources/cards.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
from typing import ClassVar, Optional, cast
22

3-
from cuenca_validations.types import CardStatus, CardType
3+
from cuenca_validations.types import (
4+
CardFundingType,
5+
CardIssuer,
6+
CardStatus,
7+
CardType,
8+
)
49
from cuenca_validations.types.queries import CardQuery
510
from cuenca_validations.types.requests import CardRequest, CardUpdateRequest
611
from pydantic.dataclasses import dataclass
@@ -15,38 +20,49 @@ class Card(Retrievable, Queryable, Creatable, Updateable):
1520
_resource: ClassVar = 'cards'
1621
_query_params: ClassVar = CardQuery
1722

18-
user_id: str
23+
user_id: Optional[str]
1924
number: str
2025
exp_month: int
2126
exp_year: int
2227
cvv2: str
28+
pin: Optional[str]
2329
type: CardType
2430
status: CardStatus
31+
issuer: CardIssuer
32+
funding_type: CardFundingType
33+
34+
@property
35+
def last_4_digits(self):
36+
return self.number[-4:]
2537

2638
@classmethod
2739
def create(
2840
cls,
29-
ledger_account_id: str,
30-
user_id: str,
41+
issuer: CardIssuer,
42+
funding_type: CardFundingType,
43+
user_id: str = 'me',
3144
*,
3245
session: Session = global_session,
3346
) -> 'Card':
3447
"""
35-
Assigns user_id and ledger_account_id to a existing card
48+
Assigns user_id and ledger_account_id to a existing virtual card
3649
37-
:param ledger_account_id: associated ledger account id
3850
:param user_id: associated user id
51+
:param funding_type: debit or credit
52+
:param issuer:
3953
:return: New assigned card
4054
"""
41-
req = CardRequest(ledger_account_id=ledger_account_id, user_id=user_id)
55+
req = CardRequest(
56+
user_id=user_id,
57+
issuer=issuer,
58+
funding_type=funding_type,
59+
)
4260
return cast('Card', cls._create(session=session, **req.dict()))
4361

4462
@classmethod
4563
def update(
4664
cls,
4765
card_id: str,
48-
user_id: Optional[str] = None,
49-
ledger_account_id: Optional[str] = None,
5066
status: Optional[CardStatus] = None,
5167
*,
5268
session: Session = global_session,
@@ -56,14 +72,10 @@ def update(
5672
reconfigure properties like status, and manufacturer.
5773
5874
:param card_id: existing card_id
59-
:param user_id: owner user id
60-
:param ledger_account_id: owner ledger account
6175
:param status:
6276
:return: Updated card object
6377
"""
64-
req = CardUpdateRequest(
65-
user_id=user_id, ledger_account_id=ledger_account_id, status=status
66-
)
78+
req = CardUpdateRequest(status=status)
6779
resp = cls._update(card_id, session=session, **req.dict())
6880
return cast('Card', resp)
6981

cuenca/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
__version__ = '0.7.0'
1+
__version__ = '0.7.1'
22
CLIENT_VERSION = __version__
33
API_VERSION = '2020-03-19'

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
requests==2.25.1
2-
cuenca-validations==0.8.2
2+
cuenca-validations==0.9.0
33
dataclasses>=0.7;python_version<"3.7"

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
python_requires='>=3.6',
2525
install_requires=[
2626
'requests>=2.24,<2.26',
27-
'cuenca-validations>=0.8.0,<0.9.0',
27+
'cuenca-validations>=0.9.0,<0.10.0',
2828
'dataclasses>=0.7;python_version<"3.7"',
2929
],
3030
classifiers=[

0 commit comments

Comments
 (0)