Skip to content

Commit 0184ecb

Browse files
author
gabino
committed
update syntax for Pydantic v2 compatibility
1 parent de5515d commit 0184ecb

33 files changed

+275
-266
lines changed

cuenca/resources/api_keys.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import ClassVar, Optional
33

44
from cuenca_validations.types import ApiKeyQuery, ApiKeyUpdateRequest
5+
from pydantic import ConfigDict
56

67
from ..http import Session, session as global_session
78
from .base import Creatable, Queryable, Retrievable, Updateable
@@ -12,11 +13,10 @@ class ApiKey(Creatable, Queryable, Retrievable, Updateable):
1213
_query_params: ClassVar = ApiKeyQuery
1314

1415
secret: str
15-
deactivated_at: Optional[dt.datetime]
16-
user_id: Optional[str]
17-
18-
class Config:
19-
schema_extra = {
16+
deactivated_at: Optional[dt.datetime] = None
17+
user_id: Optional[str] = None
18+
model_config = ConfigDict(
19+
json_schema_extra={
2020
'example': {
2121
'id': 'AKNEUInh69SuKXXmK95sROwQ',
2222
'updated_at': '2021-08-24T14:15:22Z',
@@ -26,6 +26,7 @@ class Config:
2626
'user_id': 'USWqY5cvkISJOxHyEKjAKf8w',
2727
}
2828
}
29+
)
2930

3031
@property
3132
def active(self) -> bool:
@@ -74,4 +75,4 @@ def update(
7475
req = ApiKeyUpdateRequest(
7576
metadata=metadata, user_id=user_id, platform_id=platform_id
7677
)
77-
return cls._update(api_key_id, **req.dict(), session=session)
78+
return cls._update(api_key_id, **req.model_dump(), session=session)

cuenca/resources/arpc.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import ClassVar, Optional
33

44
from cuenca_validations.types.requests import ARPCRequest
5+
from pydantic_extra_types.payment import PaymentCardNumber
56

67
from ..http import Session, session as global_session
78
from .base import Creatable
@@ -23,13 +24,13 @@ class Arpc(Creatable):
2324

2425
created_at: dt.datetime
2526
card_uri: str
26-
is_valid_arqc: Optional[bool]
27-
arpc: Optional[str]
27+
is_valid_arqc: Optional[bool] = None
28+
arpc: Optional[str] = None
2829

2930
@classmethod
3031
def create(
3132
cls,
32-
number: str,
33+
number: PaymentCardNumber,
3334
arqc: str,
3435
arpc_method: str,
3536
transaction_data: str,
@@ -52,4 +53,4 @@ def create(
5253
unique_number=unique_number,
5354
track_data_method=track_data_method,
5455
)
55-
return cls._create(session=session, **req.dict())
56+
return cls._create(session=session, **req.model_dump())

cuenca/resources/base.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
TransactionQuery,
1313
TransactionStatus,
1414
)
15-
from pydantic import BaseModel, Extra
15+
from pydantic import BaseModel, ConfigDict
1616

1717
from ..exc import MultipleResultsFound, NoResultFound
1818
from ..http import Session, session as global_session
@@ -25,11 +25,12 @@ class Resource(BaseModel):
2525

2626
id: str
2727

28-
class Config:
29-
extra = Extra.ignore
28+
model_config = ConfigDict(
29+
extra="ignore",
30+
)
3031

3132
def to_dict(self):
32-
return SantizedDict(self.dict())
33+
return SantizedDict(self.model_dump())
3334

3435

3536
class Retrievable(Resource):
@@ -78,7 +79,7 @@ def _update(
7879

7980

8081
class Deactivable(Resource):
81-
deactivated_at: Optional[dt.datetime]
82+
deactivated_at: Optional[dt.datetime] = None
8283

8384
@classmethod
8485
def deactivate(
@@ -157,7 +158,7 @@ def one(
157158
**query_params: Any,
158159
) -> R_co:
159160
q = cast(Queryable, cls)._query_params(limit=2, **query_params)
160-
resp = session.get(cls._resource, q.dict())
161+
resp = session.get(cls._resource, q.model_dump())
161162
items = resp['items']
162163
len_items = len(items)
163164
if not len_items:
@@ -174,7 +175,7 @@ def first(
174175
**query_params: Any,
175176
) -> Optional[R_co]:
176177
q = cast(Queryable, cls)._query_params(limit=1, **query_params)
177-
resp = session.get(cls._resource, q.dict())
178+
resp = session.get(cls._resource, q.model_dump())
178179
try:
179180
item = resp['items'][0]
180181
except IndexError:
@@ -191,7 +192,7 @@ def count(
191192
**query_params: Any,
192193
) -> int:
193194
q = cast(Queryable, cls)._query_params(count=True, **query_params)
194-
resp = session.get(cls._resource, q.dict())
195+
resp = session.get(cls._resource, q.model_dump())
195196
return resp['count']
196197

197198
@classmethod
@@ -203,7 +204,7 @@ def all(
203204
) -> Generator[R_co, None, None]:
204205
session = session or global_session
205206
q = cast(Queryable, cls)._query_params(**query_params)
206-
next_page_uri = f'{cls._resource}?{urlencode(q.dict())}'
207+
next_page_uri = f'{cls._resource}?{urlencode(q.model_dump())}'
207208
while next_page_uri:
208209
page = session.get(next_page_uri)
209210
yield from (cls(**item) for item in page['items'])

cuenca/resources/card_activations.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import ClassVar, Optional, cast
33

44
from cuenca_validations.types.requests import CardActivationRequest
5+
from pydantic_extra_types.payment import PaymentCardNumber
56

67
from ..http import Session, session as global_session
78
from .base import Creatable
@@ -15,13 +16,13 @@ class CardActivation(Creatable):
1516
created_at: dt.datetime
1617
user_id: str
1718
ip_address: str
18-
card_uri: Optional[str]
19+
card_uri: Optional[str] = None
1920
success: bool
2021

2122
@classmethod
2223
def create(
2324
cls,
24-
number: str,
25+
number: PaymentCardNumber,
2526
exp_month: int,
2627
exp_year: int,
2728
cvv2: str,
@@ -42,7 +43,7 @@ def create(
4243
exp_year=exp_year,
4344
cvv2=cvv2,
4445
)
45-
return cls._create(session=session, **req.dict())
46+
return cls._create(session=session, **req.model_dump())
4647

4748
@property
4849
def card(self) -> Optional[Card]:

cuenca/resources/card_transactions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class CardTransaction(Transaction):
2424
card_last4: str
2525
card_type: CardType
2626
metadata: dict
27-
error_type: Optional[CardErrorType]
27+
error_type: Optional[CardErrorType] = None
2828

2929
@property # type: ignore
3030
def related_card_transactions(self) -> Optional[List['CardTransaction']]:

cuenca/resources/card_validations.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from cuenca_validations.types import CardStatus, CardType
55
from cuenca_validations.types.requests import CardValidationRequest
6+
from pydantic_extra_types.payment import PaymentCardNumber
67

78
from ..http import Session, session as global_session
89
from .base import Creatable
@@ -18,19 +19,19 @@ class CardValidation(Creatable):
1819
user_id: str
1920
card_status: CardStatus
2021
card_type: CardType
21-
is_valid_cvv: Optional[bool]
22-
is_valid_cvv2: Optional[bool]
23-
is_valid_icvv: Optional[bool]
24-
is_valid_pin_block: Optional[bool]
25-
is_valid_exp_date: Optional[bool]
22+
is_valid_cvv: Optional[bool] = None
23+
is_valid_cvv2: Optional[bool] = None
24+
is_valid_icvv: Optional[bool] = None
25+
is_valid_pin_block: Optional[bool] = None
26+
is_valid_exp_date: Optional[bool] = None
2627
is_pin_attempts_exceeded: bool
2728
is_expired: bool
2829
platform_id: Optional[str] = None
2930

3031
@classmethod
3132
def create(
3233
cls,
33-
number: str,
34+
number: PaymentCardNumber,
3435
cvv: Optional[str] = None,
3536
cvv2: Optional[str] = None,
3637
icvv: Optional[str] = None,
@@ -51,7 +52,7 @@ def create(
5152
pin_block=pin_block,
5253
pin_attempts_exceeded=pin_attempts_exceeded,
5354
)
54-
return cls._create(session=session, **req.dict())
55+
return cls._create(session=session, **req.model_dump())
5556

5657
@property
5758
def card(self) -> Card:

cuenca/resources/cards.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
)
1010
from cuenca_validations.types.queries import CardQuery
1111
from cuenca_validations.types.requests import CardRequest, CardUpdateRequest
12+
from pydantic_extra_types.payment import PaymentCardNumber
1213

1314
from cuenca.resources.base import Creatable, Queryable, Retrievable, Updateable
1415

@@ -21,12 +22,12 @@ class Card(Retrievable, Queryable, Creatable, Updateable):
2122
_resource: ClassVar = 'cards'
2223
_query_params: ClassVar = CardQuery
2324

24-
user_id: Optional[str]
25-
number: str
25+
user_id: Optional[str] = None
26+
number: PaymentCardNumber
2627
exp_month: int
2728
exp_year: int
2829
cvv2: str
29-
pin: Optional[str]
30+
pin: Optional[str] = None
3031
type: CardType
3132
status: CardStatus
3233
issuer: CardIssuer
@@ -81,7 +82,7 @@ def create(
8182
card_holder_user_id=card_holder_user_id,
8283
is_dynamic_cvv=is_dynamic_cvv,
8384
)
84-
return cls._create(session=session, **req.dict())
85+
return cls._create(session=session, **req.model_dump())
8586

8687
@classmethod
8788
def update(
@@ -106,7 +107,7 @@ def update(
106107
req = CardUpdateRequest(
107108
status=status, pin_block=pin_block, is_dynamic_cvv=is_dynamic_cvv
108109
)
109-
return cls._update(card_id, session=session, **req.dict())
110+
return cls._update(card_id, session=session, **req.model_dump())
110111

111112
@classmethod
112113
def deactivate(

cuenca/resources/curp_validations.py

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
State,
99
)
1010
from cuenca_validations.types.identities import CurpField
11+
from pydantic import ConfigDict, Field
1112

1213
from ..http import Session, session as global_session
1314
from .base import Creatable, Retrievable
@@ -17,44 +18,42 @@ class CurpValidation(Creatable, Retrievable):
1718
_resource: ClassVar = 'curp_validations'
1819

1920
created_at: dt.datetime
20-
names: Optional[str] = None
21-
first_surname: Optional[str] = None
22-
second_surname: Optional[str] = None
23-
date_of_birth: Optional[dt.date] = None
24-
country_of_birth: Optional[Country] = None
25-
state_of_birth: Optional[State] = None
26-
gender: Optional[Gender] = None
27-
nationality: Optional[Country] = None
28-
manual_curp: Optional[CurpField] = None
29-
calculated_curp: CurpField
30-
validated_curp: Optional[CurpField] = None
31-
renapo_curp_match: bool
32-
renapo_full_match: bool
33-
34-
class Config:
35-
fields = {
36-
'names': {'description': 'Official name from Renapo'},
37-
'first_surname': {'description': 'Official surname from Renapo'},
38-
'second_surname': {'description': 'Official surname from Renapo'},
39-
'country_of_birth': {'description': 'In format ISO 3166 Alpha-2'},
40-
'state_of_birth': {'description': 'In format ISO 3166 Alpha-2'},
41-
'nationality': {'description': 'In format ISO 3166 Alpha-2'},
42-
'manual_curp': {'description': 'curp provided in request'},
43-
'calculated_curp': {
44-
'description': 'Calculated CURP based on request data'
45-
},
46-
'validated_curp': {
47-
'description': 'CURP validated in Renapo, null if not exists'
48-
},
49-
'renapo_curp_match': {
50-
'description': 'True if CURP exists and is valid'
51-
},
52-
'renapo_full_match': {
53-
'description': 'True if all fields provided match the response'
54-
' from RENAPO. Accents in names are ignored'
55-
},
56-
}
57-
schema_extra = {
21+
names: Optional[str] = Field(None, description='Official name from Renapo')
22+
first_surname: Optional[str] = Field(
23+
None, description='Official surname from Renapo'
24+
)
25+
second_surname: Optional[str] = Field(
26+
None, description='Official surname from Renapo'
27+
)
28+
date_of_birth: Optional[dt.date] = Field(
29+
None, description='In format ISO 3166 Alpha-2'
30+
)
31+
country_of_birth: Optional[Country] = Field(
32+
None, description='In format ISO 3166 Alpha-2'
33+
)
34+
state_of_birth: Optional[State] = Field(None, description='State of birth')
35+
gender: Optional[Gender] = Field(None, description='Gender')
36+
nationality: Optional[Country] = Field(
37+
None, description='In format ISO 3166 Alpha-2'
38+
)
39+
manual_curp: Optional[CurpField] = Field(
40+
None, description='curp provided in request'
41+
)
42+
calculated_curp: CurpField = Field(
43+
description='Calculated CURP based on request data'
44+
)
45+
validated_curp: Optional[CurpField] = Field(
46+
None, description='CURP validated in Renapo, null if not exists'
47+
)
48+
renapo_curp_match: bool = Field(
49+
description='True if CURP exists and is valid'
50+
)
51+
renapo_full_match: bool = Field(
52+
description='True if all fields provided match the response from '
53+
'RENAPO. Accents in names are ignored',
54+
)
55+
model_config = ConfigDict(
56+
json_schema_extra={
5857
'example': {
5958
'id': 'CVNEUInh69SuKXXmK95sROwQ',
6059
'created_at': '2019-08-24T14:15:22Z',
@@ -72,7 +71,8 @@ class Config:
7271
'renapo_curp_match': True,
7372
'renapo_full_match': True,
7473
}
75-
}
74+
},
75+
)
7676

7777
@classmethod
7878
def create(
@@ -98,4 +98,4 @@ def create(
9898
gender=gender,
9999
manual_curp=manual_curp,
100100
)
101-
return cls._create(session=session, **req.dict())
101+
return cls._create(session=session, **req.model_dump())

cuenca/resources/deposits.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Deposit(Transaction):
1313

1414
network: DepositNetwork
1515
source_uri: str
16-
tracking_key: Optional[str] # clave rastreo if network is SPEI
16+
tracking_key: Optional[str] = None # clave rastreo if network is SPEI
1717

1818
@property # type: ignore
1919
def source(self) -> Account:

0 commit comments

Comments
 (0)