cuenca-validations 2.1.49.dev0__tar.gz → 2.1.50.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.
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/PKG-INFO +1 -1
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/__init__.py +2 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/enums.py +5 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/requests.py +5 -7
- cuenca_validations-2.1.50.dev0/cuenca_validations/version.py +1 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations.egg-info/PKG-INFO +1 -1
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/tests/test_requests.py +54 -44
- cuenca_validations-2.1.49.dev0/cuenca_validations/version.py +0 -1
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/LICENSE +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/README.md +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/__init__.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/card_bins.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/errors.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/py.typed +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/card.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/files.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/general.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/helpers.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/identities.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/morals.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/queries.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/typing.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/validators.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations.egg-info/SOURCES.txt +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations.egg-info/dependency_links.txt +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations.egg-info/requires.txt +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations.egg-info/top_level.txt +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/setup.cfg +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/setup.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/tests/__init__.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/tests/test_card.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/tests/test_errors.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/tests/test_helpers.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/tests/test_statement.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/tests/test_types.py +0 -0
- {cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/tests/test_validators.py +0 -0
|
@@ -114,6 +114,7 @@ __all__ = [
|
|
|
114
114
|
'TransferQuery',
|
|
115
115
|
'TransferRequest',
|
|
116
116
|
'UpdateTransferOrderRequest',
|
|
117
|
+
'UpdateTransferOrderStatus',
|
|
117
118
|
'UpdateTransferRequest',
|
|
118
119
|
'UserCardNotification',
|
|
119
120
|
'UserCredentialRequest',
|
|
@@ -191,6 +192,7 @@ from .enums import (
|
|
|
191
192
|
TransactionStatus,
|
|
192
193
|
TransferNetwork,
|
|
193
194
|
TransferOrderStatus,
|
|
195
|
+
UpdateTransferOrderStatus,
|
|
194
196
|
UserCardNotification,
|
|
195
197
|
UserStatus,
|
|
196
198
|
UserType,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import datetime as dt
|
|
2
|
-
from typing import Annotated, Any,
|
|
2
|
+
from typing import Annotated, Any, Optional, Union
|
|
3
3
|
|
|
4
4
|
from clabe import BANK_NAMES, Clabe
|
|
5
5
|
from pydantic import (
|
|
@@ -50,7 +50,7 @@ from ..types.enums import (
|
|
|
50
50
|
TrackDataMethod,
|
|
51
51
|
TransactionStatus,
|
|
52
52
|
TransactionTokenValidationStatus,
|
|
53
|
-
|
|
53
|
+
UpdateTransferOrderStatus,
|
|
54
54
|
UserCardNotification,
|
|
55
55
|
UserStatus,
|
|
56
56
|
VerificationStatus,
|
|
@@ -1042,7 +1042,7 @@ class TransferOrderLineRequest(BaseRequest):
|
|
|
1042
1042
|
|
|
1043
1043
|
class TransferOrderRequest(BaseRequest):
|
|
1044
1044
|
idempotency_key: str
|
|
1045
|
-
legal_person_id:
|
|
1045
|
+
legal_person_id: str
|
|
1046
1046
|
items: list[TransferOrderLineRequest]
|
|
1047
1047
|
|
|
1048
1048
|
model_config = ConfigDict(
|
|
@@ -1070,9 +1070,7 @@ class TransferOrderRequest(BaseRequest):
|
|
|
1070
1070
|
|
|
1071
1071
|
|
|
1072
1072
|
class UpdateTransferOrderRequest(BaseRequest):
|
|
1073
|
-
status:
|
|
1074
|
-
TransferOrderStatus.authorized, TransferOrderStatus.rejected
|
|
1075
|
-
]
|
|
1073
|
+
status: UpdateTransferOrderStatus
|
|
1076
1074
|
rejection_reason: Optional[str] = None
|
|
1077
1075
|
|
|
1078
1076
|
model_config = ConfigDict(
|
|
@@ -1089,7 +1087,7 @@ class UpdateTransferOrderRequest(BaseRequest):
|
|
|
1089
1087
|
|
|
1090
1088
|
@model_validator(mode='after')
|
|
1091
1089
|
def validate_rejection_reason(self) -> 'UpdateTransferOrderRequest':
|
|
1092
|
-
if self.status is
|
|
1090
|
+
if self.status is UpdateTransferOrderStatus.rejected:
|
|
1093
1091
|
if (
|
|
1094
1092
|
self.rejection_reason is None
|
|
1095
1093
|
or not self.rejection_reason.strip()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.1.50.dev0'
|
|
@@ -5,7 +5,7 @@ from pydantic_extra_types.phone_numbers import PhoneNumber
|
|
|
5
5
|
from cuenca_validations.types.enums import (
|
|
6
6
|
Country,
|
|
7
7
|
OperatorRole,
|
|
8
|
-
|
|
8
|
+
UpdateTransferOrderStatus,
|
|
9
9
|
VerificationType,
|
|
10
10
|
)
|
|
11
11
|
from cuenca_validations.types.queries import OperatorQuery
|
|
@@ -245,49 +245,59 @@ def test_transfer_order_request_shape() -> None:
|
|
|
245
245
|
'descriptor': 'Mezcal',
|
|
246
246
|
}
|
|
247
247
|
single = TransferOrderRequest.model_validate(
|
|
248
|
-
{
|
|
248
|
+
{
|
|
249
|
+
'idempotency_key': 'single',
|
|
250
|
+
'legal_person_id': 'USWqY5cvkISJOxHyEKjAKf8w',
|
|
251
|
+
'items': [line],
|
|
252
|
+
}
|
|
249
253
|
)
|
|
254
|
+
assert single.legal_person_id == 'USWqY5cvkISJOxHyEKjAKf8w'
|
|
250
255
|
assert single.items is not None
|
|
251
256
|
assert len(single.items) == 1
|
|
252
257
|
batch = TransferOrderRequest.model_validate(
|
|
253
|
-
{
|
|
258
|
+
{
|
|
259
|
+
'idempotency_key': 'batch',
|
|
260
|
+
'legal_person_id': 'USWqY5cvkISJOxHyEKjAKf8w',
|
|
261
|
+
'items': [line, line],
|
|
262
|
+
}
|
|
254
263
|
)
|
|
255
264
|
assert batch.items is not None
|
|
256
265
|
assert len(batch.items) == 2
|
|
257
266
|
|
|
258
267
|
with pytest.raises(ValidationError, match='items must not be empty'):
|
|
259
268
|
TransferOrderRequest.model_validate(
|
|
260
|
-
{
|
|
269
|
+
{
|
|
270
|
+
'idempotency_key': 'empty',
|
|
271
|
+
'legal_person_id': 'USWqY5cvkISJOxHyEKjAKf8w',
|
|
272
|
+
'items': [],
|
|
273
|
+
}
|
|
261
274
|
)
|
|
262
275
|
with pytest.raises(ValidationError):
|
|
263
|
-
TransferOrderRequest.model_validate(
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
req = UpdateTransferOrderRequest.model_validate(
|
|
274
|
-
{'status': 'rejected', 'rejection_reason': 'Monto incorrecto'}
|
|
275
|
-
)
|
|
276
|
-
assert req.status is TransferOrderStatus.rejected
|
|
277
|
-
assert req.rejection_reason == 'Monto incorrecto'
|
|
276
|
+
TransferOrderRequest.model_validate(
|
|
277
|
+
{
|
|
278
|
+
'idempotency_key': 'missing-items',
|
|
279
|
+
'legal_person_id': 'USWqY5cvkISJOxHyEKjAKf8w',
|
|
280
|
+
}
|
|
281
|
+
)
|
|
282
|
+
with pytest.raises(ValidationError, match='legal_person_id'):
|
|
283
|
+
TransferOrderRequest.model_validate(
|
|
284
|
+
{'idempotency_key': 'missing-person', 'items': [line]}
|
|
285
|
+
)
|
|
278
286
|
|
|
279
287
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
288
|
+
@pytest.mark.parametrize(
|
|
289
|
+
'payload',
|
|
290
|
+
[
|
|
291
|
+
{'status': 'rejected'},
|
|
292
|
+
{'status': 'rejected', 'rejection_reason': ''},
|
|
293
|
+
{'status': 'rejected', 'rejection_reason': ' '},
|
|
294
|
+
],
|
|
295
|
+
)
|
|
296
|
+
def test_update_transfer_order_request_rejected_requires_reason(
|
|
297
|
+
payload: dict,
|
|
298
|
+
) -> None:
|
|
287
299
|
with pytest.raises(ValidationError, match='rejection_reason is required'):
|
|
288
|
-
UpdateTransferOrderRequest.model_validate(
|
|
289
|
-
{'status': 'rejected', 'rejection_reason': ' '}
|
|
290
|
-
)
|
|
300
|
+
UpdateTransferOrderRequest.model_validate(payload)
|
|
291
301
|
|
|
292
302
|
|
|
293
303
|
def test_update_transfer_order_request_authorized_forbids_reason() -> None:
|
|
@@ -300,18 +310,18 @@ def test_update_transfer_order_request_authorized_forbids_reason() -> None:
|
|
|
300
310
|
)
|
|
301
311
|
|
|
302
312
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
assert
|
|
313
|
+
@pytest.mark.parametrize(
|
|
314
|
+
'payload, status',
|
|
315
|
+
[
|
|
316
|
+
({'status': 'authorized'}, UpdateTransferOrderStatus.authorized),
|
|
317
|
+
(
|
|
318
|
+
{'status': 'rejected', 'rejection_reason': 'Monto incorrecto'},
|
|
319
|
+
UpdateTransferOrderStatus.rejected,
|
|
320
|
+
),
|
|
321
|
+
],
|
|
322
|
+
)
|
|
323
|
+
def test_update_transfer_order_request_valid(
|
|
324
|
+
payload: dict, status: UpdateTransferOrderStatus
|
|
325
|
+
) -> None:
|
|
326
|
+
req = UpdateTransferOrderRequest.model_validate(payload)
|
|
327
|
+
assert req.status is status
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '2.1.49.dev0'
|
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/__init__.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/card_bins.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/errors.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/py.typed
RENAMED
|
File without changes
|
{cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/card.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/files.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/types/morals.py
RENAMED
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/cuenca_validations/typing.py
RENAMED
|
File without changes
|
{cuenca_validations-2.1.49.dev0 → cuenca_validations-2.1.50.dev0}/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
|
|
File without changes
|
|
File without changes
|