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.
Files changed (36) hide show
  1. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/PKG-INFO +1 -1
  2. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/__init__.py +8 -2
  3. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/enums.py +7 -0
  4. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/queries.py +5 -0
  5. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/requests.py +40 -19
  6. cuenca_validations-2.1.39.dev1/cuenca_validations/version.py +1 -0
  7. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/PKG-INFO +1 -1
  8. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_requests.py +14 -22
  9. cuenca_validations-2.1.39.dev0/cuenca_validations/version.py +0 -1
  10. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/LICENSE +0 -0
  11. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/README.md +0 -0
  12. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/__init__.py +0 -0
  13. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/card_bins.py +0 -0
  14. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/errors.py +0 -0
  15. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/py.typed +0 -0
  16. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/card.py +0 -0
  17. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/files.py +0 -0
  18. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/general.py +0 -0
  19. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/helpers.py +0 -0
  20. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/identities.py +0 -0
  21. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/types/morals.py +0 -0
  22. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/typing.py +0 -0
  23. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations/validators.py +0 -0
  24. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/SOURCES.txt +0 -0
  25. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/dependency_links.txt +0 -0
  26. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/requires.txt +0 -0
  27. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/cuenca_validations.egg-info/top_level.txt +0 -0
  28. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/setup.cfg +0 -0
  29. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/setup.py +0 -0
  30. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/__init__.py +0 -0
  31. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_card.py +0 -0
  32. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_errors.py +0 -0
  33. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_helpers.py +0 -0
  34. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_statement.py +0 -0
  35. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_types.py +0 -0
  36. {cuenca_validations-2.1.39.dev0 → cuenca_validations-2.1.39.dev1}/tests/test_validators.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca_validations
3
- Version: 2.1.39.dev0
3
+ Version: 2.1.39.dev1
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -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,
@@ -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'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca_validations
3
- Version: 2.1.39.dev0
3
+ Version: 2.1.39.dev1
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -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 test_codi_notification_request_serializes() -> None:
130
- payload: DictStrAny = {
131
- 'clave_rastreo': 'LT123456789',
132
- 'status': 'succeeded',
133
- 'payment_type': '19',
134
- 'monto': 10000,
135
- 'concepto': 'Pago CoDi test',
136
- 'cuenta_ordenante': '646180157000000001',
137
- 'cuenta_beneficiario': '646180157000000002',
138
- 'nombre_ordenante': 'Juan Perez',
139
- 'nombre_beneficiario': 'Maria Lopez',
140
- 'folio_esquema': '25535dd9e425535dd9ee',
141
- 'estampa_tiempo_cobro': 1704067200000,
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'