cuenca-validations 2.1.36.dev0__py3-none-any.whl → 2.1.36.dev2__py3-none-any.whl
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/types/__init__.py +2 -6
- cuenca_validations/types/enums.py +0 -8
- cuenca_validations/types/requests.py +15 -12
- cuenca_validations/version.py +1 -1
- {cuenca_validations-2.1.36.dev0.dist-info → cuenca_validations-2.1.36.dev2.dist-info}/METADATA +1 -1
- {cuenca_validations-2.1.36.dev0.dist-info → cuenca_validations-2.1.36.dev2.dist-info}/RECORD +11 -11
- tests/test_requests.py +29 -0
- tests/test_types.py +1 -26
- {cuenca_validations-2.1.36.dev0.dist-info → cuenca_validations-2.1.36.dev2.dist-info}/WHEEL +0 -0
- {cuenca_validations-2.1.36.dev0.dist-info → cuenca_validations-2.1.36.dev2.dist-info}/licenses/LICENSE +0 -0
- {cuenca_validations-2.1.36.dev0.dist-info → cuenca_validations-2.1.36.dev2.dist-info}/top_level.txt +0 -0
|
@@ -44,10 +44,7 @@ __all__ = [
|
|
|
44
44
|
'FileBatchUploadRequest',
|
|
45
45
|
'FileRequest',
|
|
46
46
|
'FileUploadRequest',
|
|
47
|
-
'FraudFundsTransferErrorResponse',
|
|
48
|
-
'FraudFundsTransferReasonCode',
|
|
49
47
|
'FraudFundsTransferRequest',
|
|
50
|
-
'FraudFundsTransferSuccessResponse',
|
|
51
48
|
'Gender',
|
|
52
49
|
'IncomeType',
|
|
53
50
|
'IssuerNetwork',
|
|
@@ -95,6 +92,7 @@ __all__ = [
|
|
|
95
92
|
'TransferNetwork',
|
|
96
93
|
'TransferQuery',
|
|
97
94
|
'TransferRequest',
|
|
95
|
+
'UpdateTransferRequest',
|
|
98
96
|
'UserCardNotification',
|
|
99
97
|
'UserCredentialRequest',
|
|
100
98
|
'UserCredentialUpdateRequest',
|
|
@@ -147,7 +145,6 @@ from .enums import (
|
|
|
147
145
|
EventType,
|
|
148
146
|
FileExtension,
|
|
149
147
|
FileFormat,
|
|
150
|
-
FraudFundsTransferReasonCode,
|
|
151
148
|
Gender,
|
|
152
149
|
IncomeType,
|
|
153
150
|
IssuerNetwork,
|
|
@@ -235,9 +232,7 @@ from .requests import (
|
|
|
235
232
|
FileBatchUploadRequest,
|
|
236
233
|
FileRequest,
|
|
237
234
|
FileUploadRequest,
|
|
238
|
-
FraudFundsTransferErrorResponse,
|
|
239
235
|
FraudFundsTransferRequest,
|
|
240
|
-
FraudFundsTransferSuccessResponse,
|
|
241
236
|
KYCValidationRequest,
|
|
242
237
|
LimitedWalletRequest,
|
|
243
238
|
PartnerRequest,
|
|
@@ -251,6 +246,7 @@ from .requests import (
|
|
|
251
246
|
StrictTransferRequest,
|
|
252
247
|
TOSRequest,
|
|
253
248
|
TransferRequest,
|
|
249
|
+
UpdateTransferRequest,
|
|
254
250
|
UserCredentialRequest,
|
|
255
251
|
UserCredentialUpdateRequest,
|
|
256
252
|
UserListsRequest,
|
|
@@ -79,14 +79,6 @@ class TransactionStatus(str, Enum):
|
|
|
79
79
|
failed = 'failed'
|
|
80
80
|
|
|
81
81
|
|
|
82
|
-
class FraudFundsTransferReasonCode(str, Enum):
|
|
83
|
-
user_not_found = 'USER_NOT_FOUND'
|
|
84
|
-
user_not_fraud_blocked = 'USER_NOT_FRAUD_BLOCKED'
|
|
85
|
-
insufficient_funds = 'INSUFFICIENT_FUNDS'
|
|
86
|
-
clabe_invalid = 'CLABE_INVALID'
|
|
87
|
-
internal_error = 'INTERNAL_ERROR'
|
|
88
|
-
|
|
89
|
-
|
|
90
82
|
class TransferNetwork(str, Enum):
|
|
91
83
|
internal = 'internal'
|
|
92
84
|
spei = 'spei'
|
|
@@ -29,7 +29,6 @@ from ..types.enums import (
|
|
|
29
29
|
Country,
|
|
30
30
|
EcommerceIndicator,
|
|
31
31
|
FileExtension,
|
|
32
|
-
FraudFundsTransferReasonCode,
|
|
33
32
|
Gender,
|
|
34
33
|
IncomeType,
|
|
35
34
|
IssuerNetwork,
|
|
@@ -46,6 +45,7 @@ from ..types.enums import (
|
|
|
46
45
|
State,
|
|
47
46
|
TermsOfService,
|
|
48
47
|
TrackDataMethod,
|
|
48
|
+
TransactionStatus,
|
|
49
49
|
TransactionTokenValidationStatus,
|
|
50
50
|
UserCardNotification,
|
|
51
51
|
UserStatus,
|
|
@@ -155,6 +155,20 @@ class StrictTransferRequest(BaseTransferRequest):
|
|
|
155
155
|
)
|
|
156
156
|
|
|
157
157
|
|
|
158
|
+
class UpdateTransferRequest(BaseRequest):
|
|
159
|
+
status: TransactionStatus
|
|
160
|
+
|
|
161
|
+
@field_validator('status')
|
|
162
|
+
@classmethod
|
|
163
|
+
def validate_status(cls, status: TransactionStatus) -> TransactionStatus:
|
|
164
|
+
if status not in (
|
|
165
|
+
TransactionStatus.succeeded,
|
|
166
|
+
TransactionStatus.failed,
|
|
167
|
+
):
|
|
168
|
+
raise ValueError('status must be succeeded or failed')
|
|
169
|
+
return status
|
|
170
|
+
|
|
171
|
+
|
|
158
172
|
class CardUpdateRequest(BaseRequest):
|
|
159
173
|
status: Optional[CardStatus] = None
|
|
160
174
|
pin_block: Optional[str] = None
|
|
@@ -318,17 +332,6 @@ class FraudFundsTransferRequest(BaseRequest):
|
|
|
318
332
|
concepto: Optional[NonEmptyStr] = None
|
|
319
333
|
|
|
320
334
|
|
|
321
|
-
class FraudFundsTransferSuccessResponse(BaseRequest):
|
|
322
|
-
transaction_id: NonEmptyStr
|
|
323
|
-
amount: StrictPositiveInt
|
|
324
|
-
clave_rastreo: NonEmptyStr
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
class FraudFundsTransferErrorResponse(BaseRequest):
|
|
328
|
-
reason_code: FraudFundsTransferReasonCode
|
|
329
|
-
message: NonEmptyStr
|
|
330
|
-
|
|
331
|
-
|
|
332
335
|
class FraudValidationRequest(BaseModel):
|
|
333
336
|
amount: StrictPositiveInt
|
|
334
337
|
merchant_name: str
|
cuenca_validations/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '2.1.36.
|
|
1
|
+
__version__ = '2.1.36.dev2'
|
{cuenca_validations-2.1.36.dev0.dist-info → cuenca_validations-2.1.36.dev2.dist-info}/RECORD
RENAMED
|
@@ -4,27 +4,27 @@ cuenca_validations/errors.py,sha256=OtM8EgiKqYdz9Hn66AbBO96orL1or7efkyt0vh0Zxbs,
|
|
|
4
4
|
cuenca_validations/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
cuenca_validations/typing.py,sha256=1QCu81IbVZZpyInjyeAuO-nF36gpT5Gi4o6V9PozuOU,204
|
|
6
6
|
cuenca_validations/validators.py,sha256=zXSnU5-EMbQZBD-PfFXgP4Z6G7cm7KFDWXB7Nie6WUk,2682
|
|
7
|
-
cuenca_validations/version.py,sha256=
|
|
8
|
-
cuenca_validations/types/__init__.py,sha256=
|
|
7
|
+
cuenca_validations/version.py,sha256=WIz7YMhSrFreIschm55z4lJEJeEAUIUXVml8_PIbVck,28
|
|
8
|
+
cuenca_validations/types/__init__.py,sha256=BZNEJKcQ6dlIVtOWrU-7hAFs9j_-Qi5V_VuG9FLjz3w,5639
|
|
9
9
|
cuenca_validations/types/card.py,sha256=UGzz8NTFAverUmdUKAK1oGHnOnjSNTpIRUm93vKSSGY,1295
|
|
10
|
-
cuenca_validations/types/enums.py,sha256=
|
|
10
|
+
cuenca_validations/types/enums.py,sha256=f-qMUdxLZsAqRvEwh3EcUsB2K-loufvPzdcK0JFQ1JY,20586
|
|
11
11
|
cuenca_validations/types/files.py,sha256=2CszbwF9ytXV9suFFwyDjYG4XxY8UhCjRw3HttVXXNw,269
|
|
12
12
|
cuenca_validations/types/general.py,sha256=eYFYwyx_a4_J480GYpqW3DFbZabDFcUjvLRMQbShIUc,5622
|
|
13
13
|
cuenca_validations/types/helpers.py,sha256=4veeLZbugHHqZk0ezSim978VhH6Vq8XTrEhe1eE_r3A,1531
|
|
14
14
|
cuenca_validations/types/identities.py,sha256=j2xxh3UYHJe6IbAwr9yNXJkebTth_-g3SUmHeiPez8M,5513
|
|
15
15
|
cuenca_validations/types/morals.py,sha256=davabh5hAnFVQyM7-yCyDaT5ewXnm0cr1BtqDIwzkX8,1833
|
|
16
16
|
cuenca_validations/types/queries.py,sha256=iVr6Z8ahXon0rlqQLu7aqRY6WtRxkN-1C7A2zeVt2-4,5314
|
|
17
|
-
cuenca_validations/types/requests.py,sha256
|
|
18
|
-
cuenca_validations-2.1.36.
|
|
17
|
+
cuenca_validations/types/requests.py,sha256=hGEwecuBv6e5dWODcuhMC-LiKAxQaOnWUyPvkIrYMwg,24666
|
|
18
|
+
cuenca_validations-2.1.36.dev2.dist-info/licenses/LICENSE,sha256=wR76FmxBbfnQpwELkkE5iMF8sFIafEMgXLTE4N4WPTc,1063
|
|
19
19
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
20
|
tests/test_card.py,sha256=QAfRz7e11gWICPnFJZ2tiYgUsFV3C9TwzJXrDnDNXFw,1202
|
|
21
21
|
tests/test_errors.py,sha256=ixiIgEuBuzfsL5p4uCFdF32XqFRtTPF6EVhGJ0keOrI,930
|
|
22
22
|
tests/test_helpers.py,sha256=fx2R7y6oQO8XeQzevJe826NuHkBgvtznZicomchB3Gg,899
|
|
23
|
-
tests/test_requests.py,sha256=
|
|
23
|
+
tests/test_requests.py,sha256=3XMx2A-BK21g1Exm4RTVm6eKTOzeZH-8FzKJXQmmMmA,4141
|
|
24
24
|
tests/test_statement.py,sha256=IOE0rRRBgBZSJv_FLaETEyn5NzzXKMNTqgjv99GX-68,1436
|
|
25
|
-
tests/test_types.py,sha256=
|
|
25
|
+
tests/test_types.py,sha256=krrkBaPv3ESTlZG5UBROhyGha_i-abiha-OrdvF2yDg,22332
|
|
26
26
|
tests/test_validators.py,sha256=Jjr9gWTT4cRntGiKvQK4fncqx3JkEuTWkKm1VqpRHTs,1829
|
|
27
|
-
cuenca_validations-2.1.36.
|
|
28
|
-
cuenca_validations-2.1.36.
|
|
29
|
-
cuenca_validations-2.1.36.
|
|
30
|
-
cuenca_validations-2.1.36.
|
|
27
|
+
cuenca_validations-2.1.36.dev2.dist-info/METADATA,sha256=XYggwl0kWMSMPSUK_5bKe20XXudsbuf2OWf1362zliM,1600
|
|
28
|
+
cuenca_validations-2.1.36.dev2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
29
|
+
cuenca_validations-2.1.36.dev2.dist-info/top_level.txt,sha256=4233xdOs2HtuT-GFRjcDcwK0IwdwvWdczOtk0fPB6Gw,25
|
|
30
|
+
cuenca_validations-2.1.36.dev2.dist-info/RECORD,,
|
tests/test_requests.py
CHANGED
|
@@ -5,6 +5,7 @@ from pydantic_extra_types.phone_numbers import PhoneNumber
|
|
|
5
5
|
from cuenca_validations.types.enums import VerificationType
|
|
6
6
|
from cuenca_validations.types.requests import (
|
|
7
7
|
PasswordResetRequest,
|
|
8
|
+
UpdateTransferRequest,
|
|
8
9
|
UserTOSAgreementRequest,
|
|
9
10
|
UserUpdateRequest,
|
|
10
11
|
VerificationRequest,
|
|
@@ -94,3 +95,31 @@ def test_user_update_request_normalizes_email() -> None:
|
|
|
94
95
|
def test_user_update_request_normalizes_phone() -> None:
|
|
95
96
|
req = UserUpdateRequest(phone_number=PhoneNumber('+116504401222'))
|
|
96
97
|
assert req.phone_number == '+16504401222'
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@pytest.mark.parametrize('status', ['succeeded', 'failed'])
|
|
101
|
+
def test_update_transfer_request_valid_status(status: str) -> None:
|
|
102
|
+
req = UpdateTransferRequest.model_validate({'status': status})
|
|
103
|
+
assert req.status == status
|
|
104
|
+
assert req.model_dump() == {'status': status}
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
@pytest.mark.parametrize('status', ['created', 'submitted', 'in_review'])
|
|
108
|
+
def test_update_transfer_request_invalid_status(status: str) -> None:
|
|
109
|
+
with pytest.raises(ValidationError) as ex:
|
|
110
|
+
UpdateTransferRequest.model_validate({'status': status})
|
|
111
|
+
assert 'status' in str(ex.value)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def test_update_transfer_request_missing_status() -> None:
|
|
115
|
+
with pytest.raises(ValidationError) as ex:
|
|
116
|
+
UpdateTransferRequest.model_validate({})
|
|
117
|
+
assert 'status' in str(ex.value)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def test_update_transfer_request_forbids_extra() -> None:
|
|
121
|
+
with pytest.raises(ValidationError) as ex:
|
|
122
|
+
UpdateTransferRequest.model_validate(
|
|
123
|
+
{'status': 'succeeded', 'foo': 'bar'}
|
|
124
|
+
)
|
|
125
|
+
assert 'Extra inputs are not permitted' in str(ex.value)
|
tests/test_types.py
CHANGED
|
@@ -12,10 +12,7 @@ from pydantic.fields import FieldInfo
|
|
|
12
12
|
|
|
13
13
|
from cuenca_validations.types import (
|
|
14
14
|
CardQuery,
|
|
15
|
-
FraudFundsTransferErrorResponse,
|
|
16
|
-
FraudFundsTransferReasonCode,
|
|
17
15
|
FraudFundsTransferRequest,
|
|
18
|
-
FraudFundsTransferSuccessResponse,
|
|
19
16
|
JSONEncoder,
|
|
20
17
|
QueryParams,
|
|
21
18
|
SantizedDict,
|
|
@@ -640,7 +637,7 @@ def test_bank_account_validation_clabe_request():
|
|
|
640
637
|
assert BankAccountValidationRequest(account_number='646180157098510917')
|
|
641
638
|
|
|
642
639
|
|
|
643
|
-
def
|
|
640
|
+
def test_fraud_funds_transfer_request():
|
|
644
641
|
request = FraudFundsTransferRequest(
|
|
645
642
|
request_id='f0a2b3-request-hash',
|
|
646
643
|
user_id='US123',
|
|
@@ -670,28 +667,6 @@ def test_fraud_funds_transfer_models():
|
|
|
670
667
|
'clabe': '646180157098510917',
|
|
671
668
|
}
|
|
672
669
|
|
|
673
|
-
success = FraudFundsTransferSuccessResponse(
|
|
674
|
-
transaction_id='SP123',
|
|
675
|
-
amount=10000,
|
|
676
|
-
clave_rastreo='CUENCA123',
|
|
677
|
-
)
|
|
678
|
-
|
|
679
|
-
assert success.model_dump() == {
|
|
680
|
-
'transaction_id': 'SP123',
|
|
681
|
-
'amount': 10000,
|
|
682
|
-
'clave_rastreo': 'CUENCA123',
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
error = FraudFundsTransferErrorResponse(
|
|
686
|
-
reason_code=FraudFundsTransferReasonCode.insufficient_funds,
|
|
687
|
-
message='Fondos insuficientes',
|
|
688
|
-
)
|
|
689
|
-
|
|
690
|
-
assert error.model_dump() == {
|
|
691
|
-
'reason_code': 'INSUFFICIENT_FUNDS',
|
|
692
|
-
'message': 'Fondos insuficientes',
|
|
693
|
-
}
|
|
694
|
-
|
|
695
670
|
|
|
696
671
|
@pytest.mark.parametrize(
|
|
697
672
|
'input_data',
|
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.36.dev0.dist-info → cuenca_validations-2.1.36.dev2.dist-info}/top_level.txt
RENAMED
|
File without changes
|