cuenca 2.0.0.dev3__py3-none-any.whl → 2.0.0.dev5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. cuenca/exc.py +5 -4
  2. cuenca/resources/__init__.py +2 -0
  3. cuenca/resources/api_keys.py +3 -3
  4. cuenca/resources/base.py +6 -6
  5. cuenca/resources/card_activations.py +2 -1
  6. cuenca/resources/card_transactions.py +4 -6
  7. cuenca/resources/cards.py +2 -2
  8. cuenca/resources/endpoints.py +10 -7
  9. cuenca/resources/file_batches.py +5 -5
  10. cuenca/resources/files.py +1 -1
  11. cuenca/resources/jwt.py +12 -0
  12. cuenca/resources/kyc_validations.py +4 -4
  13. cuenca/resources/kyc_verifications.py +3 -1
  14. cuenca/resources/limited_wallets.py +1 -1
  15. cuenca/resources/login_tokens.py +7 -1
  16. cuenca/resources/otps.py +2 -2
  17. cuenca/resources/resources.py +11 -6
  18. cuenca/resources/savings.py +4 -2
  19. cuenca/resources/service_providers.py +2 -2
  20. cuenca/resources/sessions.py +15 -10
  21. cuenca/resources/transfers.py +4 -4
  22. cuenca/resources/user_credentials.py +2 -2
  23. cuenca/resources/user_logins.py +3 -1
  24. cuenca/resources/users.py +3 -3
  25. cuenca/resources/wallet_transactions.py +1 -1
  26. cuenca/resources/webhooks.py +2 -2
  27. cuenca/version.py +1 -1
  28. {cuenca-2.0.0.dev3.dist-info → cuenca-2.0.0.dev5.dist-info}/METADATA +12 -3
  29. {cuenca-2.0.0.dev3.dist-info → cuenca-2.0.0.dev5.dist-info}/RECORD +40 -39
  30. {cuenca-2.0.0.dev3.dist-info → cuenca-2.0.0.dev5.dist-info}/WHEEL +1 -1
  31. tests/conftest.py +3 -4
  32. tests/resources/test_api_keys.py +1 -1
  33. tests/resources/test_card_activations.py +4 -4
  34. tests/resources/test_commissions.py +2 -2
  35. tests/resources/test_endpoints.py +1 -1
  36. tests/resources/test_login_tokens.py +1 -1
  37. tests/resources/test_otps.py +1 -1
  38. tests/resources/test_sessions.py +6 -6
  39. {cuenca-2.0.0.dev3.dist-info → cuenca-2.0.0.dev5.dist-info}/LICENSE +0 -0
  40. {cuenca-2.0.0.dev3.dist-info → cuenca-2.0.0.dev5.dist-info}/top_level.txt +0 -0
cuenca/exc.py CHANGED
@@ -1,3 +1,5 @@
1
+ from dataclasses import dataclass
2
+
1
3
  from cuenca_validations.typing import DictStrAny
2
4
 
3
5
 
@@ -17,11 +19,10 @@ class MultipleResultsFound(CuencaException):
17
19
  """One result was expected but multiple were returned"""
18
20
 
19
21
 
22
+ @dataclass
20
23
  class CuencaResponseException(CuencaException):
21
- def __init__(self, json: DictStrAny, status_code: int) -> None:
22
- self.json = json
23
- self.status_code = status_code
24
- super().__init__()
24
+ json: DictStrAny
25
+ status_code: int
25
26
 
26
27
  def __str__(self) -> str:
27
28
  return repr(self)
@@ -38,6 +38,7 @@ __all__ = [
38
38
  'WalletTransaction',
39
39
  'Webhook',
40
40
  'WhatsappTransfer',
41
+ 'Jwt',
41
42
  ]
42
43
 
43
44
  from .accounts import Account
@@ -59,6 +60,7 @@ from .file_batches import FileBatch
59
60
  from .files import File
60
61
  from .identities import Identity
61
62
  from .identity_events import IdentityEvent
63
+ from .jwt import Jwt
62
64
  from .kyc_validations import KYCValidation
63
65
  from .kyc_verifications import KYCVerification
64
66
  from .limited_wallets import LimitedWallet
@@ -2,7 +2,7 @@ import datetime as dt
2
2
  from typing import ClassVar, Optional, cast
3
3
 
4
4
  from cuenca_validations.types import ApiKeyQuery, ApiKeyUpdateRequest
5
- from pydantic import ConfigDict
5
+ from pydantic import ConfigDict, SecretStr
6
6
 
7
7
  from ..http import Session, session as global_session
8
8
  from .base import Creatable, Queryable, Retrievable, Updateable
@@ -12,7 +12,7 @@ class ApiKey(Creatable, Queryable, Retrievable, Updateable):
12
12
  _resource: ClassVar = 'api_keys'
13
13
  _query_params: ClassVar = ApiKeyQuery
14
14
 
15
- secret: str
15
+ secret: SecretStr
16
16
  deactivated_at: Optional[dt.datetime] = None
17
17
  user_id: Optional[str] = None
18
18
  model_config = ConfigDict(
@@ -75,5 +75,5 @@ class ApiKey(Creatable, Queryable, Retrievable, Updateable):
75
75
  req = ApiKeyUpdateRequest(
76
76
  metadata=metadata, user_id=user_id, platform_id=platform_id
77
77
  )
78
- resp = cls._update(api_key_id, **req.dict(), session=session)
78
+ resp = cls._update(api_key_id, **req.model_dump(), session=session)
79
79
  return cast('ApiKey', resp)
cuenca/resources/base.py CHANGED
@@ -2,7 +2,7 @@ import base64
2
2
  import datetime as dt
3
3
  import json
4
4
  from io import BytesIO
5
- from typing import Any, ClassVar, Dict, Generator, Optional
5
+ from typing import Any, ClassVar, Generator, Optional
6
6
  from urllib.parse import urlencode
7
7
 
8
8
  from cuenca_validations.types import (
@@ -24,7 +24,7 @@ class Resource(BaseModel):
24
24
  id: str
25
25
 
26
26
  @classmethod
27
- def _from_dict(cls, obj_dict: Dict[str, Any]) -> 'Resource':
27
+ def _from_dict(cls, obj_dict: dict[str, Any]) -> 'Resource':
28
28
  cls._filter_excess_fields(obj_dict)
29
29
  return cls(**obj_dict)
30
30
 
@@ -151,7 +151,7 @@ class Queryable(Resource):
151
151
  cls, *, session: Session = global_session, **query_params
152
152
  ) -> Resource:
153
153
  q = cls._query_params(limit=2, **query_params)
154
- resp = session.get(cls._resource, q.dict())
154
+ resp = session.get(cls._resource, q.model_dump())
155
155
  items = resp['items']
156
156
  len_items = len(items)
157
157
  if not len_items:
@@ -165,7 +165,7 @@ class Queryable(Resource):
165
165
  cls, *, session: Session = global_session, **query_params
166
166
  ) -> Optional[Resource]:
167
167
  q = cls._query_params(limit=1, **query_params)
168
- resp = session.get(cls._resource, q.dict())
168
+ resp = session.get(cls._resource, q.model_dump())
169
169
  try:
170
170
  item = resp['items'][0]
171
171
  except IndexError:
@@ -179,7 +179,7 @@ class Queryable(Resource):
179
179
  cls, *, session: Session = global_session, **query_params
180
180
  ) -> int:
181
181
  q = cls._query_params(count=True, **query_params)
182
- resp = session.get(cls._resource, q.dict())
182
+ resp = session.get(cls._resource, q.model_dump())
183
183
  return resp['count']
184
184
 
185
185
  @classmethod
@@ -188,7 +188,7 @@ class Queryable(Resource):
188
188
  ) -> Generator[Resource, None, None]:
189
189
  session = session or global_session
190
190
  q = cls._query_params(**query_params)
191
- next_page_uri = f'{cls._resource}?{urlencode(q.dict())}'
191
+ next_page_uri = f'{cls._resource}?{urlencode(q.model_dump())}'
192
192
  while next_page_uri:
193
193
  page = session.get(next_page_uri)
194
194
  yield from (cls._from_dict(item) for item in page['items'])
@@ -2,6 +2,7 @@ import datetime as dt
2
2
  from typing import ClassVar, Optional, cast
3
3
 
4
4
  from cuenca_validations.types.requests import CardActivationRequest
5
+ from pydantic_extra_types.payment import PaymentCardNumber
5
6
 
6
7
  from ..http import Session, session as global_session
7
8
  from .base import Creatable
@@ -21,7 +22,7 @@ class CardActivation(Creatable):
21
22
  @classmethod
22
23
  def create(
23
24
  cls,
24
- number: str,
25
+ number: PaymentCardNumber,
25
26
  exp_month: int,
26
27
  exp_year: int,
27
28
  cvv2: str,
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, List, Optional, cast
1
+ from typing import ClassVar, Optional, cast
2
2
 
3
3
  from cuenca_validations.types import (
4
4
  CardErrorType,
@@ -14,15 +14,13 @@ from .resources import retrieve_uri, retrieve_uris
14
14
 
15
15
 
16
16
  class CardTransaction(Transaction):
17
- def __init__(self, *args, **kwargs):
18
- super(CardTransaction, self).__init__(*args, **kwargs)
19
17
 
20
18
  _resource: ClassVar = 'card_transactions'
21
19
  _query_params: ClassVar = CardTransactionQuery
22
20
 
23
21
  type: CardTransactionType
24
22
  network: CardNetwork
25
- related_card_transaction_uris: List[str]
23
+ related_card_transaction_uris: list[str]
26
24
  card_uri: str
27
25
  card_last4: str
28
26
  card_type: CardType
@@ -30,11 +28,11 @@ class CardTransaction(Transaction):
30
28
  error_type: Optional[CardErrorType] = None
31
29
 
32
30
  @property # type: ignore
33
- def related_card_transactions(self) -> Optional[List['CardTransaction']]:
31
+ def related_card_transactions(self) -> Optional[list['CardTransaction']]:
34
32
  if not self.related_card_transaction_uris:
35
33
  return []
36
34
  return cast(
37
- List['CardTransaction'],
35
+ list['CardTransaction'],
38
36
  retrieve_uris(self.related_card_transaction_uris),
39
37
  )
40
38
 
cuenca/resources/cards.py CHANGED
@@ -81,7 +81,7 @@ class Card(Retrievable, Queryable, Creatable, Updateable):
81
81
  card_holder_user_id=card_holder_user_id,
82
82
  is_dynamic_cvv=is_dynamic_cvv,
83
83
  )
84
- return cast('Card', cls._create(session=session, **req.dict()))
84
+ return cast('Card', cls._create(session=session, **req.model_dump()))
85
85
 
86
86
  @classmethod
87
87
  def update(
@@ -106,7 +106,7 @@ class Card(Retrievable, Queryable, Creatable, Updateable):
106
106
  req = CardUpdateRequest(
107
107
  status=status, pin_block=pin_block, is_dynamic_cvv=is_dynamic_cvv
108
108
  )
109
- resp = cls._update(card_id, session=session, **req.dict())
109
+ resp = cls._update(card_id, session=session, **req.model_dump())
110
110
  return cast('Card', resp)
111
111
 
112
112
  @classmethod
@@ -1,5 +1,6 @@
1
- from typing import ClassVar, List, Optional, cast
1
+ from typing import ClassVar, Optional, cast
2
2
 
3
+ from cuenca_validations.types import HttpUrlString
3
4
  from cuenca_validations.types.enums import WebhookEvent
4
5
  from cuenca_validations.types.requests import (
5
6
  EndpointRequest,
@@ -14,7 +15,7 @@ from .base import Creatable, Deactivable, Queryable, Retrievable, Updateable
14
15
  class Endpoint(Creatable, Deactivable, Retrievable, Queryable, Updateable):
15
16
  _resource: ClassVar = 'endpoints'
16
17
 
17
- url: HttpUrl = Field(..., description='HTTPS url to send webhooks')
18
+ url: HttpUrlString = Field(..., description='HTTPS url to send webhooks')
18
19
  secret: str = Field(
19
20
  ...,
20
21
  description='token to verify the webhook is sent by Cuenca '
@@ -25,7 +26,7 @@ class Endpoint(Creatable, Deactivable, Retrievable, Queryable, Updateable):
25
26
  description='Allows user to turn-off the endpoint without the '
26
27
  'need of deleting it',
27
28
  )
28
- events: List[WebhookEvent] = Field(
29
+ events: list[WebhookEvent] = Field(
29
30
  ...,
30
31
  description='list of enabled events. If None, all events will '
31
32
  'be enabled for this Endpoint',
@@ -55,7 +56,7 @@ class Endpoint(Creatable, Deactivable, Retrievable, Queryable, Updateable):
55
56
  def create(
56
57
  cls,
57
58
  url: HttpUrl,
58
- events: Optional[List[WebhookEvent]] = None,
59
+ events: Optional[list[WebhookEvent]] = None,
59
60
  *,
60
61
  session: Session = global_session,
61
62
  ) -> 'Endpoint':
@@ -69,14 +70,16 @@ class Endpoint(Creatable, Deactivable, Retrievable, Queryable, Updateable):
69
70
  :return: New active endpoint
70
71
  """
71
72
  req = EndpointRequest(url=url, events=events)
72
- return cast('Endpoint', cls._create(session=session, **req.dict()))
73
+ return cast(
74
+ 'Endpoint', cls._create(session=session, **req.model_dump())
75
+ )
73
76
 
74
77
  @classmethod
75
78
  def update(
76
79
  cls,
77
80
  endpoint_id: str,
78
81
  url: Optional[HttpUrl] = None,
79
- events: Optional[List[WebhookEvent]] = None,
82
+ events: Optional[list[WebhookEvent]] = None,
80
83
  is_enable: Optional[bool] = None,
81
84
  *,
82
85
  session: Session = global_session,
@@ -93,5 +96,5 @@ class Endpoint(Creatable, Deactivable, Retrievable, Queryable, Updateable):
93
96
  req = EndpointUpdateRequest(
94
97
  url=url, is_enable=is_enable, events=events
95
98
  )
96
- resp = cls._update(endpoint_id, session=session, **req.dict())
99
+ resp = cls._update(endpoint_id, session=session, **req.model_dump())
97
100
  return cast('Endpoint', resp)
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, Dict, List, cast
1
+ from typing import ClassVar, cast
2
2
 
3
3
  from cuenca_validations.types import (
4
4
  BatchFileMetadata,
@@ -13,20 +13,20 @@ from .base import Creatable, Queryable
13
13
  class FileBatch(Creatable, Queryable):
14
14
  _resource: ClassVar = 'file_batches'
15
15
 
16
- received_files: List[BatchFileMetadata]
17
- uploaded_files: List[BatchFileMetadata]
16
+ received_files: list[BatchFileMetadata]
17
+ uploaded_files: list[BatchFileMetadata]
18
18
  user_id: str
19
19
 
20
20
  @classmethod
21
21
  def create(
22
22
  cls,
23
- files: List[Dict],
23
+ files: list[dict],
24
24
  user_id: str,
25
25
  *,
26
26
  session: Session = global_session,
27
27
  ) -> 'FileBatch':
28
28
  req = FileBatchUploadRequest(
29
- files=cast(List[FileRequest], files), user_id=user_id
29
+ files=cast(list[FileRequest], files), user_id=user_id
30
30
  )
31
31
  return cast(
32
32
  'FileBatch', cls._create(session=session, **req.model_dump())
cuenca/resources/files.py CHANGED
@@ -53,7 +53,7 @@ class File(Downloadable, Queryable, Uploadable):
53
53
  'File',
54
54
  cls._upload(
55
55
  session=session,
56
- **req.dict(),
56
+ **req.model_dump(),
57
57
  ),
58
58
  )
59
59
 
@@ -0,0 +1,12 @@
1
+ from typing import ClassVar
2
+
3
+ from pydantic import SecretStr
4
+
5
+ from .base import Creatable
6
+
7
+
8
+ class Jwt(Creatable):
9
+ _resource: ClassVar = 'jwt'
10
+
11
+ token: SecretStr
12
+ api_key: str
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, List, Optional, cast
1
+ from typing import ClassVar, Optional, cast
2
2
 
3
3
  from cuenca_validations.types import KYCFile, KYCValidationRequest
4
4
  from pydantic import ConfigDict
@@ -12,7 +12,7 @@ class KYCValidation(Creatable, Retrievable, Queryable):
12
12
  platform_id: str
13
13
  attemps: Optional[int] = None
14
14
  verification_id: Optional[str] = None
15
- files_uri: Optional[List[str]] = None
15
+ files_uri: Optional[list[str]] = None
16
16
  model_config = ConfigDict(
17
17
  json_schema_extra={
18
18
  'example': {
@@ -31,7 +31,7 @@ class KYCValidation(Creatable, Retrievable, Queryable):
31
31
  cls,
32
32
  user_id: str,
33
33
  force: bool = False,
34
- documents: List[KYCFile] = [],
34
+ documents: list[KYCFile] = [],
35
35
  session: Session = global_session,
36
36
  ) -> 'KYCValidation':
37
37
  req = KYCValidationRequest(
@@ -40,5 +40,5 @@ class KYCValidation(Creatable, Retrievable, Queryable):
40
40
  documents=documents,
41
41
  )
42
42
  return cast(
43
- 'KYCValidation', cls._create(**req.dict(), session=session)
43
+ 'KYCValidation', cls._create(**req.model_dump(), session=session)
44
44
  )
@@ -49,4 +49,6 @@ class KYCVerification(Creatable, Retrievable, Updateable):
49
49
  curp: CurpField,
50
50
  ) -> 'KYCVerification':
51
51
  req = KYCVerificationUpdateRequest(curp=curp)
52
- return cast('KYCVerification', cls._update(id=kyc_id, **req.dict()))
52
+ return cast(
53
+ 'KYCVerification', cls._update(id=kyc_id, **req.model_dump())
54
+ )
@@ -37,4 +37,4 @@ class LimitedWallet(Wallet):
37
37
  allowed_curp=allowed_curp,
38
38
  allowed_rfc=allowed_rfc,
39
39
  )
40
- return cast('LimitedWallet', cls._create(**request.dict()))
40
+ return cast('LimitedWallet', cls._create(**request.model_dump()))
@@ -1,13 +1,19 @@
1
1
  from typing import ClassVar, cast
2
2
 
3
- from pydantic import ConfigDict
3
+ from pydantic import ConfigDict, SecretStr
4
4
 
5
5
  from ..http import Session, session as global_session
6
6
  from .base import Creatable
7
7
 
8
8
 
9
+ # mypy: disable-error-code=override
9
10
  class LoginToken(Creatable):
10
11
  _resource: ClassVar = 'login_tokens'
12
+
13
+ # Override the `id` field to be a `SecretStr`
14
+ # To ensure sensitive data is not exposed in logs.
15
+ id: SecretStr # type: ignore
16
+
11
17
  model_config = ConfigDict(
12
18
  json_schema_extra={'example': {'id': 'LTNEUInh69SuKXXmK95sROwQ'}}
13
19
  )
cuenca/resources/otps.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from typing import ClassVar, cast
2
2
 
3
- from pydantic import ConfigDict
3
+ from pydantic import ConfigDict, SecretStr
4
4
 
5
5
  from ..http import Session, session as global_session
6
6
  from .base import Creatable
@@ -8,7 +8,7 @@ from .base import Creatable
8
8
 
9
9
  class Otp(Creatable):
10
10
  _resource: ClassVar = 'otps'
11
- secret: str
11
+ secret: SecretStr
12
12
  model_config = ConfigDict(
13
13
  json_schema_extra={
14
14
  'example': {
@@ -1,11 +1,10 @@
1
1
  import re
2
- from concurrent.futures import ThreadPoolExecutor
3
- from typing import Dict, List, cast
2
+ from typing import cast
4
3
 
5
4
  from .base import Retrievable
6
5
 
7
6
  ENDPOINT_RE = re.compile(r'.*/(?P<resource>[a-z_]+)/(?P<id>.+)$')
8
- RESOURCES: Dict[str, Retrievable] = {} # set in ./__init__.py after imports
7
+ RESOURCES: dict[str, Retrievable] = {} # set in ./__init__.py after imports
9
8
 
10
9
 
11
10
  def retrieve_uri(uri: str) -> Retrievable:
@@ -16,6 +15,12 @@ def retrieve_uri(uri: str) -> Retrievable:
16
15
  return cast(Retrievable, RESOURCES[resource].retrieve(id_))
17
16
 
18
17
 
19
- def retrieve_uris(uris: List[str]) -> List[Retrievable]:
20
- with ThreadPoolExecutor(max_workers=len(uris)) as executor:
21
- return [obj for obj in executor.map(retrieve_uri, uris)]
18
+ def retrieve_uris(uris: list[str]) -> list[Retrievable]:
19
+ # Changed the implementation to use a simple for loop instead of
20
+ # ThreadPoolExecutor. The list of URIs is small, so the performance
21
+ # difference is negligible. Additionally, using ThreadPoolExecutor
22
+ # caused issues with VCR tests, as the recordings were not retrieved
23
+ # in the correct order, leading to unexpected HTTP calls instead of
24
+ # using the mocked recordings.
25
+
26
+ return [retrieve_uri(uri) for uri in uris]
@@ -34,7 +34,7 @@ class Saving(Wallet, Updateable):
34
34
  goal_amount=goal_amount,
35
35
  goal_date=goal_date,
36
36
  )
37
- return cast('Saving', cls._create(**request.dict()))
37
+ return cast('Saving', cls._create(**request.model_dump()))
38
38
 
39
39
  @classmethod
40
40
  def update(
@@ -51,4 +51,6 @@ class Saving(Wallet, Updateable):
51
51
  goal_amount=goal_amount,
52
52
  goal_date=goal_date,
53
53
  )
54
- return cast('Saving', cls._update(id=saving_id, **request.dict()))
54
+ return cast(
55
+ 'Saving', cls._update(id=saving_id, **request.model_dump())
56
+ )
@@ -1,4 +1,4 @@
1
- from typing import ClassVar, List
1
+ from typing import ClassVar
2
2
 
3
3
  from cuenca_validations.types import ServiceProviderCategory
4
4
 
@@ -10,4 +10,4 @@ class ServiceProvider(Retrievable, Queryable):
10
10
 
11
11
  name: str
12
12
  provider_key: str
13
- categories: List[ServiceProviderCategory]
13
+ categories: list[ServiceProviderCategory]
@@ -1,23 +1,26 @@
1
1
  import datetime as dt
2
2
  from typing import ClassVar, Optional, cast
3
3
 
4
- from cuenca_validations.types import SessionRequest, SessionType
5
- from pydantic import AnyUrl, ConfigDict
4
+ from cuenca_validations.types import AnyUrlString, SessionRequest, SessionType
5
+ from pydantic import ConfigDict, SecretStr
6
6
 
7
7
  from .. import http
8
8
  from .base import Creatable, Queryable, Retrievable
9
9
 
10
10
 
11
+ # mypy: disable-error-code=override
11
12
  class Session(Creatable, Retrievable, Queryable):
12
13
  _resource: ClassVar = 'sessions'
13
14
 
14
- id: str
15
+ # Override the `id` field to be a `SecretStr`
16
+ # To ensure sensitive data is not exposed in logs.
17
+ id: SecretStr = None # type: ignore
15
18
  created_at: dt.datetime
16
19
  user_id: str
17
20
  platform_id: str
18
21
  expires_at: dt.datetime
19
- success_url: Optional[AnyUrl] = None
20
- failure_url: Optional[AnyUrl] = None
22
+ success_url: Optional[AnyUrlString] = None
23
+ failure_url: Optional[AnyUrlString] = None
21
24
  type: Optional[SessionType] = None
22
25
  model_config = ConfigDict(
23
26
  json_schema_extra={
@@ -39,15 +42,17 @@ class Session(Creatable, Retrievable, Queryable):
39
42
  cls,
40
43
  user_id: str,
41
44
  type: SessionType,
42
- success_url=cast(Optional[AnyUrl], success_url),
43
- failure_url=cast(Optional[AnyUrl], failure_url),
45
+ success_url: Optional[str] = None,
46
+ failure_url: Optional[str] = None,
44
47
  *,
45
48
  session: http.Session = http.session,
46
49
  ) -> 'Session':
47
50
  req = SessionRequest(
48
51
  user_id=user_id,
49
52
  type=type,
50
- success_url=success_url,
51
- failure_url=failure_url,
53
+ success_url=success_url, # type: ignore
54
+ failure_url=failure_url, # type: ignore
55
+ )
56
+ return cast(
57
+ 'Session', cls._create(session=session, **req.model_dump())
52
58
  )
53
- return cast('Session', cls._create(session=session, **req.dict()))
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, List, Optional, cast
2
+ from typing import ClassVar, Optional, cast
3
3
 
4
4
  from clabe import Clabe
5
5
  from cuenca_validations.types import (
@@ -70,14 +70,14 @@ class Transfer(Transaction, Creatable):
70
70
  idempotency_key=idempotency_key,
71
71
  user_id=user_id,
72
72
  )
73
- return cast('Transfer', cls._create(**req.dict()))
73
+ return cast('Transfer', cls._create(**req.model_dump()))
74
74
 
75
75
  @classmethod
76
- def create_many(cls, requests: List[TransferRequest]) -> DictStrAny:
76
+ def create_many(cls, requests: list[TransferRequest]) -> DictStrAny:
77
77
  transfers: DictStrAny = dict(submitted=[], errors=[])
78
78
  for req in requests:
79
79
  try:
80
- transfer = cls._create(**req.dict())
80
+ transfer = cls._create(**req.model_dump())
81
81
  except (CuencaException, HTTPError) as e:
82
82
  transfers['errors'].append(dict(request=req, error=e))
83
83
  else:
@@ -26,7 +26,7 @@ class UserCredential(Creatable, Updateable):
26
26
  ) -> 'UserCredential':
27
27
  req = UserCredentialRequest(password=password, user_id=user_id)
28
28
  return cast(
29
- 'UserCredential', cls._create(**req.dict(), session=session)
29
+ 'UserCredential', cls._create(**req.model_dump(), session=session)
30
30
  )
31
31
 
32
32
  @classmethod
@@ -44,5 +44,5 @@ class UserCredential(Creatable, Updateable):
44
44
  )
45
45
  return cast(
46
46
  'UserCredential',
47
- cls._update(id=user_id, **req.dict(), session=session),
47
+ cls._update(id=user_id, **req.model_dump(), session=session),
48
48
  )
@@ -32,7 +32,9 @@ class UserLogin(Creatable):
32
32
  session: Session = global_session,
33
33
  ) -> 'UserLogin':
34
34
  req = UserLoginRequest(password=password, user_id=user_id)
35
- login = cast('UserLogin', cls._create(session=session, **req.dict()))
35
+ login = cast(
36
+ 'UserLogin', cls._create(session=session, **req.model_dump())
37
+ )
36
38
  if login.success:
37
39
  session.headers['X-Cuenca-LoginId'] = login.id
38
40
  return login
cuenca/resources/users.py CHANGED
@@ -1,5 +1,5 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, List, Optional, cast
2
+ from typing import ClassVar, Optional, cast
3
3
 
4
4
  from clabe import Clabe
5
5
  from cuenca_validations.types import (
@@ -52,7 +52,7 @@ class User(Creatable, Retrievable, Updateable, Queryable):
52
52
  proof_of_life: Optional[KYCFile] = Field(
53
53
  None, description='Detail of selfie video validation'
54
54
  )
55
- beneficiaries: Optional[List[Beneficiary]] = Field(
55
+ beneficiaries: Optional[list[Beneficiary]] = Field(
56
56
  None, description='Beneficiaries of account in case of death'
57
57
  )
58
58
  platform_id: Optional[str] = None
@@ -140,7 +140,7 @@ class User(Creatable, Retrievable, Updateable, Queryable):
140
140
  email_address: Optional[str] = None,
141
141
  profession: Optional[str] = None,
142
142
  address: Optional[Address] = None,
143
- beneficiaries: Optional[List[Beneficiary]] = None,
143
+ beneficiaries: Optional[list[Beneficiary]] = None,
144
144
  govt_id: Optional[KYCFile] = None,
145
145
  proof_of_address: Optional[KYCFile] = None,
146
146
  proof_of_life: Optional[KYCFile] = None,
@@ -35,4 +35,4 @@ class WalletTransaction(Transaction, Creatable):
35
35
  transaction_type=transaction_type,
36
36
  amount=amount,
37
37
  )
38
- return cast('WalletTransaction', cls._create(**request.dict()))
38
+ return cast('WalletTransaction', cls._create(**request.model_dump()))
@@ -1,4 +1,4 @@
1
- from typing import Any, ClassVar, Dict
1
+ from typing import Any, ClassVar
2
2
 
3
3
  from cuenca_validations.types.enums import WebhookEvent
4
4
  from pydantic import Field
@@ -9,7 +9,7 @@ from .base import Queryable, Retrievable
9
9
  class Webhook(Retrievable, Queryable):
10
10
  _resource: ClassVar = 'webhooks'
11
11
 
12
- payload: Dict[str, Any] = Field(
12
+ payload: dict[str, Any] = Field(
13
13
  ..., description='object sent by the webhook'
14
14
  )
15
15
  event: WebhookEvent = Field(
cuenca/version.py CHANGED
@@ -1,3 +1,3 @@
1
- __version__ = '2.0.0.dev3'
1
+ __version__ = '2.0.0.dev5'
2
2
  CLIENT_VERSION = __version__
3
3
  API_VERSION = '2020-03-19'
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: cuenca
3
- Version: 2.0.0.dev3
3
+ Version: 2.0.0.dev5
4
4
  Summary: Cuenca API Client
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-python
6
6
  Author: Cuenca
@@ -16,8 +16,17 @@ Requires-Python: >=3.9
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Requires-Dist: requests>=2.32.3
19
- Requires-Dist: cuenca-validations==2.0.0.dev9
19
+ Requires-Dist: cuenca-validations==2.0.0.dev12
20
20
  Requires-Dist: pydantic-extra-types>=2.10.1
21
+ Dynamic: author
22
+ Dynamic: author-email
23
+ Dynamic: classifier
24
+ Dynamic: description
25
+ Dynamic: description-content-type
26
+ Dynamic: home-page
27
+ Dynamic: requires-dist
28
+ Dynamic: requires-python
29
+ Dynamic: summary
21
30
 
22
31
  # Cuenca – Python client library
23
32
 
@@ -1,55 +1,56 @@
1
1
  cuenca/__init__.py,sha256=vFLEaVgT93FvqGtuoGyMFd_mQLABRm6T7zIcTZSMKjc,1807
2
- cuenca/exc.py,sha256=_sghDbHx-9JKAF2d4GClEfqv8MfoWb9oQjK5uzIds_w,672
2
+ cuenca/exc.py,sha256=r_lL03-JS0AsXw71wuNbiwNYLHNDagM56tRxpYyK6Lw,601
3
3
  cuenca/jwt.py,sha256=plB2ttHPZnL0xq3gqubw_Jjtj1QYG2E5bk99N3cn5zg,1502
4
4
  cuenca/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- cuenca/version.py,sha256=PjFfpoPPk9tjx15H2idI4gQX-WXn3a1Z23dlaAKA6Fw,83
5
+ cuenca/version.py,sha256=mh-cSxU78YpK0FjsxY8edyPTQxXn55YO0HFMvDELp7E,83
6
6
  cuenca/http/__init__.py,sha256=V5TG6Ro9d3VY7umzcbtanmvHlGkv-k71H0tqrdMyH-s,49
7
7
  cuenca/http/client.py,sha256=psXJiSgd3SUSJ5jwvhdBWsVMNadenG353BNVXdh7HMY,4168
8
- cuenca/resources/__init__.py,sha256=pySyBur3jnWA5yfHFuVZfdnk6nROj3BsLRy7vVWXFoc,3019
8
+ cuenca/resources/__init__.py,sha256=piQC6qwdZXtr7P9IBO4UYUCV3UImPms7bsMzcVINg_A,3051
9
9
  cuenca/resources/accounts.py,sha256=5yfNxAHpxWFosoR4WrPrDGpBCRkaQk98V-w0wCPPXqU,345
10
- cuenca/resources/api_keys.py,sha256=uLF6xVoXkG2JSYZtDKaqBo8-dmS9XEGnM51E5DkiCyE,2621
10
+ cuenca/resources/api_keys.py,sha256=NMcirjUYz5bwlVrPhnO1m1ctyrZNn_FRwkHjyZO9L1k,2644
11
11
  cuenca/resources/arpc.py,sha256=VymgjCNvsKWcozwQ1an4OHMmuRslBoSdxYqjvw2VAi4,1791
12
12
  cuenca/resources/balance_entries.py,sha256=c2p9nXrKpMJ2xlQkTLP_ttycb1RitA979mP46mbZnEc,1073
13
- cuenca/resources/base.py,sha256=IdX5PpT6FpARE6hkcyca5rviVbvQTwF3T-uppg3cCeI,5785
13
+ cuenca/resources/base.py,sha256=P8papD4TscAf-v6sFnnzTMf-ZJLe7xIakgvqCvmN2Pk,5803
14
14
  cuenca/resources/bill_payments.py,sha256=spZSVCkLoJTOJIvfYim3R1JEUCvCKdRqLmr98M9y8oo,529
15
- cuenca/resources/card_activations.py,sha256=HUknScnIQLi0zqUHIPKppCg65QPFywHAHTiUQuimtb0,1336
16
- cuenca/resources/card_transactions.py,sha256=Fs1x5kq4WSlRj6lt2enUkWW8trN7VgwW_KE2tybj30o,1195
15
+ cuenca/resources/card_activations.py,sha256=rMfs9RPnxQbu79p82houpBLbChKCVKLQRT15C9238P4,1409
16
+ cuenca/resources/card_transactions.py,sha256=iCsAqLU9jnZmV5JM-wMzQlMVJo7HdBat6iQw9g7rFlg,1085
17
17
  cuenca/resources/card_validations.py,sha256=LyVpIkNVkAnfOUBJf7e39qCYu5tblB6F1FdYjCPy1MI,1956
18
- cuenca/resources/cards.py,sha256=HTqfuz8KN_nxkIG9zPkActh4P0U0-Pug_yAo8gnZPWo,3461
18
+ cuenca/resources/cards.py,sha256=nudY78QsNGJKqXgS4QOVFsu_uXxyQMOujgCArIQN3g8,3473
19
19
  cuenca/resources/cash_references.py,sha256=ZVN4ed8pRV3u0BshE3OPJB76FMfLKWHm1rwnk2KvbLc,195
20
20
  cuenca/resources/clabes.py,sha256=S6ExYCAULtzNWyvzK1FP-zcXQq-7D4DMNEVVdAJ9Pic,391
21
21
  cuenca/resources/commissions.py,sha256=Fz5kHq7FPJl8Z0qiu5_z-Ws2jEPqGi1x2OOwXCCM-Yw,513
22
22
  cuenca/resources/curp_validations.py,sha256=gGP0bCRGr7dxlQ-vGVb-dJILKanetfjF8dg-upWS96A,3634
23
23
  cuenca/resources/deposits.py,sha256=8FINQJ3c0Zg8FAq7e1JZu9i8G40fX-Kmawhl7Ouxpx4,566
24
- cuenca/resources/endpoints.py,sha256=rUd3E3yYyt3-dNZxsO725eVoLaqV_zhYgL7VPPI_fXo,3178
25
- cuenca/resources/file_batches.py,sha256=FsX87tdLCu83zSRhLuMBC8XzodHZQKvz-WbKg459aYs,829
26
- cuenca/resources/files.py,sha256=WLrEZcgrlm02mpxyBrhEKcThbubVGYM5kS0CQe3xODk,1942
24
+ cuenca/resources/endpoints.py,sha256=SNlVL_41Mb3O4bkkgRpiTyn5bABdKUx1ydV9dfA9Yjo,3263
25
+ cuenca/resources/file_batches.py,sha256=-lTG1zfLMEZBaL75COlW-yL6zVvK2LMp6KzBuKApY7U,817
26
+ cuenca/resources/files.py,sha256=SLPFVaqbQn3bF2p05FU3yDojyagxCCX6CvqHumeoorI,1948
27
27
  cuenca/resources/identities.py,sha256=wW8jbOQyWipmTwPgJ2ZEQVdOvNv3Y6dcuLHbMyyqjRg,1102
28
28
  cuenca/resources/identity_events.py,sha256=K1G6IEGlw6n482nZhBo_CJNBdpKFCO6duMQr5y9k4x8,374
29
- cuenca/resources/kyc_validations.py,sha256=9lnaabCL8qgwGIH2c_c7LYgzg7ihRw1XTaJHz3cDhew,1372
30
- cuenca/resources/kyc_verifications.py,sha256=B5bnk2g6iNm88QvXS4HP4IYEq5TH4CXfD8KUw-yD7s0,1610
31
- cuenca/resources/limited_wallets.py,sha256=Spc9dYgHDxNQe_t0Z0Vqf4VPJ2tlkL2F3ZPp3kiWZ00,1070
32
- cuenca/resources/login_tokens.py,sha256=aWGoiM80NIvMYdEhHvX0JqFzqhfWXMfQJZFGNbugluk,693
33
- cuenca/resources/otps.py,sha256=buqQp5l6rW23vmUdhmP-ntwYKK-uSR7bw3WVaYUhn4E,636
29
+ cuenca/resources/jwt.py,sha256=AZvU2sWefuQJLUK5yrbaX8L8WaFaz6acppne9zsnLTg,184
30
+ cuenca/resources/kyc_validations.py,sha256=HxafdK3atx8YOXkVaX_mAVwveoaJ5J0iTrIe6TMgpfI,1372
31
+ cuenca/resources/kyc_verifications.py,sha256=vy8kB5hEAlOJeecb8NSlf0eS-v905tJauaAKI2yzDto,1638
32
+ cuenca/resources/limited_wallets.py,sha256=m4uFRY4y_CetCbk1R49Rq2lAx1BvDqakAkFMWTS7AYs,1076
33
+ cuenca/resources/login_tokens.py,sha256=L3kosdQ7jelHJDGm9fAUp7Zf_r6BUTqChSMK8LX67kQ,881
34
+ cuenca/resources/otps.py,sha256=h8tU5P1i5wblI9XjjdRJCbsNDkZMp51DFpBJK_obyZU,653
34
35
  cuenca/resources/platforms.py,sha256=w-pOGZm4gTLf-exoF2kAOVidUy1Fgf_ZT-8WuP3T7Fs,2616
35
36
  cuenca/resources/questionnaires.py,sha256=csrVXIuWMmL140EyG5Xlukgangf7tytXEB3JepeE0LA,1094
36
- cuenca/resources/resources.py,sha256=g6ssYfGTALzP-ZDBTDedJw1GeAnSTiWi78w9Hg_zeAg,706
37
- cuenca/resources/savings.py,sha256=r1UimpZvlDQRxfwNuvNrsr8h5cNGoEmgXLPny5ixYlM,1447
38
- cuenca/resources/service_providers.py,sha256=aOulwTAvCLyzojBlhO7EQaPtlM9YPRYAAUXLjuGZwAk,316
39
- cuenca/resources/sessions.py,sha256=bmiMh2GF8UNj-Ezu4Cq6T1zNxHg0ax3ZNPBF5ukrPjc,1646
37
+ cuenca/resources/resources.py,sha256=nlsqp6a2DrhBCzgi7_flAvrfZScKfClHqEYKbV1FdHg,955
38
+ cuenca/resources/savings.py,sha256=iGREHJ58Ak0O49P9Clw_jCPUbJc3TUW9P8E2JB_Gg3c,1481
39
+ cuenca/resources/service_providers.py,sha256=x-FNcyiUkdUsNCGudyLGYDbRkD2jPj8-T8U3IumxTVQ,310
40
+ cuenca/resources/sessions.py,sha256=RhZOVxvRNR9Hnuu5-ggR6m03-APNcQzCXLybAHNKsb8,1877
40
41
  cuenca/resources/statements.py,sha256=PqMvhoE9cvBneXjaS7w4JnTzYdDakkCkbdNYrd7b8LI,282
41
- cuenca/resources/transfers.py,sha256=nfSte0YzA1vxh6oAH8wUnjGnzc-iSTT66BJv8RA1IOQ,3270
42
- cuenca/resources/user_credentials.py,sha256=Z0ppaWzxArMl7T5_FejaEPKgXhpsHUVc8EC2gMwtEbY,1264
42
+ cuenca/resources/transfers.py,sha256=bl2GWb9mkrCARe8-WIm00pZafcrVqbf3_C0cPlVU89Q,3276
43
+ cuenca/resources/user_credentials.py,sha256=wnAGaB98h5nGdyMFHJYvxAQer6sleO2YPyYC--dE9V8,1276
43
44
  cuenca/resources/user_events.py,sha256=CGhTTtWL9YvI2y77jk2KZaJ8cUQREhGrNG1fyAVrAPk,727
44
45
  cuenca/resources/user_lists_validation.py,sha256=Flvyyono3TZibrlPHqa_43d1HHH2U_i_jOW-a8pf1W0,1397
45
- cuenca/resources/user_logins.py,sha256=kwEtls5QYRf3GNTPgYQFkrZ-xjeFX9DgkiLW1VmIu0g,1429
46
- cuenca/resources/users.py,sha256=wEYibaC56KpvUB8RJsMzv8tXiyEXPkzNr-7EATE4kWY,6418
46
+ cuenca/resources/user_logins.py,sha256=lbcAIVO26X26B4RSvjrUrO5KGPwGmx9B8oBj5zKZFq4,1457
47
+ cuenca/resources/users.py,sha256=LJvRD7dLE2S1ZBqV_ti6nW4MSDCNfuio9UbmI4sYE6k,6412
47
48
  cuenca/resources/verifications.py,sha256=OJ8g1Q0tpdc8IFPyMSCnQAEaoSSRuGCFdATss-w0wrM,1793
48
- cuenca/resources/wallet_transactions.py,sha256=hzGg1NZjxv6PiFN-GF2Z2eai07TQHtkoomMgHt5D1tw,1028
49
- cuenca/resources/webhooks.py,sha256=mYld4rIWMjG2ezmjLxT1rky4eG1dtjm21LcmBmJnBwQ,436
49
+ cuenca/resources/wallet_transactions.py,sha256=BGlCWXjF3DmP8VWVDVpYfaJ1FJ3YNbXDd9tVyw7wuhw,1034
50
+ cuenca/resources/webhooks.py,sha256=7IBFi8Gw4tlTCTDKOBX6R-3WCmaZ--sGAHUGkj0fBhA,430
50
51
  cuenca/resources/whatsapp_transfers.py,sha256=YSL606FBOMGKjhyKK5TiF0di96zdDKoiVtjiz_Zl_ZI,902
51
52
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- tests/conftest.py,sha256=CASYYH0rKWkLLdO9SQS4A0H62oNRKqH29KgvUl62Gmg,1793
53
+ tests/conftest.py,sha256=xrQtFNkqWG4KG35HorTD5N3-QUL98CAXqmLxu93haKI,1769
53
54
  tests/test_cuenca.py,sha256=aeha_utz9YiHQg6eJK2PB7g66pVUYFi9U6pYMGXDKvk,1628
54
55
  tests/test_jwt.py,sha256=dY5m4LigM-inqePyYOmdIHoOBmGx0WcfxlKnJEdsF70,1205
55
56
  tests/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -57,20 +58,20 @@ tests/http/conftest.py,sha256=TnVfv_s0eXC55HSJQotxIqV2Rl2WbgNt5Ow6z-ZOjZE,177
57
58
  tests/http/test_client.py,sha256=y0dhBDG4ZKbIvN_TENFGT920mzxwI535imQ99UuqgC0,2594
58
59
  tests/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
60
  tests/resources/test_accounts.py,sha256=q7dD3k9Qj4qnl9v3aXmYSw6ShkLKD2W9FViFU_6VFeY,313
60
- tests/resources/test_api_keys.py,sha256=Cui7nmJAqFL6yScuObj5Fpjt_ecGnpb29JIdPhbdqIs,2281
61
+ tests/resources/test_api_keys.py,sha256=eUwX6ixffFd_WAaevQk1Sr0r2lCHs-NkLKaoY2OsxrE,2300
61
62
  tests/resources/test_arpc.py,sha256=4lRd8fO5vf8rvoh1V8Rw9qjw__fdZCeIh4IEYlU0k5o,489
62
63
  tests/resources/test_balance_entries.py,sha256=myoHpr3XSef_smUijS60EXW7YHcmr6m9b6B_BVW-JtY,643
63
64
  tests/resources/test_bill_payments.py,sha256=TnvrTPtCPOvKPGC5G1zI0fng3HXyTdKegCOvoYDHc9s,340
64
- tests/resources/test_card_activations.py,sha256=MbIIx42DYYOeCUuUBbnpijZMOQvcvDtp_snkgd0B46w,1036
65
+ tests/resources/test_card_activations.py,sha256=_gUgKBo-I8qwUlu-Pme1t7_cLBL6wnPHKOFVBGco51U,1072
65
66
  tests/resources/test_card_transactions.py,sha256=ZngQkCJyn3KNk7raA91N9n58WiPRQ6HNnNwWW7h4WyQ,1161
66
67
  tests/resources/test_card_validations.py,sha256=xc6II9fUnISFbchAq-4gjxzM6giMZ4hEIPBuKqpc2hs,838
67
68
  tests/resources/test_cards.py,sha256=yoQmT7rf8J6CykQ4HPLabiSQOIfWcYFBXjmTQVbmymk,3298
68
69
  tests/resources/test_cash_references.py,sha256=mp5BXY5SWH0eJDMGDubLt4yVCBoiq9hU5LLHgMFPrwc,391
69
70
  tests/resources/test_clabes.py,sha256=iUO09_qdQA5B6DU7235qniC8TEdhWAMYXjkTFwRhSNI,458
70
- tests/resources/test_commissions.py,sha256=_dnSJhojBwPdK4K344IFiBulJyyhtKaVVKKx02R3OUs,1027
71
+ tests/resources/test_commissions.py,sha256=cdRP9LHPUlX-OB_AMDrYux9G_2xYKIUfKqirGVxeygM,1035
71
72
  tests/resources/test_curp_validations.py,sha256=5GvPrgQGfzD8JCtCdQDz4023Q2caonLbirn7_gZMXow,530
72
73
  tests/resources/test_deposits.py,sha256=LQxg3PYQsyl2f8naPUAKvXnAanZszFlGFsa4WDRvouc,262
73
- tests/resources/test_endpoints.py,sha256=0rIGeHTiM55HtHVOBG82x5w3Xqj4N7TxFQ2DS70C_KA,1497
74
+ tests/resources/test_endpoints.py,sha256=JMX7wBSMw9gZmldxIbZMATQLZtwO1d0wIiBBc3YB9ZQ,1492
74
75
  tests/resources/test_file_batches.py,sha256=xcVeWZns4j3_RPZEv8W1Ws4-bcaxOXTQzFyUpKGVmxM,981
75
76
  tests/resources/test_files.py,sha256=2VSlvYnGHrw--mYNvA6hlpEw-olbW_Hlq2d4vdn8v7M,961
76
77
  tests/resources/test_identities.py,sha256=0osumiLrzKkGG4XLlL4nIdSp_nGutHaPf55w_IVREps,454
@@ -78,14 +79,14 @@ tests/resources/test_identity_events.py,sha256=BZlM2RXKtCORdTDQCemY3NAR3KWb3mPNq
78
79
  tests/resources/test_kyc_validations.py,sha256=TEyS6encW-InRpcAR4nDCfmkqqnn8yMC9AaS3iWm8Xw,420
79
80
  tests/resources/test_kyc_verifications.py,sha256=Y-ZU61o18I_3NFqMN2w4WGZTzwsIhULAtESqIXiizUY,634
80
81
  tests/resources/test_limited_wallets.py,sha256=c0zDDOip3lJk8chbcGr_nWCdkO9yuL_HbD1IikR5jH4,527
81
- tests/resources/test_login_tokens.py,sha256=kn0gXFOanIXjgKjbeOzfNyKsGAUkc2iKnuVmzIRaMD8,572
82
- tests/resources/test_otps.py,sha256=kr-NCK8V8EwI8iku06hEDW1y0BVSW-Q3FRfnn9u1-Jo,612
82
+ tests/resources/test_login_tokens.py,sha256=zXX3UkiyeL_K_BN3FaxuD5BUUOdNRbXUMJ-cCDpKQK4,591
83
+ tests/resources/test_otps.py,sha256=2Yw6i-wfrnLmTn1O69sVVrpWNEfBAeKbPIVmupIqgxE,635
83
84
  tests/resources/test_platforms.py,sha256=5b6-XC3uAz8GARFkFoanH62jxE1uJIMXcdpeUhmI8Kg,211
84
85
  tests/resources/test_questionnaires.py,sha256=Sl8YHXgL42xiijUncycOUzGu5MtI3jEnhADS8Nol6N8,321
85
86
  tests/resources/test_resources.py,sha256=rTcfjZOxujOJXjfqvOV6TPpYl8lae4bgbZj4jTAWm_o,170
86
87
  tests/resources/test_savings.py,sha256=2qlGo9Qy_bqwYfMmjf9OsPIPVWRb6zlkzaMgg5RWElk,1127
87
88
  tests/resources/test_service_providers.py,sha256=yhjTvRdVaTpwEHLVtvX8OD6bMef2W9wUI8MRwLY-i64,563
88
- tests/resources/test_sessions.py,sha256=Ve7tfjPVrUIZvja4UPiC7f-aKKFF870MhsYt8544fzM,1412
89
+ tests/resources/test_sessions.py,sha256=2VXc7p1bWQqmVNASxaB4L51x8ALKP44vnVuKUyomIUo,1410
89
90
  tests/resources/test_statements.py,sha256=e9S_yn5kD6M8IpfpRmIOJ0Y6aggBkYWQxynY6P7Q7nI,370
90
91
  tests/resources/test_transfers.py,sha256=bW3igYOdYPDiZtLr8WVIYwfP-dV4sdJ9pbaXFps2ac8,4161
91
92
  tests/resources/test_user_credentials.py,sha256=WbK20aprlT3P_IEOwplvhIYnLfTgGhK3Q3Tu6Tf129c,809
@@ -97,8 +98,8 @@ tests/resources/test_verifications.py,sha256=yyL-bdryQU3MvqnmAgnnzGG9t7UTxWwPiVu
97
98
  tests/resources/test_wallet_transactions.py,sha256=_L2hjPHT4FwwhxksUoaoVHwFFYOGWfF4ScCbk0kb7Hw,3945
98
99
  tests/resources/test_webhooks.py,sha256=nYCqAnlNJcMJKRHhgoHOWTQnFLWQHHvFyY8GVCxGTD8,328
99
100
  tests/resources/test_whatsapp_transfers.py,sha256=4Dmrsbytx7LRrLQo9M8TAL7cGKJufPStkp51UdRCnYU,1030
100
- cuenca-2.0.0.dev3.dist-info/LICENSE,sha256=aWv5PmUiAcNENEAdghcVQSeU56pXJHWexJYgklK9XLg,1063
101
- cuenca-2.0.0.dev3.dist-info/METADATA,sha256=4ZODycRpMFrrrWaCGM8rKzUmihnE1VCFzGfVMnDz5LI,4774
102
- cuenca-2.0.0.dev3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
103
- cuenca-2.0.0.dev3.dist-info/top_level.txt,sha256=5h3K7XJTmJniDloPq4sIJHni_xLw-Uoc6ZJ5mcw_lZY,13
104
- cuenca-2.0.0.dev3.dist-info/RECORD,,
101
+ cuenca-2.0.0.dev5.dist-info/LICENSE,sha256=aWv5PmUiAcNENEAdghcVQSeU56pXJHWexJYgklK9XLg,1063
102
+ cuenca-2.0.0.dev5.dist-info/METADATA,sha256=un9zwD7_d_VAS1fgcRXECfgu_TT_DItSj6p8jMiO3Lo,4972
103
+ cuenca-2.0.0.dev5.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
104
+ cuenca-2.0.0.dev5.dist-info/top_level.txt,sha256=5h3K7XJTmJniDloPq4sIJHni_xLw-Uoc6ZJ5mcw_lZY,13
105
+ cuenca-2.0.0.dev5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
tests/conftest.py CHANGED
@@ -1,6 +1,5 @@
1
1
  import datetime as dt
2
2
  from io import BytesIO
3
- from typing import Dict
4
3
 
5
4
  import pytest
6
5
  from cuenca_validations.types import Country, Gender, State
@@ -31,7 +30,7 @@ def transfer():
31
30
 
32
31
 
33
32
  @pytest.fixture
34
- def curp_validation_request() -> Dict:
33
+ def curp_validation_request() -> dict:
35
34
  curp_validation = dict(
36
35
  names='José',
37
36
  first_surname='López',
@@ -45,7 +44,7 @@ def curp_validation_request() -> Dict:
45
44
 
46
45
 
47
46
  @pytest.fixture
48
- def user_request() -> Dict:
47
+ def user_request() -> dict:
49
48
  user_dict = dict(
50
49
  curp='LOHJ660606HDFPRS02',
51
50
  phone_number='+525511223344',
@@ -64,7 +63,7 @@ def user_request() -> Dict:
64
63
 
65
64
 
66
65
  @pytest.fixture
67
- def user_lists_request() -> Dict:
66
+ def user_lists_request() -> dict:
68
67
  user_dict = dict(
69
68
  curp='LOHJ660606HDFPRS02',
70
69
  names='Alejandro',
@@ -18,7 +18,7 @@ def test_api_keys_retrieve():
18
18
  id_key = 'AKMPSxy2UeSKqU1J6spDNwqA'
19
19
  api_key: ApiKey = ApiKey.retrieve(id_key)
20
20
  assert api_key.id == id_key
21
- assert api_key.secret == '********'
21
+ assert api_key.secret.get_secret_value() == '********'
22
22
 
23
23
 
24
24
  @pytest.mark.vcr
@@ -8,17 +8,17 @@ from cuenca.resources import CardActivation
8
8
  @pytest.mark.vcr
9
9
  def test_card_activation():
10
10
  values = dict(
11
- number='4122943400023502',
11
+ number='5448750001621241',
12
12
  exp_month=11,
13
13
  exp_year=24,
14
- cvv2='123',
14
+ cvv2='111',
15
15
  )
16
16
  card_activation = CardActivation.create(**values)
17
17
  assert card_activation.success
18
- assert card_activation.user_id == 'US1237'
18
+ assert card_activation.user_id == 'US1w9BJ0DZ9kSdac39ur14Nf'
19
19
  card = card_activation.card
20
20
  assert all(getattr(card, key) == value for key, value in values.items())
21
- assert card.user_id == 'US1237'
21
+ assert card.user_id == 'US1w9BJ0DZ9kSdac39ur14Nf'
22
22
  assert card.status is CardStatus.active
23
23
 
24
24
 
@@ -17,7 +17,7 @@ def test_commission_retrieve_with_cash_deposit():
17
17
  assert commission.id == id_commission
18
18
  related_transaction = commission.related_transaction
19
19
  assert related_transaction
20
- assert type(related_transaction) == Deposit
20
+ assert isinstance(related_transaction, Deposit)
21
21
  assert related_transaction.network == 'cash'
22
22
 
23
23
 
@@ -28,5 +28,5 @@ def test_commission_retrieve_with_cash_transfer():
28
28
  assert commission.id == id_commission
29
29
  related_transaction = commission.related_transaction
30
30
  assert related_transaction
31
- assert type(related_transaction) == Transfer
31
+ assert isinstance(related_transaction, Transfer)
32
32
  assert related_transaction.network == 'spei'
@@ -43,7 +43,7 @@ def test_endpoint_update():
43
43
  )
44
44
  assert endpoint.id == id_endpoint
45
45
  assert len(endpoint.events) == 2
46
- assert str(endpoint.url) == 'https://url.io/'
46
+ assert endpoint.url == 'https://url.io/'
47
47
  assert not endpoint.is_enable
48
48
  assert endpoint.is_active
49
49
 
@@ -20,5 +20,5 @@ def test_login_token(session):
20
20
  UserLogin.create('222222', session=session)
21
21
  login_token = LoginToken.create(session=session)
22
22
  session.headers.pop('X-Cuenca-LoginId')
23
- session.configure(login_token=login_token.id)
23
+ session.configure(login_token=login_token.id.get_secret_value())
24
24
  Transfer.count(session=session)
@@ -25,4 +25,4 @@ def test_otps(session):
25
25
  session.configure(login_token=login_token.id)
26
26
  otp = Otp.create()
27
27
  assert otp
28
- assert type(otp.secret) == str
28
+ assert isinstance(otp.secret.get_secret_value(), str)
@@ -1,5 +1,3 @@
1
- from typing import Dict
2
-
3
1
  import pytest
4
2
  from cuenca_validations.types import SessionType
5
3
  from pydantic import ValidationError
@@ -9,7 +7,7 @@ from cuenca.resources import CurpValidation, Session, User
9
7
 
10
8
 
11
9
  @pytest.mark.vcr
12
- def test_session_create(curp_validation_request: Dict, user_request: Dict):
10
+ def test_session_create(curp_validation_request: dict, user_request: dict):
13
11
  curp_valdation = CurpValidation.create(**curp_validation_request)
14
12
  user_request['curp'] = curp_valdation.validated_curp
15
13
  user = User.create(**user_request)
@@ -34,10 +32,12 @@ def test_session_create(curp_validation_request: Dict, user_request: Dict):
34
32
 
35
33
  assert user_session.user_id == user.id
36
34
  assert user_session.type == SessionType.registration
37
- assert str(user_session.success_url) == success_url
38
- assert str(user_session.failure_url) == failure_url
35
+ assert user_session.success_url == success_url
36
+ assert user_session.failure_url == failure_url
39
37
 
40
38
  ephimeral_cuenca_session = cuenca.http.Session()
41
- ephimeral_cuenca_session.configure(session_token=user_session.id)
39
+ ephimeral_cuenca_session.configure(
40
+ session_token=user_session.id.get_secret_value()
41
+ )
42
42
  user = User.update(user.id, email_address='manu@example.com')
43
43
  assert user.email_address == 'manu@example.com'