cuenca-validations 2.0.4.dev2__tar.gz → 2.0.5.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.0.4.dev2 → cuenca_validations-2.0.5.dev2}/PKG-INFO +1 -1
  2. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/__init__.py +2 -0
  3. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/files.py +2 -2
  4. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/general.py +9 -6
  5. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/requests.py +7 -7
  6. cuenca_validations-2.0.5.dev2/cuenca_validations/version.py +1 -0
  7. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations.egg-info/PKG-INFO +1 -1
  8. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/tests/test_types.py +23 -1
  9. cuenca_validations-2.0.4.dev2/cuenca_validations/version.py +0 -1
  10. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/LICENSE +0 -0
  11. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/README.md +0 -0
  12. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/__init__.py +0 -0
  13. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/card_bins.py +0 -0
  14. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/errors.py +0 -0
  15. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/py.typed +0 -0
  16. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/card.py +0 -0
  17. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/enums.py +0 -0
  18. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/helpers.py +0 -0
  19. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/identities.py +0 -0
  20. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/morals.py +0 -0
  21. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/types/queries.py +0 -0
  22. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/typing.py +0 -0
  23. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations/validators.py +0 -0
  24. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations.egg-info/SOURCES.txt +0 -0
  25. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations.egg-info/dependency_links.txt +0 -0
  26. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations.egg-info/requires.txt +0 -0
  27. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/cuenca_validations.egg-info/top_level.txt +0 -0
  28. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/setup.cfg +0 -0
  29. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/setup.py +0 -0
  30. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/tests/__init__.py +0 -0
  31. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/tests/test_card.py +0 -0
  32. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/tests/test_errors.py +0 -0
  33. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/tests/test_helpers.py +0 -0
  34. {cuenca_validations-2.0.4.dev2 → cuenca_validations-2.0.5.dev2}/tests/test_statement.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cuenca_validations
3
- Version: 2.0.4.dev2
3
+ Version: 2.0.5.dev2
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -104,6 +104,7 @@ __all__ = [
104
104
  'digits',
105
105
  'get_state_name',
106
106
  'uuid_field',
107
+ 'Metadata',
107
108
  ]
108
109
 
109
110
  from .card import StrictPaymentCardNumber
@@ -152,6 +153,7 @@ from .enums import (
152
153
  from .files import BatchFileMetadata
153
154
  from .general import (
154
155
  JSONEncoder,
156
+ Metadata,
155
157
  SantizedDict,
156
158
  StrictPositiveInt,
157
159
  digits,
@@ -3,11 +3,11 @@ from typing import Optional
3
3
  from pydantic import BaseModel
4
4
 
5
5
  from .enums import KYCFileType
6
- from .general import HttpUrlString
6
+ from .general import SerializableHttpUrl
7
7
 
8
8
 
9
9
  class BatchFileMetadata(BaseModel):
10
10
  id: Optional[str] = None
11
11
  is_back: bool
12
12
  type: KYCFileType
13
- url: HttpUrlString
13
+ url: SerializableHttpUrl
@@ -1,4 +1,5 @@
1
1
  import json
2
+ from dataclasses import dataclass
2
3
  from typing import Annotated, Any, Optional
3
4
 
4
5
  from pydantic import AnyUrl, Field, HttpUrl, PlainSerializer, StringConstraints
@@ -6,13 +7,9 @@ from pydantic import AnyUrl, Field, HttpUrl, PlainSerializer, StringConstraints
6
7
  from ..validators import sanitize_dict, sanitize_item
7
8
  from .enums import State
8
9
 
9
- HttpUrlString = Annotated[
10
- HttpUrl, PlainSerializer(lambda x: x.unicode_string(), return_type=str)
11
- ]
10
+ SerializableHttpUrl = Annotated[HttpUrl, PlainSerializer(str, return_type=str)]
12
11
 
13
- AnyUrlString = Annotated[
14
- AnyUrl, PlainSerializer(lambda x: x.unicode_string(), return_type=str)
15
- ]
12
+ SerializableAnyUrl = Annotated[AnyUrl, PlainSerializer(str, return_type=str)]
16
13
 
17
14
 
18
15
  class SantizedDict(dict):
@@ -86,3 +83,9 @@ names_state = {
86
83
 
87
84
  def get_state_name(state: State):
88
85
  return names_state[state]
86
+
87
+
88
+ @dataclass
89
+ class Metadata:
90
+ sensitive: bool
91
+ log_chars: int = 0
@@ -54,7 +54,7 @@ from .card import (
54
54
  PaymentCardNumber,
55
55
  StrictPaymentCardNumber,
56
56
  )
57
- from .general import AnyUrlString, HttpUrlString, StrictPositiveInt
57
+ from .general import SerializableAnyUrl, SerializableHttpUrl, StrictPositiveInt
58
58
  from .identities import (
59
59
  Address,
60
60
  Beneficiary,
@@ -477,7 +477,7 @@ class UserUpdateRequest(BaseModel):
477
477
  status: Optional[UserStatus] = None
478
478
  terms_of_service: Optional[TOSRequest] = None
479
479
  platform_terms_of_service: Optional[TOSAgreement] = None
480
- curp_document_uri: Optional[HttpUrlString] = None
480
+ curp_document_uri: Optional[SerializableHttpUrl] = None
481
481
 
482
482
  @field_validator('beneficiaries')
483
483
  @classmethod
@@ -500,8 +500,8 @@ class UserLoginRequest(BaseRequest):
500
500
  class SessionRequest(BaseRequest):
501
501
  user_id: str
502
502
  type: SessionType
503
- success_url: Optional[AnyUrlString] = None
504
- failure_url: Optional[AnyUrlString] = None
503
+ success_url: Optional[SerializableAnyUrl] = None
504
+ failure_url: Optional[SerializableAnyUrl] = None
505
505
  model_config = ConfigDict(
506
506
  json_schema_extra={
507
507
  'example': {
@@ -515,13 +515,13 @@ class SessionRequest(BaseRequest):
515
515
 
516
516
 
517
517
  class EndpointRequest(BaseRequest):
518
- url: HttpUrlString
518
+ url: SerializableHttpUrl
519
519
  events: Optional[list[WebhookEvent]] = None
520
520
  user_id: Optional[str] = None
521
521
 
522
522
 
523
523
  class EndpointUpdateRequest(BaseRequest):
524
- url: Optional[HttpUrlString] = None
524
+ url: Optional[SerializableHttpUrl] = None
525
525
  is_enable: Optional[bool] = None
526
526
  events: Optional[list[WebhookEvent]] = None
527
527
 
@@ -536,7 +536,7 @@ class FileUploadRequest(BaseRequest):
536
536
 
537
537
  class FileRequest(BaseModel):
538
538
  is_back: Optional[bool] = False
539
- url: HttpUrlString
539
+ url: SerializableHttpUrl
540
540
  type: KYCFileType
541
541
 
542
542
 
@@ -0,0 +1 @@
1
+ __version__ = '2.0.5.dev2'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cuenca_validations
3
- Version: 2.0.4.dev2
3
+ Version: 2.0.5.dev2
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -2,6 +2,7 @@ import datetime as dt
2
2
  import json
3
3
  from dataclasses import dataclass
4
4
  from enum import Enum
5
+ from typing import Annotated
5
6
 
6
7
  import pytest
7
8
  from freezegun import freeze_time
@@ -24,7 +25,7 @@ from cuenca_validations.types.enums import (
24
25
  SessionType,
25
26
  State,
26
27
  )
27
- from cuenca_validations.types.general import StrictPositiveInt
28
+ from cuenca_validations.types.general import Metadata, StrictPositiveInt
28
29
  from cuenca_validations.types.requests import (
29
30
  ApiKeyUpdateRequest,
30
31
  BankAccountValidationRequest,
@@ -586,3 +587,24 @@ class IntModel(BaseModel):
586
587
  def test_strict_positive_int_invalid(value, expected_error, expected_message):
587
588
  with pytest.raises(expected_error, match=expected_message):
588
589
  IntModel(value=value)
590
+
591
+
592
+ class MetadataModel(BaseModel):
593
+ secret: Annotated[str, Metadata(sensitive=True)]
594
+ partial_secret: Annotated[str, Metadata(sensitive=True, log_chars=4)]
595
+
596
+
597
+ def test_metadata():
598
+ model = MetadataModel(secret="super-secret", partial_secret="1234567890")
599
+
600
+ secret_field = MetadataModel.model_fields["secret"]
601
+ partial_field = MetadataModel.model_fields["partial_secret"]
602
+
603
+ assert secret_field.metadata[0].sensitive is True
604
+ assert secret_field.metadata[0].log_chars == 0
605
+
606
+ assert partial_field.metadata[0].sensitive is True
607
+ assert partial_field.metadata[0].log_chars == 4
608
+
609
+ assert model.secret == "super-secret"
610
+ assert model.partial_secret == "1234567890"
@@ -1 +0,0 @@
1
- __version__ = '2.0.4.dev02'