cuenca 2.2.0.dev3__tar.gz → 2.2.2__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.
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/PKG-INFO +2 -2
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/__init__.py +4 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/__init__.py +6 -0
- cuenca-2.2.2/cuenca/resources/agent_verifications.py +37 -0
- cuenca-2.2.2/cuenca/resources/agents.py +52 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/password_resets.py +7 -1
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/transfers.py +16 -2
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/version.py +1 -1
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca.egg-info/PKG-INFO +2 -2
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca.egg-info/SOURCES.txt +3 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca.egg-info/requires.txt +1 -1
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/setup.py +1 -1
- cuenca-2.2.2/tests/resources/test_agents.py +22 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_transfers.py +30 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/LICENSE +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/README.md +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/exc.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/http/__init__.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/http/client.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/jwt.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/py.typed +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/accounts.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/api_keys.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/arpc.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/balance_entries.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/base.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/bill_payments.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/card_activations.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/card_transactions.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/card_validations.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/cards.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/cash_references.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/clabes.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/commissions.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/curp_validations.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/deposits.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/endpoints.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/exist_phones.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/file_batches.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/files.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/identities.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/identity_events.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/jwt_tokens.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/kyc_validations.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/limited_wallets.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/login_tokens.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/otps.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/phone_verification_associations.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/platforms.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/postal_codes.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/questionnaires.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/resources.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/savings.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/service_providers.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/sessions.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/statements.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/terms_of_service.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/user_credentials.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/user_events.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/user_lists_validation.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/user_logins.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/users.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/users_tos_agreements.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/verifications.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/wallet_transactions.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/webhooks.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca/resources/whatsapp_transfers.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca.egg-info/dependency_links.txt +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/cuenca.egg-info/top_level.txt +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/setup.cfg +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/__init__.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/conftest.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/http/__init__.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/http/conftest.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/http/test_client.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/__init__.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_accounts.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_api_keys.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_arpc.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_balance_entries.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_bill_payments.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_card_activations.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_card_transactions.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_card_validations.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_cards.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_cash_references.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_clabes.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_commissions.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_curp_validations.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_deposits.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_endpoints.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_exist_phone.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_file_batches.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_files.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_identities.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_identity_events.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_jwt_tokens.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_kyc_validations.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_limited_wallets.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_login_tokens.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_otps.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_password_resets.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_phone_verification_association.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_platforms.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_postal_codes.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_questionnaires.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_resources.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_savings.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_service_providers.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_sessions.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_statements.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_user_credentials.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_user_events.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_user_lists_validation.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_user_logins.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_users.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_users_tos_agreements.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_verifications.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_wallet_transactions.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_webhooks.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/resources/test_whatsapp_transfers.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/test_cuenca.py +0 -0
- {cuenca-2.2.0.dev3 → cuenca-2.2.2}/tests/test_jwt.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cuenca
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
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.
|
|
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,5 +1,7 @@
|
|
|
1
1
|
__all__ = [
|
|
2
2
|
'__version__',
|
|
3
|
+
'Agent',
|
|
4
|
+
'AgentVerification',
|
|
3
5
|
'ApiKey',
|
|
4
6
|
'Account',
|
|
5
7
|
'Arpc',
|
|
@@ -53,6 +55,8 @@ __all__ = [
|
|
|
53
55
|
from . import http
|
|
54
56
|
from .resources import (
|
|
55
57
|
Account,
|
|
58
|
+
Agent,
|
|
59
|
+
AgentVerification,
|
|
56
60
|
ApiKey,
|
|
57
61
|
Arpc,
|
|
58
62
|
BalanceEntry,
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
__all__ = [
|
|
2
|
+
'Agent',
|
|
3
|
+
'AgentVerification',
|
|
2
4
|
'ApiKey',
|
|
3
5
|
'Account',
|
|
4
6
|
'Arpc',
|
|
@@ -47,6 +49,8 @@ __all__ = [
|
|
|
47
49
|
]
|
|
48
50
|
|
|
49
51
|
from .accounts import Account
|
|
52
|
+
from .agent_verifications import AgentVerification
|
|
53
|
+
from .agents import Agent
|
|
50
54
|
from .api_keys import ApiKey
|
|
51
55
|
from .arpc import Arpc
|
|
52
56
|
from .balance_entries import BalanceEntry
|
|
@@ -96,6 +100,8 @@ from .whatsapp_transfers import WhatsappTransfer
|
|
|
96
100
|
|
|
97
101
|
# avoid circular imports
|
|
98
102
|
resource_classes = [
|
|
103
|
+
Agent,
|
|
104
|
+
AgentVerification,
|
|
99
105
|
ApiKey,
|
|
100
106
|
Account,
|
|
101
107
|
Arpc,
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import datetime as dt
|
|
2
|
+
from typing import ClassVar
|
|
3
|
+
|
|
4
|
+
from cuenca_validations.types.identities import PhoneNumber
|
|
5
|
+
from pydantic import ConfigDict
|
|
6
|
+
|
|
7
|
+
from ..http import Session, session as global_session
|
|
8
|
+
from .base import Creatable
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class AgentVerification(Creatable):
|
|
12
|
+
_resource: ClassVar = 'agent_verifications'
|
|
13
|
+
|
|
14
|
+
created_at: dt.datetime
|
|
15
|
+
user_id: str
|
|
16
|
+
platform_id: str
|
|
17
|
+
phone_number: PhoneNumber
|
|
18
|
+
pairing_code: str
|
|
19
|
+
deactivated_at: dt.datetime
|
|
20
|
+
|
|
21
|
+
model_config = ConfigDict(
|
|
22
|
+
json_schema_extra={
|
|
23
|
+
'example': {
|
|
24
|
+
'id': 'AVjTtPH1mhT65GEgOeomJ4DQ',
|
|
25
|
+
'created_at': '2026-06-25T22:50:08.495768',
|
|
26
|
+
'user_id': 'USMP3EPgI4T4CPFyVmXUPi8A',
|
|
27
|
+
'platform_id': 'PTZbBlk__kQt-wfwzP5nwA9A',
|
|
28
|
+
'phone_number': '+525512345678',
|
|
29
|
+
'pairing_code': 'OJC37W',
|
|
30
|
+
'deactivated_at': '2026-06-25T22:55:08.495779',
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
@classmethod
|
|
36
|
+
def create(cls, session: Session = global_session) -> 'AgentVerification':
|
|
37
|
+
return cls._create(session=session)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import datetime as dt
|
|
2
|
+
from typing import ClassVar, Optional
|
|
3
|
+
|
|
4
|
+
from cuenca_validations.types import AgentQuery, AgentRequest, PhoneNumber
|
|
5
|
+
from cuenca_validations.typing import DictStrAny
|
|
6
|
+
from pydantic import ConfigDict, Field
|
|
7
|
+
|
|
8
|
+
from ..http import Session, session as global_session
|
|
9
|
+
from .base import Creatable, Queryable
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class Agent(Creatable, Queryable):
|
|
13
|
+
_resource: ClassVar = 'agents'
|
|
14
|
+
_query_params: ClassVar = AgentQuery
|
|
15
|
+
|
|
16
|
+
created_at: dt.datetime
|
|
17
|
+
user_id: str
|
|
18
|
+
platform_id: str
|
|
19
|
+
agent_verification_id: str
|
|
20
|
+
session_id: str
|
|
21
|
+
device_info: DictStrAny = Field(default_factory=dict)
|
|
22
|
+
deactivated_at: Optional[dt.datetime] = None
|
|
23
|
+
|
|
24
|
+
model_config = ConfigDict(
|
|
25
|
+
json_schema_extra={
|
|
26
|
+
'example': {
|
|
27
|
+
'id': 'AG1G6Bm0oGQOCRjTDaeFSsyA',
|
|
28
|
+
'created_at': '2026-06-27T01:56:42.613781',
|
|
29
|
+
'user_id': 'USMP3EPgI4T4CPFyVmXUPi8A',
|
|
30
|
+
'platform_id': 'PTZbBlk__kQt-wfwzP5nwA9A',
|
|
31
|
+
'agent_verification_id': 'AV7A1FLC7MSnqKcb7oAkiQxA',
|
|
32
|
+
'session_id': 'SSH0M5yteyRHas-PmfT9pu9w',
|
|
33
|
+
'device_info': {'client': 'cursor', 'os': 'macOS'},
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def create(
|
|
40
|
+
cls,
|
|
41
|
+
pairing_code: str,
|
|
42
|
+
phone_number: PhoneNumber,
|
|
43
|
+
device_info: Optional[DictStrAny] = None,
|
|
44
|
+
*,
|
|
45
|
+
session: Session = global_session,
|
|
46
|
+
) -> 'Agent':
|
|
47
|
+
req = AgentRequest(
|
|
48
|
+
pairing_code=pairing_code,
|
|
49
|
+
phone_number=phone_number,
|
|
50
|
+
device_info=device_info or {},
|
|
51
|
+
)
|
|
52
|
+
return cls._create(session=session, **req.model_dump())
|
|
@@ -27,8 +27,14 @@ class PasswordReset(Creatable):
|
|
|
27
27
|
'id': 'PRNEUInh69SuKXXmK95sROwQ',
|
|
28
28
|
'platform_id': 'PT-1234567890',
|
|
29
29
|
'flow_id': '123e4567-e89b-12d3-a456-426614174000',
|
|
30
|
-
'status': '
|
|
30
|
+
'status': 'succeeded',
|
|
31
|
+
'provider_url': (
|
|
32
|
+
'https://dashboard.metamap.com/identity/'
|
|
33
|
+
'identity-id/verification/verification-id'
|
|
34
|
+
),
|
|
31
35
|
'created_at': '2026-05-06T14:15:22Z',
|
|
36
|
+
'updated_at': '2026-05-06T14:18:22Z',
|
|
37
|
+
'deactivated_at': '2026-05-06T14:20:22Z',
|
|
32
38
|
}
|
|
33
39
|
}
|
|
34
40
|
)
|
|
@@ -2,20 +2,23 @@ import datetime as dt
|
|
|
2
2
|
from typing import ClassVar, 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,17 @@ 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: TransactionStatus,
|
|
82
|
+
*,
|
|
83
|
+
session: Session = global_session,
|
|
84
|
+
) -> 'Transfer':
|
|
85
|
+
req = UpdateTransferRequest(status=status)
|
|
86
|
+
return cls._update(transfer_id, session=session, **req.model_dump())
|
|
87
|
+
|
|
74
88
|
@classmethod
|
|
75
89
|
def create_many(cls, requests: list[TransferRequest]) -> DictStrAny:
|
|
76
90
|
transfers: DictStrAny = dict(submitted=[], errors=[])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cuenca
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
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.
|
|
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
|
|
@@ -16,6 +16,8 @@ cuenca/http/__init__.py
|
|
|
16
16
|
cuenca/http/client.py
|
|
17
17
|
cuenca/resources/__init__.py
|
|
18
18
|
cuenca/resources/accounts.py
|
|
19
|
+
cuenca/resources/agent_verifications.py
|
|
20
|
+
cuenca/resources/agents.py
|
|
19
21
|
cuenca/resources/api_keys.py
|
|
20
22
|
cuenca/resources/arpc.py
|
|
21
23
|
cuenca/resources/balance_entries.py
|
|
@@ -72,6 +74,7 @@ tests/http/conftest.py
|
|
|
72
74
|
tests/http/test_client.py
|
|
73
75
|
tests/resources/__init__.py
|
|
74
76
|
tests/resources/test_accounts.py
|
|
77
|
+
tests/resources/test_agents.py
|
|
75
78
|
tests/resources/test_api_keys.py
|
|
76
79
|
tests/resources/test_arpc.py
|
|
77
80
|
tests/resources/test_balance_entries.py
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from cuenca.http.client import Session
|
|
4
|
+
from cuenca.resources import Agent, AgentVerification
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@pytest.mark.vcr
|
|
8
|
+
def test_agent_create():
|
|
9
|
+
verification = AgentVerification.create() # Created by user in APP
|
|
10
|
+
agent_session = Session()
|
|
11
|
+
agent_session.configure(sandbox=True)
|
|
12
|
+
agent = Agent.create(
|
|
13
|
+
pairing_code=verification.pairing_code,
|
|
14
|
+
phone_number=verification.phone_number,
|
|
15
|
+
device_info={'client': 'cursor', 'os': 'macOS'},
|
|
16
|
+
session=agent_session,
|
|
17
|
+
)
|
|
18
|
+
assert agent.id
|
|
19
|
+
assert agent.agent_verification_id == verification.id
|
|
20
|
+
assert agent.session_id
|
|
21
|
+
assert agent.user_id
|
|
22
|
+
assert agent.platform_id
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|