cuenca 2.1.20.dev1__tar.gz → 2.1.21__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 (120) hide show
  1. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/PKG-INFO +2 -2
  2. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/http/client.py +1 -1
  3. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/password_resets.py +9 -7
  4. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/transfers.py +28 -3
  5. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/version.py +1 -1
  6. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca.egg-info/PKG-INFO +2 -2
  7. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca.egg-info/requires.txt +1 -1
  8. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/setup.py +1 -1
  9. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_password_resets.py +0 -13
  10. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_transfers.py +30 -0
  11. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/LICENSE +0 -0
  12. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/README.md +0 -0
  13. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/__init__.py +0 -0
  14. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/exc.py +0 -0
  15. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/http/__init__.py +0 -0
  16. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/jwt.py +0 -0
  17. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/py.typed +0 -0
  18. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/__init__.py +0 -0
  19. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/accounts.py +0 -0
  20. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/api_keys.py +0 -0
  21. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/arpc.py +0 -0
  22. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/balance_entries.py +0 -0
  23. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/base.py +0 -0
  24. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/bill_payments.py +0 -0
  25. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/card_activations.py +0 -0
  26. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/card_transactions.py +0 -0
  27. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/card_validations.py +0 -0
  28. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/cards.py +0 -0
  29. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/cash_references.py +0 -0
  30. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/clabes.py +0 -0
  31. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/commissions.py +0 -0
  32. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/curp_validations.py +0 -0
  33. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/deposits.py +0 -0
  34. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/endpoints.py +0 -0
  35. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/exist_phones.py +0 -0
  36. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/file_batches.py +0 -0
  37. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/files.py +0 -0
  38. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/identities.py +0 -0
  39. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/identity_events.py +0 -0
  40. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/jwt_tokens.py +0 -0
  41. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/kyc_validations.py +0 -0
  42. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/limited_wallets.py +0 -0
  43. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/login_tokens.py +0 -0
  44. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/otps.py +0 -0
  45. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/phone_verification_associations.py +0 -0
  46. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/platforms.py +0 -0
  47. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/postal_codes.py +0 -0
  48. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/questionnaires.py +0 -0
  49. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/resources.py +0 -0
  50. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/savings.py +0 -0
  51. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/service_providers.py +0 -0
  52. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/sessions.py +0 -0
  53. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/statements.py +0 -0
  54. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/terms_of_service.py +0 -0
  55. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/user_credentials.py +0 -0
  56. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/user_events.py +0 -0
  57. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/user_lists_validation.py +0 -0
  58. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/user_logins.py +0 -0
  59. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/users.py +0 -0
  60. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/users_tos_agreements.py +0 -0
  61. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/verifications.py +0 -0
  62. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/wallet_transactions.py +0 -0
  63. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/webhooks.py +0 -0
  64. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca/resources/whatsapp_transfers.py +0 -0
  65. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca.egg-info/SOURCES.txt +0 -0
  66. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca.egg-info/dependency_links.txt +0 -0
  67. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/cuenca.egg-info/top_level.txt +0 -0
  68. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/setup.cfg +0 -0
  69. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/__init__.py +0 -0
  70. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/conftest.py +0 -0
  71. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/http/__init__.py +0 -0
  72. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/http/conftest.py +0 -0
  73. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/http/test_client.py +0 -0
  74. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/__init__.py +0 -0
  75. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_accounts.py +0 -0
  76. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_api_keys.py +0 -0
  77. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_arpc.py +0 -0
  78. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_balance_entries.py +0 -0
  79. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_bill_payments.py +0 -0
  80. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_card_activations.py +0 -0
  81. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_card_transactions.py +0 -0
  82. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_card_validations.py +0 -0
  83. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_cards.py +0 -0
  84. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_cash_references.py +0 -0
  85. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_clabes.py +0 -0
  86. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_commissions.py +0 -0
  87. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_curp_validations.py +0 -0
  88. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_deposits.py +0 -0
  89. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_endpoints.py +0 -0
  90. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_exist_phone.py +0 -0
  91. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_file_batches.py +0 -0
  92. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_files.py +0 -0
  93. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_identities.py +0 -0
  94. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_identity_events.py +0 -0
  95. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_jwt_tokens.py +0 -0
  96. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_kyc_validations.py +0 -0
  97. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_limited_wallets.py +0 -0
  98. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_login_tokens.py +0 -0
  99. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_otps.py +0 -0
  100. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_phone_verification_association.py +0 -0
  101. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_platforms.py +0 -0
  102. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_postal_codes.py +0 -0
  103. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_questionnaires.py +0 -0
  104. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_resources.py +0 -0
  105. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_savings.py +0 -0
  106. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_service_providers.py +0 -0
  107. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_sessions.py +0 -0
  108. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_statements.py +0 -0
  109. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_user_credentials.py +0 -0
  110. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_user_events.py +0 -0
  111. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_user_lists_validation.py +0 -0
  112. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_user_logins.py +0 -0
  113. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_users.py +0 -0
  114. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_users_tos_agreements.py +0 -0
  115. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_verifications.py +0 -0
  116. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_wallet_transactions.py +0 -0
  117. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_webhooks.py +0 -0
  118. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/resources/test_whatsapp_transfers.py +0 -0
  119. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/test_cuenca.py +0 -0
  120. {cuenca-2.1.20.dev1 → cuenca-2.1.21}/tests/test_jwt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca
3
- Version: 2.1.20.dev1
3
+ Version: 2.1.21
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.1.27
19
+ Requires-Dist: cuenca-validations>=2.1.34
20
20
  Requires-Dist: pydantic-extra-types>=2.10.0
21
21
  Dynamic: author
22
22
  Dynamic: author-email
@@ -18,7 +18,7 @@ from ..jwt import Jwt
18
18
  from ..version import API_VERSION, CLIENT_VERSION
19
19
 
20
20
  API_HOST = 'api.cuenca.com'
21
- SANDBOX_HOST = 'api.cuenca.com'
21
+ SANDBOX_HOST = 'sandbox.cuenca.com'
22
22
 
23
23
 
24
24
  class Session:
@@ -7,17 +7,15 @@ from pydantic import ConfigDict
7
7
  from pydantic_extra_types.coordinate import Coordinate
8
8
 
9
9
  from ..http import Session, session as global_session
10
- from .base import Creatable, Queryable, Retrievable
10
+ from .base import Creatable
11
11
 
12
12
 
13
- class PasswordReset(Creatable, Retrievable, Queryable):
13
+ class PasswordReset(Creatable):
14
14
  _resource: ClassVar = 'password_resets'
15
15
 
16
16
  platform_id: str
17
17
  flow_id: str
18
18
  status: VerificationStatus = VerificationStatus.created
19
- mati_verification_id: Optional[str] = None
20
- identity_id: Optional[str] = None
21
19
  provider_url: Optional[str] = None
22
20
  created_at: dt.datetime
23
21
  updated_at: Optional[dt.datetime] = None
@@ -29,10 +27,14 @@ class PasswordReset(Creatable, Retrievable, Queryable):
29
27
  'id': 'PRNEUInh69SuKXXmK95sROwQ',
30
28
  'platform_id': 'PT-1234567890',
31
29
  'flow_id': '123e4567-e89b-12d3-a456-426614174000',
32
- 'status': 'created',
33
- 'mati_verification_id': 'metamap-verification-id',
34
- 'identity_id': 'metamap-identity-id',
30
+ 'status': 'succeeded',
31
+ 'provider_url': (
32
+ 'https://dashboard.metamap.com/identity/'
33
+ 'identity-id/verification/verification-id'
34
+ ),
35
35
  'created_at': '2026-05-06T14:15:22Z',
36
+ 'updated_at': '2026-05-06T14:18:22Z',
37
+ 'deactivated_at': '2026-05-06T14:20:22Z',
36
38
  }
37
39
  }
38
40
  )
@@ -1,21 +1,24 @@
1
1
  import datetime as dt
2
- from typing import ClassVar, Optional, cast
2
+ from typing import ClassVar, Literal, Optional, cast
3
3
 
4
4
  from cuenca_validations.types import (
5
+ TransactionStatus,
5
6
  TransferNetwork,
6
7
  TransferQuery,
7
8
  TransferRequest,
9
+ UpdateTransferRequest,
8
10
  )
9
11
  from cuenca_validations.typing import DictStrAny
10
12
  from requests import HTTPError
11
13
 
12
14
  from ..exc import CuencaException
15
+ from ..http import Session, session as global_session
13
16
  from .accounts import Account
14
- from .base import Creatable, Transaction
17
+ from .base import Creatable, Transaction, Updateable
15
18
  from .resources import retrieve_uri
16
19
 
17
20
 
18
- class Transfer(Transaction, Creatable):
21
+ class Transfer(Transaction, Creatable, Updateable):
19
22
  _resource: ClassVar = 'transfers'
20
23
  _query_params: ClassVar = TransferQuery
21
24
 
@@ -71,6 +74,28 @@ class Transfer(Transaction, Creatable):
71
74
  )
72
75
  return cls._create(**req.model_dump())
73
76
 
77
+ @classmethod
78
+ def update(
79
+ cls,
80
+ transfer_id: str,
81
+ status: Literal[
82
+ TransactionStatus.succeeded,
83
+ TransactionStatus.failed,
84
+ ],
85
+ *,
86
+ session: Session = global_session,
87
+ ) -> 'Transfer':
88
+ """
89
+ Updates the status of a held transfer.
90
+
91
+ :param transfer_id: existing transfer_id
92
+ :param status: TransactionStatus.succeeded to approve, or
93
+ TransactionStatus.failed to reject
94
+ :return: Updated transfer object
95
+ """
96
+ req = UpdateTransferRequest(status=status)
97
+ return cls._update(transfer_id, session=session, **req.model_dump())
98
+
74
99
  @classmethod
75
100
  def create_many(cls, requests: list[TransferRequest]) -> DictStrAny:
76
101
  transfers: DictStrAny = dict(submitted=[], errors=[])
@@ -1,3 +1,3 @@
1
- __version__ = '2.1.20.dev1'
1
+ __version__ = '2.1.21'
2
2
  CLIENT_VERSION = __version__
3
3
  API_VERSION = '2020-03-19'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca
3
- Version: 2.1.20.dev1
3
+ Version: 2.1.21
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.1.27
19
+ Requires-Dist: cuenca-validations>=2.1.34
20
20
  Requires-Dist: pydantic-extra-types>=2.10.0
21
21
  Dynamic: author
22
22
  Dynamic: author-email
@@ -1,3 +1,3 @@
1
1
  requests>=2.32.0
2
- cuenca-validations>=2.1.27
2
+ cuenca-validations>=2.1.34
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.1.27',
27
+ 'cuenca-validations>=2.1.34',
28
28
  'pydantic-extra-types>=2.10.0',
29
29
  ],
30
30
  classifiers=[
@@ -13,16 +13,3 @@ def test_password_resets_create() -> None:
13
13
  ),
14
14
  )
15
15
  assert password_reset.id.startswith('PR')
16
-
17
-
18
- @pytest.mark.vcr
19
- def test_password_resets_retrieve() -> None:
20
- password_reset = PasswordReset.retrieve('PRFOO')
21
- assert password_reset.id
22
- assert password_reset.flow_id
23
-
24
-
25
- @pytest.mark.vcr
26
- def test_password_resets_all() -> None:
27
- items = list(PasswordReset.all())
28
- assert items
@@ -130,3 +130,33 @@ def test_invalid_params():
130
130
  with pytest.raises(ValidationError) as e:
131
131
  Transfer.one(invalid_param='invalid_param')
132
132
  assert 'Extra inputs are not permitted' in str(e)
133
+
134
+
135
+ @pytest.mark.vcr
136
+ def test_transfers_update_succeeded():
137
+ transfer = Transfer.update('TR01', status=TransactionStatus.succeeded)
138
+ assert transfer.id == 'TR01'
139
+ assert transfer.status == TransactionStatus.succeeded
140
+
141
+
142
+ @pytest.mark.vcr
143
+ def test_transfers_update_failed():
144
+ transfer = Transfer.update('TR02', status=TransactionStatus.failed)
145
+ assert transfer.id == 'TR02'
146
+ assert transfer.status == TransactionStatus.failed
147
+
148
+
149
+ @pytest.mark.parametrize(
150
+ 'invalid_status',
151
+ [
152
+ TransactionStatus.created,
153
+ TransactionStatus.submitted,
154
+ TransactionStatus.in_review,
155
+ 'cancelled',
156
+ 'approve',
157
+ 'reject',
158
+ ],
159
+ )
160
+ def test_transfers_update_rejects_invalid_status(invalid_status):
161
+ with pytest.raises(ValidationError):
162
+ Transfer.update('TR03', status=invalid_status)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes