cuenca-validations 2.1.8.dev5__tar.gz → 2.1.9.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.8.dev5 → cuenca_validations-2.1.9.dev1}/PKG-INFO +1 -1
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/__init__.py +0 -2
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/identities.py +28 -9
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/queries.py +0 -4
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/requests.py +7 -23
- cuenca_validations-2.1.9.dev1/cuenca_validations/version.py +1 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations.egg-info/PKG-INFO +1 -1
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/tests/test_types.py +29 -1
- cuenca_validations-2.1.8.dev5/cuenca_validations/version.py +0 -1
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/LICENSE +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/README.md +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/__init__.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/card_bins.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/errors.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/py.typed +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/card.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/enums.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/files.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/general.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/helpers.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/morals.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/typing.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/validators.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations.egg-info/SOURCES.txt +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations.egg-info/dependency_links.txt +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations.egg-info/requires.txt +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations.egg-info/top_level.txt +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/setup.cfg +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/setup.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/tests/__init__.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/tests/test_card.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/tests/test_errors.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/tests/test_helpers.py +0 -0
- {cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/tests/test_statement.py +0 -0
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/__init__.py
RENAMED
|
@@ -7,7 +7,6 @@ __all__ = [
|
|
|
7
7
|
'BalanceEntryQuery',
|
|
8
8
|
'BankAccountValidationQuery',
|
|
9
9
|
'BankAccountValidationRequest',
|
|
10
|
-
'PostalCodeQuery',
|
|
11
10
|
'BankAccountStatus',
|
|
12
11
|
'BatchFileMetadata',
|
|
13
12
|
'Beneficiary',
|
|
@@ -184,7 +183,6 @@ from .queries import (
|
|
|
184
183
|
EventQuery,
|
|
185
184
|
FileQuery,
|
|
186
185
|
IdentityQuery,
|
|
187
|
-
PostalCodeQuery,
|
|
188
186
|
QueryParams,
|
|
189
187
|
SessionQuery,
|
|
190
188
|
StatementQuery,
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import datetime as dt
|
|
2
|
-
from typing import Annotated, Optional
|
|
2
|
+
from typing import Annotated, Any, Optional
|
|
3
3
|
|
|
4
|
-
from pydantic import
|
|
4
|
+
from pydantic import (
|
|
5
|
+
BaseModel,
|
|
6
|
+
ConfigDict,
|
|
7
|
+
Field,
|
|
8
|
+
SecretStr,
|
|
9
|
+
StringConstraints,
|
|
10
|
+
model_validator,
|
|
11
|
+
)
|
|
5
12
|
from pydantic_extra_types.phone_numbers import PhoneNumber
|
|
6
13
|
|
|
7
14
|
from .enums import Country, KYCFileType, State, VerificationStatus
|
|
8
|
-
from .general import
|
|
15
|
+
from .general import SerializableIPvAnyAddress
|
|
9
16
|
|
|
10
17
|
Password = Annotated[
|
|
11
18
|
SecretStr,
|
|
@@ -38,14 +45,15 @@ Rfc = Annotated[
|
|
|
38
45
|
|
|
39
46
|
|
|
40
47
|
class Address(BaseModel):
|
|
41
|
-
street:
|
|
42
|
-
ext_number:
|
|
43
|
-
int_number: Optional[
|
|
44
|
-
colonia: Optional[
|
|
45
|
-
postal_code: Optional[
|
|
48
|
+
street: Optional[str] = None
|
|
49
|
+
ext_number: Optional[str] = None
|
|
50
|
+
int_number: Optional[str] = None
|
|
51
|
+
colonia: Optional[str] = None
|
|
52
|
+
postal_code: Optional[str] = None
|
|
46
53
|
state: Optional[State] = None
|
|
47
54
|
country: Optional[Country] = None
|
|
48
|
-
city: Optional[
|
|
55
|
+
city: Optional[str] = None
|
|
56
|
+
full_name: Optional[str] = None
|
|
49
57
|
model_config = ConfigDict(
|
|
50
58
|
json_schema_extra={
|
|
51
59
|
"example": {
|
|
@@ -61,6 +69,17 @@ class Address(BaseModel):
|
|
|
61
69
|
}
|
|
62
70
|
)
|
|
63
71
|
|
|
72
|
+
@model_validator(mode='before')
|
|
73
|
+
@classmethod
|
|
74
|
+
def full_name_complete(cls, values: dict[str, Any]) -> dict[str, Any]:
|
|
75
|
+
if values.get('full_name'):
|
|
76
|
+
return values
|
|
77
|
+
if not values.get('street'):
|
|
78
|
+
raise ValueError('required street')
|
|
79
|
+
if not values.get('ext_number'):
|
|
80
|
+
raise ValueError('required ext_number')
|
|
81
|
+
return values
|
|
82
|
+
|
|
64
83
|
|
|
65
84
|
class Beneficiary(BaseModel):
|
|
66
85
|
name: str
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/requests.py
RENAMED
|
@@ -64,6 +64,7 @@ from .general import (
|
|
|
64
64
|
StrictPositiveInt,
|
|
65
65
|
)
|
|
66
66
|
from .identities import (
|
|
67
|
+
Address,
|
|
67
68
|
Beneficiary,
|
|
68
69
|
Curp,
|
|
69
70
|
KYCFile,
|
|
@@ -83,24 +84,6 @@ from .morals import (
|
|
|
83
84
|
)
|
|
84
85
|
|
|
85
86
|
|
|
86
|
-
class AddressRequest(BaseModel):
|
|
87
|
-
street: NonEmptyStr
|
|
88
|
-
ext_number: NonEmptyStr
|
|
89
|
-
int_number: Optional[NonEmptyStr] = None
|
|
90
|
-
postal_code_id: NonEmptyStr
|
|
91
|
-
|
|
92
|
-
model_config = ConfigDict(
|
|
93
|
-
json_schema_extra={
|
|
94
|
-
"example": {
|
|
95
|
-
"street": "Reforma",
|
|
96
|
-
"ext_number": "265",
|
|
97
|
-
"int_number": "5",
|
|
98
|
-
"postal_code_id": "PC2ygq9j2bS9-9tsuVawzErA",
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
|
|
104
87
|
class BaseRequest(BaseModel):
|
|
105
88
|
model_config = ConfigDict(extra="forbid")
|
|
106
89
|
|
|
@@ -424,6 +407,7 @@ class TOSRequest(BaseModel):
|
|
|
424
407
|
class UserTOSAgreementRequest(BaseModel):
|
|
425
408
|
tos_id: str
|
|
426
409
|
location: Coordinate
|
|
410
|
+
signature: SerializableHttpUrl | None = None
|
|
427
411
|
|
|
428
412
|
|
|
429
413
|
class UserRequest(BaseModel):
|
|
@@ -440,7 +424,7 @@ class UserRequest(BaseModel):
|
|
|
440
424
|
None, description='Only if you validated previously on your side'
|
|
441
425
|
)
|
|
442
426
|
profession: Optional[str] = None
|
|
443
|
-
address:
|
|
427
|
+
address: Optional[Address] = None
|
|
444
428
|
status: Optional[UserStatus] = Field(
|
|
445
429
|
None,
|
|
446
430
|
description='Status that the user will have when created. '
|
|
@@ -471,7 +455,7 @@ class UserRequest(BaseModel):
|
|
|
471
455
|
'phone_number': '+525511223344',
|
|
472
456
|
'email_address': 'user@example.com',
|
|
473
457
|
'profession': 'engineer',
|
|
474
|
-
'address':
|
|
458
|
+
'address': Address.schema().get('example'),
|
|
475
459
|
}
|
|
476
460
|
},
|
|
477
461
|
)
|
|
@@ -502,7 +486,7 @@ class UserUpdateRequest(BaseModel):
|
|
|
502
486
|
verification_id: Optional[str] = None
|
|
503
487
|
email_verification_id: Optional[str] = None
|
|
504
488
|
phone_verification_id: Optional[str] = None
|
|
505
|
-
address: Optional[
|
|
489
|
+
address: Optional[Address] = None
|
|
506
490
|
beneficiaries: Optional[list[Beneficiary]] = None
|
|
507
491
|
govt_id: Optional[KYCFile] = None
|
|
508
492
|
proof_of_address: Optional[KYCFile] = None
|
|
@@ -726,7 +710,7 @@ class PartnerRequest(BaseRequest):
|
|
|
726
710
|
web_site: str
|
|
727
711
|
phone_number: PhoneNumber
|
|
728
712
|
email_address: EmailStr
|
|
729
|
-
address:
|
|
713
|
+
address: Address
|
|
730
714
|
|
|
731
715
|
|
|
732
716
|
class PartnerUpdateRequest(BaseRequest):
|
|
@@ -740,7 +724,7 @@ class PartnerUpdateRequest(BaseRequest):
|
|
|
740
724
|
web_site: Optional[str] = None
|
|
741
725
|
phone_number: Optional[PhoneNumber] = None
|
|
742
726
|
email_address: Optional[EmailStr] = None
|
|
743
|
-
address: Optional[
|
|
727
|
+
address: Optional[Address] = None
|
|
744
728
|
business_details: Optional[BusinessDetails] = None
|
|
745
729
|
transactional_profile: Optional[TransactionalProfile] = None
|
|
746
730
|
external_account: Optional[Clabe] = None
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.1.9.dev1'
|
|
@@ -10,6 +10,7 @@ from pydantic import AfterValidator, BaseModel, SecretStr, ValidationError
|
|
|
10
10
|
from pydantic.fields import FieldInfo
|
|
11
11
|
|
|
12
12
|
from cuenca_validations.types import (
|
|
13
|
+
Address,
|
|
13
14
|
CardQuery,
|
|
14
15
|
JSONEncoder,
|
|
15
16
|
QueryParams,
|
|
@@ -20,6 +21,7 @@ from cuenca_validations.types import (
|
|
|
20
21
|
get_state_name,
|
|
21
22
|
)
|
|
22
23
|
from cuenca_validations.types.enums import (
|
|
24
|
+
Country,
|
|
23
25
|
EcommerceIndicator,
|
|
24
26
|
SessionType,
|
|
25
27
|
State,
|
|
@@ -301,6 +303,27 @@ def test_saving_update_request():
|
|
|
301
303
|
SavingUpdateRequest(**data)
|
|
302
304
|
|
|
303
305
|
|
|
306
|
+
def test_address_validation():
|
|
307
|
+
data = dict(
|
|
308
|
+
full_name='Varsovia 36, Col Cuahutemoc',
|
|
309
|
+
)
|
|
310
|
+
assert Address(**data)
|
|
311
|
+
with pytest.raises(ValueError) as v:
|
|
312
|
+
Address(**dict())
|
|
313
|
+
assert 'required street' in str(v)
|
|
314
|
+
data = dict(street='somestreet')
|
|
315
|
+
with pytest.raises(ValueError) as v:
|
|
316
|
+
Address(**data)
|
|
317
|
+
assert 'required ext_number' in str(v)
|
|
318
|
+
data = dict(
|
|
319
|
+
street='varsovia',
|
|
320
|
+
ext_number='36',
|
|
321
|
+
state=State.DF,
|
|
322
|
+
country=Country.MX,
|
|
323
|
+
)
|
|
324
|
+
assert Address(**data)
|
|
325
|
+
|
|
326
|
+
|
|
304
327
|
@freeze_time('2022-01-01')
|
|
305
328
|
def test_user_request():
|
|
306
329
|
request = dict(
|
|
@@ -314,7 +337,12 @@ def test_user_request():
|
|
|
314
337
|
street='calle 1',
|
|
315
338
|
ext_number='2',
|
|
316
339
|
int_number='3',
|
|
317
|
-
|
|
340
|
+
colonia='Juarez',
|
|
341
|
+
postal_code='09900',
|
|
342
|
+
state=State.DF.value,
|
|
343
|
+
country=Country.MX,
|
|
344
|
+
city='Obrera',
|
|
345
|
+
full_name=None,
|
|
318
346
|
),
|
|
319
347
|
phone_verification_id='VE12345678',
|
|
320
348
|
email_verification_id='VE0987654321',
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '2.1.8.dev5'
|
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/__init__.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/card_bins.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/errors.py
RENAMED
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/card.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/enums.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/files.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/general.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/helpers.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/types/morals.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.dev1}/cuenca_validations/typing.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.8.dev5 → cuenca_validations-2.1.9.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
|