cuenca-validations 2.1.3.dev1__tar.gz → 2.1.4.dev0__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.3.dev1 → cuenca_validations-2.1.4.dev0}/PKG-INFO +1 -1
  2. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/enums.py +3 -0
  3. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/general.py +4 -0
  4. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/requests.py +22 -9
  5. cuenca_validations-2.1.4.dev0/cuenca_validations/version.py +1 -0
  6. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations.egg-info/PKG-INFO +1 -1
  7. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/tests/test_types.py +41 -3
  8. cuenca_validations-2.1.3.dev1/cuenca_validations/version.py +0 -1
  9. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/LICENSE +0 -0
  10. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/README.md +0 -0
  11. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/__init__.py +0 -0
  12. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/card_bins.py +0 -0
  13. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/errors.py +0 -0
  14. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/py.typed +0 -0
  15. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/__init__.py +0 -0
  16. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/card.py +0 -0
  17. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/files.py +0 -0
  18. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/helpers.py +0 -0
  19. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/identities.py +0 -0
  20. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/morals.py +0 -0
  21. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/types/queries.py +0 -0
  22. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/typing.py +0 -0
  23. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations/validators.py +0 -0
  24. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations.egg-info/SOURCES.txt +0 -0
  25. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations.egg-info/dependency_links.txt +0 -0
  26. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations.egg-info/requires.txt +0 -0
  27. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/cuenca_validations.egg-info/top_level.txt +0 -0
  28. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/setup.cfg +0 -0
  29. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/setup.py +0 -0
  30. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/tests/__init__.py +0 -0
  31. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/tests/test_card.py +0 -0
  32. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/tests/test_errors.py +0 -0
  33. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/tests/test_helpers.py +0 -0
  34. {cuenca_validations-2.1.3.dev1 → cuenca_validations-2.1.4.dev0}/tests/test_statement.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cuenca_validations
3
- Version: 2.1.3.dev1
3
+ Version: 2.1.4.dev0
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -249,6 +249,9 @@ class KYCFileType(str, Enum):
249
249
  curp = 'curp'
250
250
  signature = 'signature'
251
251
 
252
+ class KYCValidationType(str, Enum):
253
+ client_side = 'client_side'
254
+ background = 'background'
252
255
 
253
256
  class Gender(str, Enum):
254
257
  female = 'female'
@@ -22,6 +22,10 @@ SerializableIPvAnyAddress = Annotated[
22
22
  IPvAnyAddress, PlainSerializer(str, return_type=str)
23
23
  ]
24
24
 
25
+ NonEmptyStr = Annotated[
26
+ str, StringConstraints(strip_whitespace=True, min_length=1)
27
+ ]
28
+
25
29
 
26
30
  class SantizedDict(dict):
27
31
  def __init__(self, *args, **kwargs):
@@ -28,6 +28,7 @@ from ..types.enums import (
28
28
  Gender,
29
29
  IssuerNetwork,
30
30
  KYCFileType,
31
+ KYCValidationType,
31
32
  PlatformType,
32
33
  PosCapability,
33
34
  SavingCategory,
@@ -55,6 +56,7 @@ from .card import (
55
56
  )
56
57
  from .general import (
57
58
  LogConfig,
59
+ NonEmptyStr,
58
60
  SerializableAnyUrl,
59
61
  SerializableHttpUrl,
60
62
  SerializableIPvAnyAddress,
@@ -421,7 +423,7 @@ class UserRequest(BaseModel):
421
423
  description='Status that the user will have when created. '
422
424
  'Defined by platform',
423
425
  )
424
- required_level: Optional[Annotated[int, Field(ge=-1, le=4)]] = Field(
426
+ required_level: Optional[Annotated[int, Field(ge=-1, le=3)]] = Field(
425
427
  None,
426
428
  description='Maximum level a User can reach. ' 'Defined by platform',
427
429
  )
@@ -596,9 +598,6 @@ class LimitedWalletRequest(BaseRequest):
596
598
  allowed_rfc: Optional[Rfc] = None
597
599
 
598
600
 
599
- class KYCVerificationUpdateRequest(BaseRequest):
600
- curp: Curp
601
-
602
601
 
603
602
  class PlatformRequest(BaseModel):
604
603
  name: str
@@ -621,6 +620,7 @@ class WebhookRequest(BaseModel):
621
620
 
622
621
  class KYCValidationRequest(BaseRequest):
623
622
  user_id: str
623
+ validation_type: KYCValidationType
624
624
  force: bool = False
625
625
  documents: list[KYCFile] = []
626
626
 
@@ -635,19 +635,32 @@ class UserListsRequest(BaseModel):
635
635
  account_number: Optional[Union[Clabe, PaymentCardNumber]] = Field(
636
636
  None, description='Account to review on lists'
637
637
  )
638
- names: Optional[str] = Field(
638
+ names: Optional[NonEmptyStr] = Field(
639
639
  None, description='Names of the user to review on lists'
640
640
  )
641
- first_surname: Optional[str] = Field(
642
- None, description='first_surname of the user to review on lists'
641
+ first_surname: Optional[NonEmptyStr] = Field(
642
+ None, description='First surname of the user to review on lists'
643
643
  )
644
- second_surname: Optional[str] = Field(
645
- None, description='second_surname of the user to review on lists'
644
+ second_surname: Optional[NonEmptyStr] = Field(
645
+ None, description='Second surname of the user to review on lists'
646
646
  )
647
647
 
648
648
  @model_validator(mode='before')
649
649
  @classmethod
650
650
  def check_request(cls, values):
651
+ if (
652
+ values.get('first_surname') or values.get('second_surname')
653
+ ) and not values.get('names'):
654
+ raise ValueError(
655
+ 'names is required when first_surname or second_surname '
656
+ 'is provided'
657
+ )
658
+
659
+ if values.get('names') and not values.get('first_surname'):
660
+ raise ValueError(
661
+ 'first_surname is required when names is provided'
662
+ )
663
+
651
664
  has_name = all(values.get(f) for f in ['names', 'first_surname'])
652
665
  curp, account, rfc = (
653
666
  values.get('curp'),
@@ -0,0 +1 @@
1
+ __version__ = '2.1.4.dev0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cuenca_validations
3
- Version: 2.1.3.dev1
3
+ Version: 2.1.4.dev0
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -583,9 +583,47 @@ def test_user_lists_request_valid_params(input_data):
583
583
  UserListsRequest(**input_data)
584
584
 
585
585
 
586
- def test_user_lists_request_invalid_params():
587
- with pytest.raises(ValueError):
588
- UserListsRequest(first_surname='Paramo', second_surname='Paramo')
586
+ @pytest.mark.parametrize(
587
+ 'input_data,expected_error',
588
+ [
589
+ (
590
+ {'first_surname': 'Paramo'},
591
+ (
592
+ 'names is required when first_surname or second_surname '
593
+ 'is provided'
594
+ ),
595
+ ),
596
+ (
597
+ {'second_surname': 'Paramo'},
598
+ (
599
+ 'names is required when first_surname or second_surname '
600
+ 'is provided'
601
+ ),
602
+ ),
603
+ (
604
+ {'first_surname': 'Paramo', 'second_surname': 'Paramo'},
605
+ (
606
+ 'names is required when first_surname or second_surname '
607
+ 'is provided'
608
+ ),
609
+ ),
610
+ (
611
+ {'names': 'Juan'},
612
+ 'first_surname is required when names is provided',
613
+ ),
614
+ (
615
+ {'first_surname': 'Paramo', 'curp': 'GOCG650418HVZNML08'},
616
+ (
617
+ 'names is required when first_surname or second_surname '
618
+ 'is provided'
619
+ ),
620
+ ),
621
+ ({}, 'At least 1 param is required'),
622
+ ],
623
+ )
624
+ def test_user_lists_request_invalid_params(input_data, expected_error):
625
+ with pytest.raises(ValueError, match=expected_error):
626
+ UserListsRequest(**input_data)
589
627
 
590
628
 
591
629
  class IntModel(BaseModel):
@@ -1 +0,0 @@
1
- __version__ = '2.1.3.dev1'