cuenca-validations 2.1.39.dev0__tar.gz → 2.1.39.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.
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/PKG-INFO +1 -1
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/__init__.py +8 -2
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/enums.py +7 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/queries.py +5 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/requests.py +40 -19
- cuenca_validations-2.1.39.dev1/cuenca_validations/version.py +1 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/PKG-INFO +1 -1
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_requests.py +14 -22
- cuenca_validations-2.1.39.dev0/cuenca_validations/version.py +0 -1
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/LICENSE +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/README.md +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/__init__.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/card_bins.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/errors.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/py.typed +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/card.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/files.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/general.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/helpers.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/identities.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/morals.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/typing.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/validators.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/SOURCES.txt +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/dependency_links.txt +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/requires.txt +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/top_level.txt +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/setup.cfg +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/setup.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/__init__.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_card.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_errors.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_helpers.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_statement.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_types.py +0 -0
- {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_validators.py +0 -0
|
@@ -2,6 +2,10 @@ __all__ = [
|
|
|
2
2
|
'AccountUseType',
|
|
3
3
|
'AccountQuery',
|
|
4
4
|
'Address',
|
|
5
|
+
'AgentQuery',
|
|
6
|
+
'AgentRequest',
|
|
7
|
+
'AgentStatus',
|
|
8
|
+
'AgentUpdateRequest',
|
|
5
9
|
'ApiKeyQuery',
|
|
6
10
|
'ApiKeyUpdateRequest',
|
|
7
11
|
'AuthorizerTransaction',
|
|
@@ -27,7 +31,6 @@ __all__ = [
|
|
|
27
31
|
'CardTransactionType',
|
|
28
32
|
'CardType',
|
|
29
33
|
'Country',
|
|
30
|
-
'CodiNotificationRequest',
|
|
31
34
|
'Curp',
|
|
32
35
|
'CurpValidationRequest',
|
|
33
36
|
'CommissionType',
|
|
@@ -128,6 +131,7 @@ __all__ = [
|
|
|
128
131
|
from .card import StrictPaymentCardNumber
|
|
129
132
|
from .enums import (
|
|
130
133
|
AccountUseType,
|
|
134
|
+
AgentStatus,
|
|
131
135
|
AuthorizerTransaction,
|
|
132
136
|
BankAccountStatus,
|
|
133
137
|
CardErrorType,
|
|
@@ -201,6 +205,7 @@ from .identities import (
|
|
|
201
205
|
)
|
|
202
206
|
from .queries import (
|
|
203
207
|
AccountQuery,
|
|
208
|
+
AgentQuery,
|
|
204
209
|
ApiKeyQuery,
|
|
205
210
|
BalanceEntryQuery,
|
|
206
211
|
BankAccountValidationQuery,
|
|
@@ -224,10 +229,11 @@ from .queries import (
|
|
|
224
229
|
WalletTransactionQuery,
|
|
225
230
|
)
|
|
226
231
|
from .requests import (
|
|
232
|
+
AgentRequest,
|
|
233
|
+
AgentUpdateRequest,
|
|
227
234
|
ApiKeyUpdateRequest,
|
|
228
235
|
BankAccountValidationRequest,
|
|
229
236
|
BeneficiaryRequest,
|
|
230
|
-
CodiNotificationRequest,
|
|
231
237
|
CurpValidationRequest,
|
|
232
238
|
EndpointRequest,
|
|
233
239
|
EndpointUpdateRequest,
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/enums.py
RENAMED
|
@@ -589,6 +589,13 @@ class SessionType(str, Enum):
|
|
|
589
589
|
account_entries = 'session.account_entries'
|
|
590
590
|
download_file = 'session.download_file'
|
|
591
591
|
upload_file = 'session.upload_file'
|
|
592
|
+
agent = 'session.agent'
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
class AgentStatus(str, Enum):
|
|
596
|
+
created = 'created'
|
|
597
|
+
succeeded = 'succeeded'
|
|
598
|
+
failed = 'failed'
|
|
592
599
|
|
|
593
600
|
|
|
594
601
|
class WebhookObject(str, Enum):
|
|
@@ -15,6 +15,7 @@ from pydantic import (
|
|
|
15
15
|
from ..typing import DictStrAny
|
|
16
16
|
from ..validators import sanitize_dict
|
|
17
17
|
from .enums import (
|
|
18
|
+
AgentStatus,
|
|
18
19
|
BankAccountStatus,
|
|
19
20
|
CardFundingType,
|
|
20
21
|
CardIssuer,
|
|
@@ -193,6 +194,10 @@ class SessionQuery(QueryParams):
|
|
|
193
194
|
type: SessionType
|
|
194
195
|
|
|
195
196
|
|
|
197
|
+
class AgentQuery(QueryParams):
|
|
198
|
+
status: Optional[AgentStatus] = None
|
|
199
|
+
|
|
200
|
+
|
|
196
201
|
class FileQuery(QueryParams):
|
|
197
202
|
type: Optional[KYCFileType] = None
|
|
198
203
|
id: Optional[str] = None
|
|
@@ -18,6 +18,7 @@ from pydantic_extra_types.coordinate import Coordinate
|
|
|
18
18
|
|
|
19
19
|
from ..types.enums import (
|
|
20
20
|
AccountUseType,
|
|
21
|
+
AgentStatus,
|
|
21
22
|
AuthorizerTransaction,
|
|
22
23
|
CardDesign,
|
|
23
24
|
CardFundingType,
|
|
@@ -462,25 +463,6 @@ class CurpValidationRequest(BaseRequest):
|
|
|
462
463
|
return values
|
|
463
464
|
|
|
464
465
|
|
|
465
|
-
class CodiNotificationRequest(BaseRequest):
|
|
466
|
-
clave_rastreo: str
|
|
467
|
-
status: str
|
|
468
|
-
payment_type: Optional[str] = None
|
|
469
|
-
monto: Optional[int] = None
|
|
470
|
-
concepto: Optional[str] = None
|
|
471
|
-
cuenta_ordenante: Optional[str] = None
|
|
472
|
-
cuenta_beneficiario: Optional[str] = None
|
|
473
|
-
nombre_ordenante: Optional[str] = None
|
|
474
|
-
nombre_beneficiario: Optional[str] = None
|
|
475
|
-
referencia_numerica: Optional[str] = None
|
|
476
|
-
alias_celular_ordenante: Optional[str] = None
|
|
477
|
-
digito_verificador_ordenante: Optional[str] = None
|
|
478
|
-
alias_celular_beneficiario: Optional[str] = None
|
|
479
|
-
digito_verificador_beneficiario: Optional[str] = None
|
|
480
|
-
folio_esquema: str
|
|
481
|
-
estampa_tiempo_cobro: Optional[int] = None
|
|
482
|
-
|
|
483
|
-
|
|
484
466
|
class TOSRequest(BaseModel):
|
|
485
467
|
type: TermsOfService
|
|
486
468
|
version: str
|
|
@@ -664,6 +646,45 @@ class SessionRequest(BaseRequest):
|
|
|
664
646
|
)
|
|
665
647
|
|
|
666
648
|
|
|
649
|
+
class AgentRequest(BaseRequest):
|
|
650
|
+
phone_number: PhoneNumber
|
|
651
|
+
device_info: DictStrAny = Field(default_factory=dict)
|
|
652
|
+
model_config = ConfigDict(
|
|
653
|
+
json_schema_extra={
|
|
654
|
+
'example': {
|
|
655
|
+
'phone_number': '+525512345678',
|
|
656
|
+
'device_info': {'client': 'cursor', 'os': 'macOS'},
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
)
|
|
660
|
+
|
|
661
|
+
@field_validator('phone_number', mode='before')
|
|
662
|
+
@classmethod
|
|
663
|
+
def normalize_phone(cls, v: PhoneNumber) -> str:
|
|
664
|
+
return normalize_phone_number(str(v))
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
class AgentUpdateRequest(BaseRequest):
|
|
668
|
+
pairing_code: Optional[str] = None
|
|
669
|
+
status: AgentStatus
|
|
670
|
+
model_config = ConfigDict(
|
|
671
|
+
json_schema_extra={
|
|
672
|
+
'example': {
|
|
673
|
+
'pairing_code': 'ABC-123',
|
|
674
|
+
'status': 'succeeded',
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
)
|
|
678
|
+
|
|
679
|
+
@model_validator(mode='after')
|
|
680
|
+
def validate_update(self) -> 'AgentUpdateRequest':
|
|
681
|
+
if self.status == AgentStatus.created:
|
|
682
|
+
raise ValueError('Invalid status')
|
|
683
|
+
if self.status == AgentStatus.succeeded and not self.pairing_code:
|
|
684
|
+
raise ValueError('pairing_code is required')
|
|
685
|
+
return self
|
|
686
|
+
|
|
687
|
+
|
|
667
688
|
class EndpointRequest(BaseRequest):
|
|
668
689
|
url: SerializableHttpUrl
|
|
669
690
|
events: Optional[list[WebhookEvent]] = None
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.1.39.dev1'
|
|
@@ -2,9 +2,9 @@ import pytest
|
|
|
2
2
|
from pydantic import ValidationError
|
|
3
3
|
from pydantic_extra_types.phone_numbers import PhoneNumber
|
|
4
4
|
|
|
5
|
+
from cuenca_validations.types import AgentStatus, AgentUpdateRequest
|
|
5
6
|
from cuenca_validations.types.enums import VerificationType
|
|
6
7
|
from cuenca_validations.types.requests import (
|
|
7
|
-
CodiNotificationRequest,
|
|
8
8
|
PasswordResetRequest,
|
|
9
9
|
UpdateTransferRequest,
|
|
10
10
|
UserTOSAgreementRequest,
|
|
@@ -126,24 +126,16 @@ def test_update_transfer_request_forbids_extra() -> None:
|
|
|
126
126
|
assert 'Extra inputs are not permitted' in str(ex.value)
|
|
127
127
|
|
|
128
128
|
|
|
129
|
-
def
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
'referencia_numerica': '1234567',
|
|
143
|
-
'alias_celular_ordenante': '2700754676',
|
|
144
|
-
'digito_verificador_ordenante': '34',
|
|
145
|
-
'alias_celular_beneficiario': '0754676270',
|
|
146
|
-
'digito_verificador_beneficiario': '27',
|
|
147
|
-
}
|
|
148
|
-
req = CodiNotificationRequest.model_validate(payload)
|
|
149
|
-
assert req.model_dump() == payload
|
|
129
|
+
def test_agent_update_request_rejects_created_status() -> None:
|
|
130
|
+
with pytest.raises(ValidationError) as exc:
|
|
131
|
+
AgentUpdateRequest(
|
|
132
|
+
pairing_code='ABC-123',
|
|
133
|
+
status=AgentStatus.created,
|
|
134
|
+
)
|
|
135
|
+
assert 'Invalid status' in str(exc.value)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def test_agent_update_request_succeeded_requires_pairing_code() -> None:
|
|
139
|
+
with pytest.raises(ValidationError) as exc:
|
|
140
|
+
AgentUpdateRequest(status=AgentStatus.succeeded)
|
|
141
|
+
assert 'pairing_code is required' in str(exc.value)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '2.1.39.dev0'
|
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/__init__.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/card_bins.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/errors.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/py.typed
RENAMED
|
File without changes
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/card.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/files.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/morals.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/typing.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/validators.py
RENAMED
|
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
|