cuenca-validations 2.1.14.dev4__py3-none-any.whl → 2.1.14.dev5__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.
@@ -1,10 +1,13 @@
1
+ import datetime as dt
1
2
  import uuid
2
3
  from base64 import urlsafe_b64encode
3
- from typing import Callable, Optional
4
+ from typing import Callable, Optional, Union
4
5
 
6
+ from dateutil.relativedelta import relativedelta
5
7
  from pydantic.fields import FieldInfo
6
8
 
7
9
  from .general import LogConfig
10
+ from .identities import Curp
8
11
 
9
12
 
10
13
  def uuid_field(prefix: str = '') -> Callable[[], str]:
@@ -20,3 +23,22 @@ def get_log_config(field: FieldInfo) -> Optional[LogConfig]:
20
23
  return next(m for m in field.metadata if isinstance(m, LogConfig))
21
24
  except StopIteration:
22
25
  return None
26
+
27
+
28
+ def get_birth_date_from_curp(curp: Curp) -> dt.date:
29
+ curp_date = curp[4:10] # YYMMDD
30
+ yy = int(curp_date[:2])
31
+ current_yy = dt.date.today().year % 100
32
+ century = '19' if yy > current_yy else '20'
33
+ birth_date = dt.datetime.strptime(century + curp_date, '%Y%m%d').date()
34
+ return birth_date
35
+
36
+
37
+ def validate_age_requirement(birth_date: Union[dt.date, Curp]) -> dt.date:
38
+ if isinstance(birth_date, str):
39
+ birth_date = get_birth_date_from_curp(birth_date)
40
+
41
+ current_date = dt.date.today()
42
+ if relativedelta(current_date, birth_date).years < 18:
43
+ raise ValueError('User does not meet age requirement.')
44
+ return birth_date
@@ -50,7 +50,6 @@ from ..types.enums import (
50
50
  WebhookObject,
51
51
  )
52
52
  from ..typing import DictStrAny
53
- from ..validators import validate_age_requirement
54
53
  from .card import (
55
54
  Cvv,
56
55
  ExpMonth,
@@ -66,6 +65,7 @@ from .general import (
66
65
  SerializableIPvAnyAddress,
67
66
  StrictPositiveInt,
68
67
  )
68
+ from .helpers import validate_age_requirement
69
69
  from .identities import (
70
70
  AddressRequest,
71
71
  Beneficiary,
@@ -329,14 +329,14 @@ class CurpValidationRequest(BaseModel):
329
329
  names: Optional[str] = None
330
330
  first_surname: Optional[str] = None
331
331
  second_surname: Optional[str] = Field(
332
- None, description='Not necessary for foreigners'
332
+ default=None, description='Not necessary for foreigners'
333
333
  )
334
334
  date_of_birth: Optional[dt.date] = None
335
335
  state_of_birth: Optional[State] = Field(
336
- None, description='In format ISO 3166 Alpha-2'
336
+ default=None, description='In format ISO 3166 Alpha-2'
337
337
  )
338
338
  country_of_birth: Optional[Country] = Field(
339
- None, description='In format ISO 3166 Alpha-2'
339
+ default=None, description='In format ISO 3166 Alpha-2'
340
340
  )
341
341
  gender: Optional[Gender] = None
342
342
  manual_curp: Optional[Curp] = Field(
@@ -381,16 +381,7 @@ class CurpValidationRequest(BaseModel):
381
381
  cls, manual_curp: Optional[Curp]
382
382
  ) -> Optional[Curp]:
383
383
  if manual_curp:
384
- current_date = dt.datetime.utcnow()
385
- curp_date = manual_curp[4:10]
386
- yy = int(curp_date[:2])
387
- current_yy = current_date.year % 100
388
- century = '19' if yy > current_yy else '20'
389
- birth_date = dt.datetime.strptime(century + curp_date, '%Y%m%d')
390
- try:
391
- validate_age_requirement(birth_date)
392
- except ValueError:
393
- raise
384
+ validate_age_requirement(manual_curp)
394
385
  return manual_curp
395
386
 
396
387
  @model_validator(mode="before")
@@ -485,16 +476,7 @@ class UserRequest(BaseModel):
485
476
  @classmethod
486
477
  def validate_birth_date(cls, curp: Optional[Curp]) -> Optional[Curp]:
487
478
  if curp:
488
- current_date = dt.datetime.utcnow()
489
- curp_date = curp[4:10]
490
- yy = int(curp_date[:2])
491
- current_yy = current_date.year % 100
492
- century = '19' if yy > current_yy else '20'
493
- birth_date = dt.datetime.strptime(century + curp_date, '%Y%m%d')
494
- try:
495
- validate_age_requirement(birth_date)
496
- except ValueError:
497
- raise
479
+ validate_age_requirement(curp)
498
480
  return curp
499
481
 
500
482
 
@@ -3,8 +3,6 @@ import datetime as dt
3
3
  from enum import Enum
4
4
  from typing import Any, Callable, Optional, Union
5
5
 
6
- from dateutil.relativedelta import relativedelta
7
-
8
6
 
9
7
  def sanitize_dict(d: dict) -> dict:
10
8
  for k, v in d.items():
@@ -42,10 +40,3 @@ def sanitize_item(
42
40
  else:
43
41
  rv = item
44
42
  return rv
45
-
46
-
47
- def validate_age_requirement(birth_date: dt.date) -> dt.date:
48
- current_date = dt.date.today()
49
- if relativedelta(current_date, birth_date).years < 18:
50
- raise ValueError('User does not meet age requirement.')
51
- return birth_date
@@ -1 +1 @@
1
- __version__ = '2.1.14.dev4'
1
+ __version__ = '2.1.14.dev5'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca_validations
3
- Version: 2.1.14.dev4
3
+ Version: 2.1.14.dev5
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -3,27 +3,27 @@ cuenca_validations/card_bins.py,sha256=9OpK0mCrG7DlmRI8UoyXj962uFkP9J6eCbYeF-C1S
3
3
  cuenca_validations/errors.py,sha256=OtM8EgiKqYdz9Hn66AbBO96orL1or7efkyt0vh0Zxbs,1873
4
4
  cuenca_validations/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  cuenca_validations/typing.py,sha256=1QCu81IbVZZpyInjyeAuO-nF36gpT5Gi4o6V9PozuOU,204
6
- cuenca_validations/validators.py,sha256=wzwLnJ4wHggZvqp3mearbFkzvDERGeTNvJkuofQnuMc,1484
7
- cuenca_validations/version.py,sha256=_76tfT7c3a3V-c4iI9jqt2Jk13KLPL0_aJFlTrJV1E8,28
6
+ cuenca_validations/validators.py,sha256=mYJDXxJVokl5jZIA4FYn8wkaMUnOxAH54t1Pfg_0kmQ,1190
7
+ cuenca_validations/version.py,sha256=_Zbqb594Hnr6hA3Q3GKN9hcYfmwlfYTMaIopzvMLZJ8,28
8
8
  cuenca_validations/types/__init__.py,sha256=fPmHzU6mY6l3qK2R8cOhjcrICTOnoHS6VQteX663FRE,4843
9
9
  cuenca_validations/types/card.py,sha256=UGzz8NTFAverUmdUKAK1oGHnOnjSNTpIRUm93vKSSGY,1295
10
10
  cuenca_validations/types/enums.py,sha256=533fUCip5CXMD7m4Ww8VAcB5Yr4A0EmT5GBRt2mF4b0,19510
11
11
  cuenca_validations/types/files.py,sha256=2CszbwF9ytXV9suFFwyDjYG4XxY8UhCjRw3HttVXXNw,269
12
12
  cuenca_validations/types/general.py,sha256=vJmQBD_Iv_hsxD8x3_Bip-NlYAiE2rmXSPQKj4kTtto,2621
13
- cuenca_validations/types/helpers.py,sha256=6rHUhwoQ7jJZtGcW3LX-W5ZDl42PWE1RoBpGme7KCkk,610
13
+ cuenca_validations/types/helpers.py,sha256=XPiYVTLDtmBB5R1heWUy1c35zZMh7nh-BmS6rtwEltg,1379
14
14
  cuenca_validations/types/identities.py,sha256=1wkutHzL9Gpd9oAZdyiikNxWKe5iBVAQT3TabR6YG1o,5451
15
15
  cuenca_validations/types/morals.py,sha256=davabh5hAnFVQyM7-yCyDaT5ewXnm0cr1BtqDIwzkX8,1833
16
16
  cuenca_validations/types/queries.py,sha256=3KWQfIawcXpyfD2SxBlUJpJVkc3CXL5rNMpHU-9GZXY,4992
17
- cuenca_validations/types/requests.py,sha256=XYK4aczPm_TH7gMB2GdqKEDFftLMuiAohw1pC1NwidI,21691
18
- cuenca_validations-2.1.14.dev4.dist-info/licenses/LICENSE,sha256=wR76FmxBbfnQpwELkkE5iMF8sFIafEMgXLTE4N4WPTc,1063
17
+ cuenca_validations/types/requests.py,sha256=2c9txv5i-yfvUccPPJbGoGs96RlOJIYnsMWmnx7mZQI,20949
18
+ cuenca_validations-2.1.14.dev5.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=ubzpi1UXCryLQdgsT_Zm2IX-XE_4L0dnHnhLwH06xK8,748
23
23
  tests/test_requests.py,sha256=HGKybPNlN-Vbf2Ew34csfMR5UzZdVPoX9J8eeD4yCiI,1095
24
24
  tests/test_statement.py,sha256=IOE0rRRBgBZSJv_FLaETEyn5NzzXKMNTqgjv99GX-68,1436
25
- tests/test_types.py,sha256=__nBVJiYki2LMVtsHS5uQ3ATxUlCUlapqCYvFVFCUdM,19086
26
- cuenca_validations-2.1.14.dev4.dist-info/METADATA,sha256=NJy7KiUUBhqws5hGz4IuNc84UbvK4mV1JJLfOxB4mVo,1600
27
- cuenca_validations-2.1.14.dev4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
- cuenca_validations-2.1.14.dev4.dist-info/top_level.txt,sha256=4233xdOs2HtuT-GFRjcDcwK0IwdwvWdczOtk0fPB6Gw,25
29
- cuenca_validations-2.1.14.dev4.dist-info/RECORD,,
25
+ tests/test_types.py,sha256=g7dsNxIxFT1hzBWx92JQbtMoTWBg1EQdCEwEGEFqGFk,19030
26
+ cuenca_validations-2.1.14.dev5.dist-info/METADATA,sha256=gnwdx9XP99rPX09ukIplwO5R5-zK2WT-2Ps1KGMPxaI,1600
27
+ cuenca_validations-2.1.14.dev5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
+ cuenca_validations-2.1.14.dev5.dist-info/top_level.txt,sha256=4233xdOs2HtuT-GFRjcDcwK0IwdwvWdczOtk0fPB6Gw,25
29
+ cuenca_validations-2.1.14.dev5.dist-info/RECORD,,
tests/test_types.py CHANGED
@@ -385,14 +385,9 @@ def test_curp_validation_request():
385
385
  assert 'state_of_birth required' in str(v)
386
386
 
387
387
 
388
- def test_curp_validation_request_underage():
389
- request = dict(
390
- manual_curp='ABCD240614HDFSRN03', # underage CURP
391
- )
392
-
388
+ def test_curp_validation_request_underage() -> None:
393
389
  with pytest.raises(ValueError) as v:
394
- CurpValidationRequest(**request)
395
-
390
+ CurpValidationRequest(manual_curp='ABCD240614HDFSRN03')
396
391
  assert 'User does not meet age requirement.' in str(v)
397
392
 
398
393