cuenca-validations 2.1.16.dev11__tar.gz → 2.1.17__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.16.dev11 → cuenca_validations-2.1.17}/PKG-INFO +1 -1
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/__init__.py +2 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/identities.py +7 -3
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/requests.py +18 -14
- cuenca_validations-2.1.17/cuenca_validations/version.py +1 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations.egg-info/PKG-INFO +1 -1
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/tests/test_types.py +3 -26
- cuenca_validations-2.1.16.dev11/cuenca_validations/version.py +0 -1
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/LICENSE +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/README.md +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/__init__.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/card_bins.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/errors.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/py.typed +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/card.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/enums.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/files.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/general.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/helpers.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/morals.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/queries.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/typing.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/validators.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations.egg-info/SOURCES.txt +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations.egg-info/dependency_links.txt +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations.egg-info/requires.txt +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations.egg-info/top_level.txt +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/setup.cfg +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/setup.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/tests/__init__.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/tests/test_card.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/tests/test_errors.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/tests/test_helpers.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/tests/test_requests.py +0 -0
- {cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/tests/test_statement.py +0 -0
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/__init__.py
RENAMED
|
@@ -14,6 +14,7 @@ __all__ = [
|
|
|
14
14
|
'BankAccountStatus',
|
|
15
15
|
'BatchFileMetadata',
|
|
16
16
|
'Beneficiary',
|
|
17
|
+
'BeneficiaryRequest',
|
|
17
18
|
'BillPaymentQuery',
|
|
18
19
|
'CardErrorType',
|
|
19
20
|
'CardFundingType',
|
|
@@ -221,6 +222,7 @@ from .queries import (
|
|
|
221
222
|
from .requests import (
|
|
222
223
|
ApiKeyUpdateRequest,
|
|
223
224
|
BankAccountValidationRequest,
|
|
225
|
+
BeneficiaryRequest,
|
|
224
226
|
CurpValidationRequest,
|
|
225
227
|
EndpointRequest,
|
|
226
228
|
EndpointUpdateRequest,
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/identities.py
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import datetime as dt
|
|
2
|
-
from typing import Annotated, Optional
|
|
2
|
+
from typing import Annotated, Optional, Union
|
|
3
3
|
|
|
4
4
|
from pydantic import BaseModel, ConfigDict, Field, SecretStr, StringConstraints
|
|
5
5
|
from pydantic_extra_types.phone_numbers import PhoneNumber
|
|
@@ -89,12 +89,12 @@ class AddressRequest(BaseModel):
|
|
|
89
89
|
)
|
|
90
90
|
|
|
91
91
|
|
|
92
|
-
class
|
|
92
|
+
class BaseBeneficiary(BaseModel):
|
|
93
93
|
name: str
|
|
94
94
|
birth_date: dt.date
|
|
95
|
-
phone_number: PhoneNumber
|
|
96
95
|
user_relationship: str
|
|
97
96
|
percentage: Annotated[int, Field(ge=1, le=100)]
|
|
97
|
+
|
|
98
98
|
model_config = ConfigDict(
|
|
99
99
|
json_schema_extra={
|
|
100
100
|
"example": {
|
|
@@ -108,6 +108,10 @@ class Beneficiary(BaseModel):
|
|
|
108
108
|
)
|
|
109
109
|
|
|
110
110
|
|
|
111
|
+
class Beneficiary(BaseBeneficiary):
|
|
112
|
+
phone_number: Union[PhoneNumber, str]
|
|
113
|
+
|
|
114
|
+
|
|
111
115
|
class VerificationErrors(BaseModel):
|
|
112
116
|
identifier: str = Field(
|
|
113
117
|
description='Unique identifier for the step validation'
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/requests.py
RENAMED
|
@@ -73,7 +73,7 @@ from .general import (
|
|
|
73
73
|
from .helpers import validate_age_requirement
|
|
74
74
|
from .identities import (
|
|
75
75
|
AddressRequest,
|
|
76
|
-
|
|
76
|
+
BaseBeneficiary,
|
|
77
77
|
Curp,
|
|
78
78
|
KYCFile,
|
|
79
79
|
Password,
|
|
@@ -330,7 +330,7 @@ class UserPldRiskLevelRequest(BaseModel):
|
|
|
330
330
|
level: float = Field(ge=0.0, le=1.0)
|
|
331
331
|
|
|
332
332
|
|
|
333
|
-
class CurpValidationRequest(
|
|
333
|
+
class CurpValidationRequest(BaseRequest):
|
|
334
334
|
names: Optional[str] = None
|
|
335
335
|
first_surname: Optional[str] = None
|
|
336
336
|
second_surname: Optional[str] = Field(
|
|
@@ -439,13 +439,13 @@ class FileCuencaUrl(str):
|
|
|
439
439
|
)
|
|
440
440
|
|
|
441
441
|
|
|
442
|
-
class UserTOSAgreementRequest(
|
|
442
|
+
class UserTOSAgreementRequest(BaseRequest):
|
|
443
443
|
tos_id: str
|
|
444
444
|
location: Coordinate
|
|
445
445
|
signature_image_url: Optional[FileCuencaUrl] = None
|
|
446
446
|
|
|
447
447
|
|
|
448
|
-
class UserRequest(
|
|
448
|
+
class UserRequest(BaseRequest):
|
|
449
449
|
curp: Curp = Field(
|
|
450
450
|
description=(
|
|
451
451
|
'Mexican government ID (18 characters). ' 'Must be pre-validated.'
|
|
@@ -491,16 +491,20 @@ class UserRequest(BaseModel):
|
|
|
491
491
|
@classmethod
|
|
492
492
|
def validate_profession(cls, profession: Profession) -> Profession:
|
|
493
493
|
if profession == Profession.otro:
|
|
494
|
-
raise ValueError('Profession "otro" is not allowed
|
|
494
|
+
raise ValueError('Profession "otro" is not allowed')
|
|
495
495
|
return profession
|
|
496
496
|
|
|
497
497
|
|
|
498
|
-
class
|
|
498
|
+
class BeneficiaryRequest(BaseBeneficiary, BaseRequest):
|
|
499
|
+
phone_number: PhoneNumber
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
class UserUpdateRequest(BaseRequest):
|
|
499
503
|
profession: Optional[Profession] = None
|
|
500
504
|
email_verification_id: Optional[str] = None
|
|
501
505
|
phone_verification_id: Optional[str] = None
|
|
502
506
|
address: Optional[AddressRequest] = None
|
|
503
|
-
beneficiaries: Optional[list[
|
|
507
|
+
beneficiaries: Optional[list[BeneficiaryRequest]] = None
|
|
504
508
|
govt_id: Optional[KYCFile] = None
|
|
505
509
|
proof_of_address: Optional[KYCFile] = None
|
|
506
510
|
proof_of_life: Optional[KYCFile] = None
|
|
@@ -518,7 +522,7 @@ class UserUpdateRequest(BaseModel):
|
|
|
518
522
|
@field_validator('beneficiaries')
|
|
519
523
|
@classmethod
|
|
520
524
|
def beneficiary_percentage(
|
|
521
|
-
cls, beneficiaries: Optional[list[
|
|
525
|
+
cls, beneficiaries: Optional[list[BeneficiaryRequest]] = None
|
|
522
526
|
):
|
|
523
527
|
if beneficiaries and sum(b.percentage for b in beneficiaries) != 100:
|
|
524
528
|
raise ValueError('The total percentage should be 100%')
|
|
@@ -528,7 +532,7 @@ class UserUpdateRequest(BaseModel):
|
|
|
528
532
|
@classmethod
|
|
529
533
|
def validate_profession(cls, profession: Profession) -> Profession:
|
|
530
534
|
if profession == Profession.otro:
|
|
531
|
-
raise ValueError('Profession "otro" is not allowed
|
|
535
|
+
raise ValueError('Profession "otro" is not allowed')
|
|
532
536
|
return profession
|
|
533
537
|
|
|
534
538
|
|
|
@@ -590,7 +594,7 @@ class FileBatchUploadRequest(BaseModel):
|
|
|
590
594
|
user_id: str
|
|
591
595
|
|
|
592
596
|
|
|
593
|
-
class VerificationRequest(
|
|
597
|
+
class VerificationRequest(BaseRequest):
|
|
594
598
|
type: VerificationType
|
|
595
599
|
recipient: Union[EmailStr, PhoneNumber] = Field(
|
|
596
600
|
description='Phone or email to validate'
|
|
@@ -614,7 +618,7 @@ class VerificationRequest(BaseModel):
|
|
|
614
618
|
)
|
|
615
619
|
|
|
616
620
|
|
|
617
|
-
class VerificationAttemptRequest(
|
|
621
|
+
class VerificationAttemptRequest(BaseRequest):
|
|
618
622
|
code: Annotated[
|
|
619
623
|
str,
|
|
620
624
|
StringConstraints(strict=True, min_length=6, max_length=6),
|
|
@@ -655,11 +659,11 @@ class KYCValidationRequest(BaseRequest):
|
|
|
655
659
|
force: bool = False
|
|
656
660
|
|
|
657
661
|
|
|
658
|
-
class BankAccountValidationRequest(
|
|
662
|
+
class BankAccountValidationRequest(BaseRequest):
|
|
659
663
|
account_number: Union[Clabe, PaymentCardNumber]
|
|
660
664
|
|
|
661
665
|
|
|
662
|
-
class UserListsRequest(
|
|
666
|
+
class UserListsRequest(BaseRequest):
|
|
663
667
|
curp: Optional[Curp] = Field(None, description='Curp to review on lists')
|
|
664
668
|
rfc: Optional[Rfc] = Field(None, description='Rfc to review on lists')
|
|
665
669
|
account_number: Optional[Union[Clabe, PaymentCardNumber]] = Field(
|
|
@@ -758,5 +762,5 @@ class PartnerUpdateRequest(BaseRequest):
|
|
|
758
762
|
shareholders: Optional[list[Shareholder]] = None
|
|
759
763
|
|
|
760
764
|
|
|
761
|
-
class PhoneVerificationAssociationRequest(
|
|
765
|
+
class PhoneVerificationAssociationRequest(BaseRequest):
|
|
762
766
|
verification_id: str
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.1.17'
|
|
@@ -394,7 +394,9 @@ def test_curp_validation_request():
|
|
|
394
394
|
assert all(field in error_msg for field in required_fields)
|
|
395
395
|
|
|
396
396
|
req_curp = CurpValidationRequest(**request)
|
|
397
|
-
|
|
397
|
+
# exclude_none=False to test that the request equals the original dict,
|
|
398
|
+
# since normally exclude_none defaults to True in BaseRequest.model_dump()
|
|
399
|
+
assert req_curp.model_dump(exclude_none=False) == request
|
|
398
400
|
|
|
399
401
|
request['date_of_birth'] = dt.date(2006, 5, 17)
|
|
400
402
|
|
|
@@ -435,16 +437,11 @@ def test_user_update_request():
|
|
|
435
437
|
percentage=50,
|
|
436
438
|
),
|
|
437
439
|
],
|
|
438
|
-
curp_document_uri='https://sandbox.cuenca.com/files/EF123',
|
|
439
440
|
profession=Profession.empleado,
|
|
440
441
|
)
|
|
441
442
|
update_req = UserUpdateRequest(**request)
|
|
442
443
|
beneficiaries = [b.model_dump() for b in update_req.beneficiaries]
|
|
443
444
|
assert beneficiaries == request['beneficiaries']
|
|
444
|
-
assert (
|
|
445
|
-
update_req.curp_document_uri.unicode_string()
|
|
446
|
-
== request['curp_document_uri']
|
|
447
|
-
)
|
|
448
445
|
assert update_req.profession == Profession.empleado
|
|
449
446
|
|
|
450
447
|
request['beneficiaries'] = [
|
|
@@ -480,26 +477,6 @@ def test_user_update_request():
|
|
|
480
477
|
assert 'The total percentage should be 100%' in str(v)
|
|
481
478
|
request.pop('beneficiaries')
|
|
482
479
|
|
|
483
|
-
tos_request = dict(
|
|
484
|
-
terms_of_service=dict(
|
|
485
|
-
version='2022-01-01',
|
|
486
|
-
ip='127.0.0.1',
|
|
487
|
-
location='1111,1111',
|
|
488
|
-
type='ifpe',
|
|
489
|
-
)
|
|
490
|
-
)
|
|
491
|
-
UserUpdateRequest(**tos_request)
|
|
492
|
-
|
|
493
|
-
tos_request = dict(
|
|
494
|
-
terms_of_service=dict(
|
|
495
|
-
version='2022-01-01',
|
|
496
|
-
ip='2001:0db8:0000:0000:0000:ff00:0042:8329',
|
|
497
|
-
location='1111,1111',
|
|
498
|
-
type='ifpe',
|
|
499
|
-
)
|
|
500
|
-
)
|
|
501
|
-
UserUpdateRequest(**tos_request)
|
|
502
|
-
|
|
503
480
|
kyc_request = dict(
|
|
504
481
|
govt_id=dict(
|
|
505
482
|
type='ine',
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '2.1.16.dev11'
|
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/__init__.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/card_bins.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/card.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/enums.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/files.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/general.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/helpers.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/morals.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/cuenca_validations/types/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.16.dev11 → cuenca_validations-2.1.17}/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
|