cuenca 2.0.0.dev7__tar.gz → 2.0.2.dev1__tar.gz

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 (111) hide show
  1. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/PKG-INFO +2 -2
  2. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/__init__.py +2 -0
  3. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/__init__.py +3 -0
  4. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/api_keys.py +3 -3
  5. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/endpoints.py +5 -4
  6. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/files.py +2 -2
  7. cuenca-2.0.2.dev1/cuenca/resources/jwt_tokens.py +44 -0
  8. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/login_tokens.py +4 -1
  9. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/otps.py +3 -2
  10. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/sessions.py +7 -6
  11. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/user_credentials.py +7 -2
  12. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/users.py +3 -2
  13. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/version.py +1 -1
  14. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca.egg-info/PKG-INFO +2 -2
  15. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca.egg-info/SOURCES.txt +2 -0
  16. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca.egg-info/requires.txt +1 -1
  17. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/setup.py +1 -1
  18. cuenca-2.0.2.dev1/tests/resources/test_jwt_tokens.py +28 -0
  19. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_user_credentials.py +3 -3
  20. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/LICENSE +0 -0
  21. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/README.md +0 -0
  22. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/exc.py +0 -0
  23. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/http/__init__.py +0 -0
  24. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/http/client.py +0 -0
  25. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/jwt.py +0 -0
  26. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/py.typed +0 -0
  27. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/accounts.py +0 -0
  28. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/arpc.py +0 -0
  29. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/balance_entries.py +0 -0
  30. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/base.py +0 -0
  31. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/bill_payments.py +0 -0
  32. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/card_activations.py +0 -0
  33. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/card_transactions.py +0 -0
  34. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/card_validations.py +0 -0
  35. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/cards.py +0 -0
  36. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/cash_references.py +0 -0
  37. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/clabes.py +0 -0
  38. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/commissions.py +0 -0
  39. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/curp_validations.py +0 -0
  40. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/deposits.py +0 -0
  41. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/file_batches.py +0 -0
  42. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/identities.py +0 -0
  43. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/identity_events.py +0 -0
  44. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/kyc_validations.py +0 -0
  45. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/kyc_verifications.py +0 -0
  46. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/limited_wallets.py +0 -0
  47. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/platforms.py +0 -0
  48. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/questionnaires.py +0 -0
  49. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/resources.py +0 -0
  50. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/savings.py +0 -0
  51. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/service_providers.py +0 -0
  52. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/statements.py +0 -0
  53. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/transfers.py +0 -0
  54. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/user_events.py +0 -0
  55. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/user_lists_validation.py +0 -0
  56. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/user_logins.py +0 -0
  57. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/verifications.py +0 -0
  58. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/wallet_transactions.py +0 -0
  59. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/webhooks.py +0 -0
  60. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca/resources/whatsapp_transfers.py +0 -0
  61. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca.egg-info/dependency_links.txt +0 -0
  62. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/cuenca.egg-info/top_level.txt +0 -0
  63. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/setup.cfg +0 -0
  64. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/__init__.py +0 -0
  65. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/conftest.py +0 -0
  66. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/http/__init__.py +0 -0
  67. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/http/conftest.py +0 -0
  68. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/http/test_client.py +0 -0
  69. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/__init__.py +0 -0
  70. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_accounts.py +0 -0
  71. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_api_keys.py +0 -0
  72. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_arpc.py +0 -0
  73. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_balance_entries.py +0 -0
  74. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_bill_payments.py +0 -0
  75. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_card_activations.py +0 -0
  76. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_card_transactions.py +0 -0
  77. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_card_validations.py +0 -0
  78. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_cards.py +0 -0
  79. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_cash_references.py +0 -0
  80. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_clabes.py +0 -0
  81. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_commissions.py +0 -0
  82. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_curp_validations.py +0 -0
  83. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_deposits.py +0 -0
  84. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_endpoints.py +0 -0
  85. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_file_batches.py +0 -0
  86. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_files.py +0 -0
  87. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_identities.py +0 -0
  88. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_identity_events.py +0 -0
  89. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_kyc_validations.py +0 -0
  90. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_kyc_verifications.py +0 -0
  91. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_limited_wallets.py +0 -0
  92. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_login_tokens.py +0 -0
  93. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_otps.py +0 -0
  94. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_platforms.py +0 -0
  95. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_questionnaires.py +0 -0
  96. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_resources.py +0 -0
  97. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_savings.py +0 -0
  98. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_service_providers.py +0 -0
  99. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_sessions.py +0 -0
  100. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_statements.py +0 -0
  101. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_transfers.py +0 -0
  102. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_user_events.py +0 -0
  103. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_user_lists_validation.py +0 -0
  104. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_user_logins.py +0 -0
  105. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_users.py +0 -0
  106. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_verifications.py +0 -0
  107. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_wallet_transactions.py +0 -0
  108. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_webhooks.py +0 -0
  109. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/resources/test_whatsapp_transfers.py +0 -0
  110. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/test_cuenca.py +0 -0
  111. {cuenca-2.0.0.dev7 → cuenca-2.0.2.dev1}/tests/test_jwt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cuenca
3
- Version: 2.0.0.dev7
3
+ Version: 2.0.2.dev1
4
4
  Summary: Cuenca API Client
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-python
6
6
  Author: Cuenca
@@ -16,7 +16,7 @@ Requires-Python: >=3.9
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Requires-Dist: requests>=2.32.0
19
- Requires-Dist: cuenca-validations>=2.0.0
19
+ Requires-Dist: cuenca-validations>=2.0.4
20
20
  Requires-Dist: pydantic-extra-types>=2.10.0
21
21
  Dynamic: author
22
22
  Dynamic: author-email
@@ -42,6 +42,7 @@ __all__ = [
42
42
  'WhatsappTransfer',
43
43
  'configure',
44
44
  'get_balance',
45
+ 'JwtToken',
45
46
  ]
46
47
 
47
48
  from . import http
@@ -65,6 +66,7 @@ from .resources import (
65
66
  FileBatch,
66
67
  Identity,
67
68
  IdentityEvent,
69
+ JwtToken,
68
70
  KYCValidation,
69
71
  KYCVerification,
70
72
  LimitedWallet,
@@ -38,6 +38,7 @@ __all__ = [
38
38
  'WalletTransaction',
39
39
  'Webhook',
40
40
  'WhatsappTransfer',
41
+ 'JwtToken',
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_tokens import JwtToken
62
64
  from .kyc_validations import KYCValidation
63
65
  from .kyc_verifications import KYCVerification
64
66
  from .limited_wallets import LimitedWallet
@@ -123,6 +125,7 @@ resource_classes = [
123
125
  WhatsappTransfer,
124
126
  Webhook,
125
127
  Platform,
128
+ JwtToken,
126
129
  ]
127
130
  for resource_cls in resource_classes:
128
131
  RESOURCES[resource_cls._resource] = resource_cls # type: ignore
@@ -1,7 +1,7 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional
2
+ from typing import Annotated, ClassVar, Optional
3
3
 
4
- from cuenca_validations.types import ApiKeyQuery, ApiKeyUpdateRequest
4
+ from cuenca_validations.types import ApiKeyQuery, ApiKeyUpdateRequest, Metadata
5
5
  from pydantic import ConfigDict
6
6
 
7
7
  from ..http import Session, session as global_session
@@ -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: Annotated[str, Metadata(sensitive=True, log_chars=4)]
16
16
  deactivated_at: Optional[dt.datetime] = None
17
17
  user_id: Optional[str] = None
18
18
  model_config = ConfigDict(
@@ -1,11 +1,12 @@
1
1
  from typing import ClassVar, Optional
2
2
 
3
3
  from cuenca_validations.types.enums import WebhookEvent
4
+ from cuenca_validations.types.general import SerializableHttpUrl
4
5
  from cuenca_validations.types.requests import (
5
6
  EndpointRequest,
6
7
  EndpointUpdateRequest,
7
8
  )
8
- from pydantic import ConfigDict, Field, HttpUrl
9
+ from pydantic import ConfigDict, Field
9
10
 
10
11
  from ..http import Session, session as global_session
11
12
  from .base import Creatable, Deactivable, Queryable, Retrievable, Updateable
@@ -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: SerializableHttpUrl = Field(description='HTTPS url to send webhooks')
18
19
  secret: str = Field(
19
20
  description='token to verify the webhook is sent by Cuenca '
20
21
  'using HMAC algorithm',
@@ -51,7 +52,7 @@ class Endpoint(Creatable, Deactivable, Retrievable, Queryable, Updateable):
51
52
  @classmethod
52
53
  def create(
53
54
  cls,
54
- url: HttpUrl,
55
+ url: SerializableHttpUrl,
55
56
  events: Optional[list[WebhookEvent]] = None,
56
57
  *,
57
58
  session: Session = global_session,
@@ -72,7 +73,7 @@ class Endpoint(Creatable, Deactivable, Retrievable, Queryable, Updateable):
72
73
  def update(
73
74
  cls,
74
75
  endpoint_id: str,
75
- url: Optional[HttpUrl] = None,
76
+ url: Optional[SerializableHttpUrl] = None,
76
77
  events: Optional[list[WebhookEvent]] = None,
77
78
  is_enable: Optional[bool] = None,
78
79
  *,
@@ -2,7 +2,7 @@ from io import BytesIO
2
2
  from typing import ClassVar, Optional
3
3
 
4
4
  from cuenca_validations.types import FileQuery, FileUploadRequest, KYCFileType
5
- from pydantic import HttpUrl
5
+ from cuenca_validations.types.general import SerializableHttpUrl
6
6
 
7
7
  from ..http import Session, session as global_session
8
8
  from .base import Downloadable, Queryable, Uploadable
@@ -14,7 +14,7 @@ class File(Downloadable, Queryable, Uploadable):
14
14
 
15
15
  extension: str
16
16
  type: KYCFileType
17
- url: HttpUrl
17
+ url: SerializableHttpUrl
18
18
  user_id: str
19
19
 
20
20
  @classmethod
@@ -0,0 +1,44 @@
1
+ import datetime as dt
2
+ from typing import Annotated, ClassVar
3
+
4
+ from cuenca_validations.types import Metadata
5
+ from pydantic import ConfigDict
6
+
7
+ from ..http import Session, session as global_session
8
+ from .base import Creatable
9
+
10
+
11
+ class JwtToken(Creatable):
12
+ _resource: ClassVar = 'token'
13
+
14
+ id: Annotated[str, Metadata(sensitive=True, log_chars=4)]
15
+ token: Annotated[str, Metadata(sensitive=True, log_chars=4)]
16
+ created_at: dt.datetime
17
+ api_key_uri: str
18
+
19
+ model_config = ConfigDict(
20
+ json_schema_extra={
21
+ 'example': {
22
+ 'id': (
23
+ 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzgzNjI'
24
+ '4NzcsImlhdCI6MTczNzc1ODA3Nywic3ViIjoiQUtzY3p5N3RzaVJkMkl'
25
+ 'iakxfbllGb2xRIiwidWlkIjoiNjRiZmQ0OTItZGFhMy0xMWVmLWEyMWU'
26
+ 'tMGE1OGE5ZmVhYzAyIn0.Er8kDsw4rtGkwAXpEgUhwyXFiBjYlwDVTGF'
27
+ 'tYW7o0go'
28
+ ),
29
+ 'token': (
30
+ 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzgzNjI'
31
+ '4NzcsImlhdCI6MTczNzc1ODA3Nywic3ViIjoiQUtzY3p5N3RzaVJkMkl'
32
+ 'iakxfbllGb2xRIiwidWlkIjoiNjRiZmQ0OTItZGFhMy0xMWVmLWEyMWU'
33
+ 'tMGE1OGE5ZmVhYzAyIn0.Er8kDsw4rtGkwAXpEgUhwyXFiBjYlwDVTGF'
34
+ 'tYW7o0go'
35
+ ),
36
+ 'created_at': '2025-01-24T22:34:37.659667',
37
+ 'api_key_uri': '/api_key/AKsczy7tsiRd2IbjL_nYFolQ',
38
+ }
39
+ }
40
+ )
41
+
42
+ @classmethod
43
+ def create(cls, session: Session = global_session) -> 'JwtToken':
44
+ return cls._create(session=session)
@@ -1,5 +1,6 @@
1
- from typing import ClassVar
1
+ from typing import Annotated, ClassVar
2
2
 
3
+ from cuenca_validations.types import Metadata
3
4
  from pydantic import ConfigDict
4
5
 
5
6
  from ..http import Session, session as global_session
@@ -9,6 +10,8 @@ from .base import Creatable
9
10
  class LoginToken(Creatable):
10
11
  _resource: ClassVar = 'login_tokens'
11
12
 
13
+ id: Annotated[str, Metadata(sensitive=True, log_chars=4)]
14
+
12
15
  model_config = ConfigDict(
13
16
  json_schema_extra={'example': {'id': 'LTNEUInh69SuKXXmK95sROwQ'}}
14
17
  )
@@ -1,5 +1,6 @@
1
- from typing import ClassVar
1
+ from typing import Annotated, ClassVar
2
2
 
3
+ from cuenca_validations.types import Metadata
3
4
  from pydantic import ConfigDict
4
5
 
5
6
  from ..http import Session, session as global_session
@@ -8,7 +9,7 @@ from .base import Creatable
8
9
 
9
10
  class Otp(Creatable):
10
11
  _resource: ClassVar = 'otps'
11
- secret: str
12
+ secret: Annotated[str, Metadata(sensitive=True, log_chars=4)]
12
13
 
13
14
  model_config = ConfigDict(
14
15
  json_schema_extra={
@@ -1,8 +1,9 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional
2
+ from typing import Annotated, ClassVar, Optional
3
3
 
4
- from cuenca_validations.types import SessionRequest, SessionType
5
- from pydantic import AnyUrl, ConfigDict
4
+ from cuenca_validations.types import Metadata, SessionRequest, SessionType
5
+ from cuenca_validations.types.general import SerializableAnyUrl
6
+ from pydantic import ConfigDict
6
7
 
7
8
  from .. import http
8
9
  from .base import Creatable, Queryable, Retrievable
@@ -11,13 +12,13 @@ from .base import Creatable, Queryable, Retrievable
11
12
  class Session(Creatable, Retrievable, Queryable):
12
13
  _resource: ClassVar = 'sessions'
13
14
 
14
- id: str
15
+ id: Annotated[str, Metadata(sensitive=True, log_chars=4)]
15
16
  created_at: dt.datetime
16
17
  user_id: str
17
18
  platform_id: str
18
19
  expires_at: dt.datetime
19
- success_url: Optional[AnyUrl] = None
20
- failure_url: Optional[AnyUrl] = None
20
+ success_url: Optional[SerializableAnyUrl] = None
21
+ failure_url: Optional[SerializableAnyUrl] = None
21
22
  type: Optional[SessionType] = None
22
23
 
23
24
  model_config = ConfigDict(
@@ -25,7 +25,9 @@ class UserCredential(Creatable, Updateable):
25
25
  session: Session = global_session,
26
26
  ) -> 'UserCredential':
27
27
  req = UserCredentialRequest(password=password, user_id=user_id)
28
- return cls._create(**req.model_dump(), session=session)
28
+ data = req.model_dump()
29
+ data['password'] = data['password'].get_secret_value()
30
+ return cls._create(**data, session=session)
29
31
 
30
32
  @classmethod
31
33
  def update(
@@ -40,4 +42,7 @@ class UserCredential(Creatable, Updateable):
40
42
  is_active=is_active,
41
43
  password=password,
42
44
  )
43
- return cls._update(id=user_id, **req.model_dump(), session=session)
45
+ data = req.model_dump()
46
+ if password:
47
+ data['password'] = data['password'].get_secret_value()
48
+ return cls._update(id=user_id, **data, session=session)
@@ -15,8 +15,9 @@ from cuenca_validations.types import (
15
15
  UserUpdateRequest,
16
16
  )
17
17
  from cuenca_validations.types.enums import Country, Gender, State
18
+ from cuenca_validations.types.general import SerializableHttpUrl
18
19
  from cuenca_validations.types.identities import Curp
19
- from pydantic import ConfigDict, EmailStr, Field, HttpUrl
20
+ from pydantic import ConfigDict, EmailStr, Field
20
21
 
21
22
  from ..http import Session, session as global_session
22
23
  from .balance_entries import BalanceEntry
@@ -147,7 +148,7 @@ class User(Creatable, Retrievable, Updateable, Queryable):
147
148
  status: Optional[UserStatus] = None,
148
149
  email_verification_id: Optional[str] = None,
149
150
  phone_verification_id: Optional[str] = None,
150
- curp_document: Optional[HttpUrl] = None,
151
+ curp_document: Optional[SerializableHttpUrl] = None,
151
152
  *,
152
153
  session: Session = global_session,
153
154
  ) -> 'User':
@@ -1,3 +1,3 @@
1
- __version__ = '2.0.0.dev7'
1
+ __version__ = '2.0.2.dev1'
2
2
  CLIENT_VERSION = __version__
3
3
  API_VERSION = '2020-03-19'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cuenca
3
- Version: 2.0.0.dev7
3
+ Version: 2.0.2.dev1
4
4
  Summary: Cuenca API Client
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-python
6
6
  Author: Cuenca
@@ -16,7 +16,7 @@ Requires-Python: >=3.9
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Requires-Dist: requests>=2.32.0
19
- Requires-Dist: cuenca-validations>=2.0.0
19
+ Requires-Dist: cuenca-validations>=2.0.4
20
20
  Requires-Dist: pydantic-extra-types>=2.10.0
21
21
  Dynamic: author
22
22
  Dynamic: author-email
@@ -35,6 +35,7 @@ cuenca/resources/file_batches.py
35
35
  cuenca/resources/files.py
36
36
  cuenca/resources/identities.py
37
37
  cuenca/resources/identity_events.py
38
+ cuenca/resources/jwt_tokens.py
38
39
  cuenca/resources/kyc_validations.py
39
40
  cuenca/resources/kyc_verifications.py
40
41
  cuenca/resources/limited_wallets.py
@@ -84,6 +85,7 @@ tests/resources/test_file_batches.py
84
85
  tests/resources/test_files.py
85
86
  tests/resources/test_identities.py
86
87
  tests/resources/test_identity_events.py
88
+ tests/resources/test_jwt_tokens.py
87
89
  tests/resources/test_kyc_validations.py
88
90
  tests/resources/test_kyc_verifications.py
89
91
  tests/resources/test_limited_wallets.py
@@ -1,3 +1,3 @@
1
1
  requests>=2.32.0
2
- cuenca-validations>=2.0.0
2
+ cuenca-validations>=2.0.4
3
3
  pydantic-extra-types>=2.10.0
@@ -24,7 +24,7 @@ setup(
24
24
  python_requires='>=3.9',
25
25
  install_requires=[
26
26
  'requests>=2.32.0',
27
- 'cuenca-validations>=2.0.0',
27
+ 'cuenca-validations>=2.0.4',
28
28
  'pydantic-extra-types>=2.10.0',
29
29
  ],
30
30
  classifiers=[
@@ -0,0 +1,28 @@
1
+ import pytest
2
+
3
+ from cuenca import JwtToken, LoginToken, UserLogin
4
+ from cuenca.http.client import Session
5
+
6
+
7
+ @pytest.fixture(scope='function')
8
+ def session():
9
+ session = Session()
10
+ session.configure(
11
+ 'api_key',
12
+ 'api_secret',
13
+ sandbox=True,
14
+ )
15
+ return session
16
+
17
+
18
+ @pytest.mark.vcr
19
+ def test_jwt_tokens(session):
20
+ UserLogin.create('111111', session=session)
21
+ login_token = LoginToken.create(session=session)
22
+ session.headers.pop(
23
+ 'X-Cuenca-LoginId',
24
+ )
25
+ session.configure(login_token=login_token.id)
26
+ jwt_token = JwtToken.create(session=session)
27
+ assert jwt_token
28
+ assert isinstance(jwt_token.token, str)
@@ -7,9 +7,9 @@ from cuenca.http import Session
7
7
 
8
8
  @pytest.mark.vcr
9
9
  def test_update_password():
10
- UserCredential.create('222222')
11
- UserLogin.create('222222')
12
- UserCredential.update(password='111111')
10
+ UserCredential.create('22222222')
11
+ UserLogin.create('22222222')
12
+ UserCredential.update(password='11111111')
13
13
 
14
14
 
15
15
  @pytest.mark.vcr
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes