cuenca-validations 2.1.9.dev1__tar.gz → 2.1.9.dev2__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 (34) hide show
  1. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/PKG-INFO +1 -1
  2. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/__init__.py +4 -0
  3. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/enums.py +16 -0
  4. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/identities.py +29 -21
  5. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/morals.py +3 -2
  6. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/queries.py +13 -0
  7. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/requests.py +23 -50
  8. cuenca_validations-2.1.9.dev2/cuenca_validations/version.py +1 -0
  9. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations.egg-info/PKG-INFO +1 -1
  10. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/tests/test_types.py +33 -51
  11. cuenca_validations-2.1.9.dev1/cuenca_validations/version.py +0 -1
  12. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/LICENSE +0 -0
  13. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/README.md +0 -0
  14. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/__init__.py +0 -0
  15. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/card_bins.py +0 -0
  16. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/errors.py +0 -0
  17. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/py.typed +0 -0
  18. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/card.py +0 -0
  19. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/files.py +0 -0
  20. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/general.py +0 -0
  21. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/types/helpers.py +0 -0
  22. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/typing.py +0 -0
  23. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations/validators.py +0 -0
  24. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations.egg-info/SOURCES.txt +0 -0
  25. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations.egg-info/dependency_links.txt +0 -0
  26. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations.egg-info/requires.txt +0 -0
  27. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/cuenca_validations.egg-info/top_level.txt +0 -0
  28. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/setup.cfg +0 -0
  29. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/setup.py +0 -0
  30. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/tests/__init__.py +0 -0
  31. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/tests/test_card.py +0 -0
  32. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/tests/test_errors.py +0 -0
  33. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/tests/test_helpers.py +0 -0
  34. {cuenca_validations-2.1.9.dev1 → cuenca_validations-2.1.9.dev2}/tests/test_statement.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca_validations
3
- Version: 2.1.9.dev1
3
+ Version: 2.1.9.dev2
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -7,6 +7,7 @@ __all__ = [
7
7
  'BalanceEntryQuery',
8
8
  'BankAccountValidationQuery',
9
9
  'BankAccountValidationRequest',
10
+ 'PostalCodeQuery',
10
11
  'BankAccountStatus',
11
12
  'BatchFileMetadata',
12
13
  'Beneficiary',
@@ -55,6 +56,7 @@ __all__ = [
55
56
  'PlatformRequest',
56
57
  'PlatformType',
57
58
  'PosCapability',
59
+ 'Profession',
58
60
  'QueryParams',
59
61
  'Rfc',
60
62
  'QuestionnairesRequest',
@@ -134,6 +136,7 @@ from .enums import (
134
136
  Language,
135
137
  PlatformType,
136
138
  PosCapability,
139
+ Profession,
137
140
  SATRegimeCode,
138
141
  SavingCategory,
139
142
  ServiceProviderCategory,
@@ -183,6 +186,7 @@ from .queries import (
183
186
  EventQuery,
184
187
  FileQuery,
185
188
  IdentityQuery,
189
+ PostalCodeQuery,
186
190
  QueryParams,
187
191
  SessionQuery,
188
192
  StatementQuery,
@@ -688,3 +688,19 @@ class SATRegimeCode(str, Enum):
688
688
  ING_PREM = "615" # Régimen de los ingresos por obtención de premios
689
689
  AE_PLAT_TEC = "625" # Régimen de las Actividades Empresariales con ingresos a través de Plataformas Tecnológicas # noqa: E501
690
690
  RS_CONF = "626" # Régimen Simplificado de Confianza
691
+
692
+
693
+ class Profession(str, Enum):
694
+ artisticas = 'Actividades Artísticas'
695
+ agropecuario = 'Agricultura, Ganadería o Pesca'
696
+ comercio = 'Comercio'
697
+ estudiante = 'Estudiante'
698
+ empleado = 'Empleado(a/e)'
699
+ emprendimiento = 'Emprendimiento'
700
+ hogar = 'Hogar'
701
+ profesor = 'Profesor(a/e)'
702
+ profesionista = 'Profesionista'
703
+ servidor_publico = 'Servidor(a/e) Público'
704
+ sistemas = 'Sistemas y Comunicaciones'
705
+ independiente = 'Trabajador(a/e) Independiente'
706
+ oficios = 'Oficios Varios'
@@ -1,18 +1,11 @@
1
1
  import datetime as dt
2
- from typing import Annotated, Any, Optional
2
+ from typing import Annotated, Optional
3
3
 
4
- from pydantic import (
5
- BaseModel,
6
- ConfigDict,
7
- Field,
8
- SecretStr,
9
- StringConstraints,
10
- model_validator,
11
- )
4
+ from pydantic import BaseModel, ConfigDict, Field, SecretStr, StringConstraints
12
5
  from pydantic_extra_types.phone_numbers import PhoneNumber
13
6
 
14
7
  from .enums import Country, KYCFileType, State, VerificationStatus
15
- from .general import SerializableIPvAnyAddress
8
+ from .general import NonEmptyStr, SerializableIPvAnyAddress
16
9
 
17
10
  Password = Annotated[
18
11
  SecretStr,
@@ -43,6 +36,13 @@ Rfc = Annotated[
43
36
  ),
44
37
  ]
45
38
 
39
+ # NOTE:
40
+ # The Address model is kept for compatibility with legacy models and data
41
+ # that expect all address fields to be optional. This allows older systems
42
+ # or stored data using Address to continue working without breaking changes.
43
+ # For new request validation, use AddressRequest, which enforces required
44
+ # fields and is intended for validating incoming data.
45
+
46
46
 
47
47
  class Address(BaseModel):
48
48
  street: Optional[str] = None
@@ -69,16 +69,24 @@ class Address(BaseModel):
69
69
  }
70
70
  )
71
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
72
+
73
+ class AddressRequest(BaseModel):
74
+ # This model is mainly for request validation, enforcing required fields.
75
+ street: NonEmptyStr
76
+ ext_number: NonEmptyStr
77
+ int_number: Optional[NonEmptyStr] = None
78
+ postal_code_id: NonEmptyStr
79
+
80
+ model_config = ConfigDict(
81
+ json_schema_extra={
82
+ "example": {
83
+ "street": "Reforma",
84
+ "ext_number": "265",
85
+ "int_number": "5",
86
+ "postal_code_id": "PC2ygq9j2bS9-9tsuVawzErA",
87
+ }
88
+ }
89
+ )
82
90
 
83
91
 
84
92
  class Beneficiary(BaseModel):
@@ -86,7 +94,7 @@ class Beneficiary(BaseModel):
86
94
  birth_date: dt.date
87
95
  phone_number: PhoneNumber
88
96
  user_relationship: str
89
- percentage: int
97
+ percentage: Annotated[int, Field(ge=1, le=100)]
90
98
  model_config = ConfigDict(
91
99
  json_schema_extra={
92
100
  "example": {
@@ -3,7 +3,8 @@ from typing import Optional
3
3
 
4
4
  from pydantic import BaseModel, EmailStr
5
5
 
6
- from cuenca_validations.types import Address, Curp, PhoneNumber, Rfc
6
+ from ..types import Curp, PhoneNumber, Rfc
7
+ from .identities import AddressRequest
7
8
 
8
9
 
9
10
  class BusinessDetails(BaseModel):
@@ -60,7 +61,7 @@ class LegalRepresentative(PhysicalPerson):
60
61
  job: str
61
62
  phone_number: PhoneNumber
62
63
  email_address: EmailStr
63
- address: Address
64
+ address: AddressRequest
64
65
 
65
66
 
66
67
  class ShareholderPhysical(PhysicalPerson):
@@ -7,6 +7,7 @@ from pydantic import (
7
7
  EmailStr,
8
8
  Field,
9
9
  PositiveInt,
10
+ StringConstraints,
10
11
  field_validator,
11
12
  )
12
13
 
@@ -179,3 +180,15 @@ class FileQuery(QueryParams):
179
180
  class BankAccountValidationQuery(QueryParams):
180
181
  account_number: Optional[str] = None
181
182
  status: Optional[BankAccountStatus] = None
183
+
184
+
185
+ class PostalCodeQuery(QueryParams):
186
+ postal_code: Annotated[
187
+ str,
188
+ StringConstraints(
189
+ strip_whitespace=True,
190
+ min_length=5,
191
+ max_length=5,
192
+ pattern=r'^\d+$',
193
+ ),
194
+ ]
@@ -32,6 +32,7 @@ from ..types.enums import (
32
32
  KYCValidationSource,
33
33
  PlatformType,
34
34
  PosCapability,
35
+ Profession,
35
36
  SavingCategory,
36
37
  SessionType,
37
38
  State,
@@ -39,7 +40,6 @@ from ..types.enums import (
39
40
  TrackDataMethod,
40
41
  TransactionTokenValidationStatus,
41
42
  UserCardNotification,
42
- UserStatus,
43
43
  VerificationType,
44
44
  WalletTransactionType,
45
45
  WebhookEvent,
@@ -64,14 +64,13 @@ from .general import (
64
64
  StrictPositiveInt,
65
65
  )
66
66
  from .identities import (
67
- Address,
67
+ AddressRequest,
68
68
  Beneficiary,
69
69
  Curp,
70
70
  KYCFile,
71
71
  Password,
72
72
  PhoneNumber,
73
73
  Rfc,
74
- TOSAgreement,
75
74
  )
76
75
  from .morals import (
77
76
  AuditDetails,
@@ -407,47 +406,28 @@ class TOSRequest(BaseModel):
407
406
  class UserTOSAgreementRequest(BaseModel):
408
407
  tos_id: str
409
408
  location: Coordinate
410
- signature: SerializableHttpUrl | None = None
411
409
 
412
410
 
413
411
  class UserRequest(BaseModel):
414
- id: Optional[str] = Field(
415
- None, description='if you want to create with specific `id`'
416
- )
417
412
  curp: Curp = Field(
418
- description='Previously validated in `curp_validations`'
419
- )
420
- phone_number: Optional[PhoneNumber] = Field(
421
- None, description='Only if you validated previously on your side'
422
- )
423
- email_address: Optional[EmailStr] = Field(
424
- None, description='Only if you validated previously on your side'
425
- )
426
- profession: Optional[str] = None
427
- address: Optional[Address] = None
428
- status: Optional[UserStatus] = Field(
429
- None,
430
- description='Status that the user will have when created. '
431
- 'Defined by platform',
413
+ description=(
414
+ 'Mexican government ID (18 characters). ' 'Must be pre-validated.'
415
+ )
432
416
  )
433
- required_level: Optional[int] = Field(
434
- None,
435
- ge=1,
436
- le=3,
437
- description='Maximum level a User can reach. Defined by platform',
417
+
418
+ profession: Profession = Field(description='User profession or occupation')
419
+ address: AddressRequest = Field(
420
+ description='User residential address information'
438
421
  )
439
- phone_verification_id: Optional[str] = Field(
440
- None,
441
- description='Only if you validated it previously with the '
442
- 'resource `verifications`',
422
+ phone_verification_id: str = Field(
423
+ ...,
424
+ description='ID of previously validated phone verification',
443
425
  )
444
- email_verification_id: Optional[str] = Field(
445
- None,
446
- description='Only if you validated it previously with the '
447
- 'resource `verifications`',
426
+ email_verification_id: str = Field(
427
+ ...,
428
+ description='ID of previously validated email verification',
448
429
  )
449
- terms_of_service: Optional[TOSRequest] = None
450
- signature: Optional[KYCFile] = None
430
+
451
431
  model_config = ConfigDict(
452
432
  json_schema_extra={
453
433
  'example': {
@@ -455,7 +435,7 @@ class UserRequest(BaseModel):
455
435
  'phone_number': '+525511223344',
456
436
  'email_address': 'user@example.com',
457
437
  'profession': 'engineer',
458
- 'address': Address.schema().get('example'),
438
+ 'address': AddressRequest.model_json_schema().get('example'),
459
439
  }
460
440
  },
461
441
  )
@@ -480,21 +460,16 @@ class UserRequest(BaseModel):
480
460
 
481
461
 
482
462
  class UserUpdateRequest(BaseModel):
483
- phone_number: Optional[PhoneNumber] = None
484
- email_address: Optional[EmailStr] = None
485
- profession: Optional[str] = None
463
+ profession: Optional[Profession] = None
486
464
  verification_id: Optional[str] = None
487
465
  email_verification_id: Optional[str] = None
488
466
  phone_verification_id: Optional[str] = None
489
- address: Optional[Address] = None
467
+ address: Optional[AddressRequest] = None
490
468
  beneficiaries: Optional[list[Beneficiary]] = None
491
469
  govt_id: Optional[KYCFile] = None
492
470
  proof_of_address: Optional[KYCFile] = None
493
471
  proof_of_life: Optional[KYCFile] = None
494
472
  signature: Optional[KYCFile] = None
495
- status: Optional[UserStatus] = None
496
- terms_of_service: Optional[TOSRequest] = None
497
- platform_terms_of_service: Optional[TOSAgreement] = None
498
473
  curp_document_uri: Optional[SerializableHttpUrl] = None
499
474
 
500
475
  @field_validator('beneficiaries')
@@ -502,8 +477,8 @@ class UserUpdateRequest(BaseModel):
502
477
  def beneficiary_percentage(
503
478
  cls, beneficiaries: Optional[list[Beneficiary]] = None
504
479
  ):
505
- if beneficiaries and sum(b.percentage for b in beneficiaries) > 100:
506
- raise ValueError('The total percentage is more than 100.')
480
+ if beneficiaries and sum(b.percentage for b in beneficiaries) != 100:
481
+ raise ValueError('The total percentage should be 100%')
507
482
  return beneficiaries
508
483
 
509
484
 
@@ -570,14 +545,12 @@ class VerificationRequest(BaseModel):
570
545
  recipient: Union[EmailStr, PhoneNumber] = Field(
571
546
  description='Phone or email to validate'
572
547
  )
573
- platform_id: str
574
548
  model_config = ConfigDict(
575
549
  str_strip_whitespace=True,
576
550
  json_schema_extra={
577
551
  'example': {
578
552
  'type': 'email',
579
553
  'recipient': 'user@example.com',
580
- 'platform_id': 'PT8UEv02zBTcymd4Kd3MO6pg',
581
554
  }
582
555
  },
583
556
  )
@@ -710,7 +683,7 @@ class PartnerRequest(BaseRequest):
710
683
  web_site: str
711
684
  phone_number: PhoneNumber
712
685
  email_address: EmailStr
713
- address: Address
686
+ address: AddressRequest
714
687
 
715
688
 
716
689
  class PartnerUpdateRequest(BaseRequest):
@@ -724,7 +697,7 @@ class PartnerUpdateRequest(BaseRequest):
724
697
  web_site: Optional[str] = None
725
698
  phone_number: Optional[PhoneNumber] = None
726
699
  email_address: Optional[EmailStr] = None
727
- address: Optional[Address] = None
700
+ address: Optional[AddressRequest] = None
728
701
  business_details: Optional[BusinessDetails] = None
729
702
  transactional_profile: Optional[TransactionalProfile] = None
730
703
  external_account: Optional[Clabe] = None
@@ -0,0 +1 @@
1
+ __version__ = '2.1.9.dev2'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca_validations
3
- Version: 2.1.9.dev1
3
+ Version: 2.1.9.dev2
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -10,7 +10,6 @@ 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,
14
13
  CardQuery,
15
14
  JSONEncoder,
16
15
  QueryParams,
@@ -21,8 +20,8 @@ from cuenca_validations.types import (
21
20
  get_state_name,
22
21
  )
23
22
  from cuenca_validations.types.enums import (
24
- Country,
25
23
  EcommerceIndicator,
24
+ Profession,
26
25
  SessionType,
27
26
  State,
28
27
  )
@@ -303,60 +302,42 @@ def test_saving_update_request():
303
302
  SavingUpdateRequest(**data)
304
303
 
305
304
 
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,
305
+ @freeze_time('2022-01-01')
306
+ def test_user_request():
307
+ request = dict(
308
+ curp='ABCD920604HDFSRN03',
309
+ profession=Profession.empleado,
310
+ address=dict(
311
+ street='calle 1',
312
+ ext_number='2',
313
+ int_number='3',
314
+ postal_code_id='PC2ygq9j2bS9-9tsuVawzErA',
315
+ ),
316
+ phone_verification_id='VE12345678',
317
+ email_verification_id='VE0987654321',
323
318
  )
324
- assert Address(**data)
319
+ assert UserRequest(**request).model_dump() == request
325
320
 
326
321
 
327
322
  @freeze_time('2022-01-01')
328
- def test_user_request():
323
+ def test_user_request_underage():
329
324
  request = dict(
330
- id=None,
331
- curp='ABCD920604HDFSRN03',
332
- phone_number='+525555555555',
333
- email_address='email@email.com',
325
+ curp='ABCD060604HDFSRN03', # underage CURP
334
326
  profession='worker',
335
- status='active',
336
327
  address=dict(
337
328
  street='calle 1',
338
329
  ext_number='2',
339
330
  int_number='3',
340
- colonia='Juarez',
341
- postal_code='09900',
342
- state=State.DF.value,
343
- country=Country.MX,
344
- city='Obrera',
345
- full_name=None,
331
+ postal_code_id='PC2ygq9j2bS9-9tsuVawzErA',
346
332
  ),
347
333
  phone_verification_id='VE12345678',
348
334
  email_verification_id='VE0987654321',
349
- required_level=3,
350
- terms_of_service=None,
351
- signature=None,
352
335
  )
353
- assert UserRequest(**request).model_dump() == request
354
336
 
355
- # changing curp so user is underage
356
- request['curp'] = 'ABCD060604HDFSRN03'
357
337
  with pytest.raises(ValueError) as v:
358
338
  UserRequest(**request)
359
- assert 'User does not meet age requirement.' in str(v)
339
+
340
+ assert 'User does not meet age requirement.' in str(v)
360
341
 
361
342
 
362
343
  @freeze_time('2022-01-01')
@@ -438,7 +419,7 @@ def test_user_update_request():
438
419
  birth_date=dt.date(2020, 1, 1).isoformat(),
439
420
  phone_number='+525555555555',
440
421
  user_relationship='brother',
441
- percentage=50,
422
+ percentage=100,
442
423
  ),
443
424
  ]
444
425
  assert UserUpdateRequest(**request)
@@ -449,12 +430,21 @@ def test_user_update_request():
449
430
  birth_date=dt.date(2020, 1, 1).isoformat(),
450
431
  phone_number='+525555555555',
451
432
  user_relationship='brother',
452
- percentage=101,
433
+ percentage=50,
434
+ ),
435
+ dict(
436
+ name='José Pérez',
437
+ birth_date=dt.date(2020, 1, 2).isoformat(),
438
+ phone_number='+525544444444',
439
+ user_relationship='brother',
440
+ percentage=51,
453
441
  ),
454
442
  ]
455
- with pytest.raises(ValueError) as v:
443
+ with pytest.raises(ValidationError) as v:
456
444
  UserUpdateRequest(**request)
457
- assert 'The total percentage is more than 100.' in str(v)
445
+
446
+ assert 'The total percentage should be 100%' in str(v)
447
+ request.pop('beneficiaries')
458
448
 
459
449
  tos_request = dict(
460
450
  terms_of_service=dict(
@@ -485,12 +475,6 @@ def test_user_update_request():
485
475
  )
486
476
  UserUpdateRequest(**kyc_request)
487
477
 
488
- # chagning to invalid request
489
- tos_request['terms_of_service']['ip'] = 'not valid ip'
490
- with pytest.raises(ValueError) as v:
491
- UserUpdateRequest(**tos_request)
492
- assert 'not valid ip' in str(v.value)
493
-
494
478
 
495
479
  def test_session_request():
496
480
  data = dict(
@@ -522,7 +506,6 @@ def test_email_verification_request():
522
506
  data = dict(
523
507
  recipient='mail@cuenca.com',
524
508
  type='email_verification',
525
- platform_id='PL01',
526
509
  )
527
510
  with pytest.raises(ValidationError):
528
511
  VerificationRequest(**data)
@@ -534,7 +517,6 @@ def test_phone_verification_request():
534
517
  data = dict(
535
518
  recipient='+525555555555',
536
519
  type='phone_verification',
537
- platform_id='PL01',
538
520
  )
539
521
  with pytest.raises(ValidationError):
540
522
  VerificationRequest(**data)
@@ -1 +0,0 @@
1
- __version__ = '2.1.9.dev1'