cuenca-validations 2.1.16.dev6__tar.gz → 2.1.16.dev8__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 (36) hide show
  1. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/PKG-INFO +1 -1
  2. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/types/__init__.py +12 -0
  3. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/types/enums.py +34 -27
  4. cuenca_validations-2.1.16.dev8/cuenca_validations/types/general.py +193 -0
  5. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/types/requests.py +3 -0
  6. cuenca_validations-2.1.16.dev8/cuenca_validations/version.py +1 -0
  7. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations.egg-info/PKG-INFO +1 -1
  8. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/tests/test_types.py +39 -1
  9. cuenca_validations-2.1.16.dev6/cuenca_validations/types/general.py +0 -107
  10. cuenca_validations-2.1.16.dev6/cuenca_validations/version.py +0 -1
  11. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/LICENSE +0 -0
  12. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/README.md +0 -0
  13. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/__init__.py +0 -0
  14. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/card_bins.py +0 -0
  15. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/errors.py +0 -0
  16. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/py.typed +0 -0
  17. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/types/card.py +0 -0
  18. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/types/files.py +0 -0
  19. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/types/helpers.py +0 -0
  20. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/types/identities.py +0 -0
  21. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/types/morals.py +0 -0
  22. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/types/queries.py +0 -0
  23. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/typing.py +0 -0
  24. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations/validators.py +0 -0
  25. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations.egg-info/SOURCES.txt +0 -0
  26. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations.egg-info/dependency_links.txt +0 -0
  27. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations.egg-info/requires.txt +0 -0
  28. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/cuenca_validations.egg-info/top_level.txt +0 -0
  29. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/setup.cfg +0 -0
  30. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/setup.py +0 -0
  31. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/tests/__init__.py +0 -0
  32. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/tests/test_card.py +0 -0
  33. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/tests/test_errors.py +0 -0
  34. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/tests/test_helpers.py +0 -0
  35. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/tests/test_requests.py +0 -0
  36. {cuenca_validations-2.1.16.dev6 → cuenca_validations-2.1.16.dev8}/tests/test_statement.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca_validations
3
- Version: 2.1.16.dev6
3
+ Version: 2.1.16.dev8
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -44,6 +44,7 @@ __all__ = [
44
44
  'FileRequest',
45
45
  'FileUploadRequest',
46
46
  'Gender',
47
+ 'IncomeType',
47
48
  'IssuerNetwork',
48
49
  'IdentityQuery',
49
50
  'JSONEncoder',
@@ -110,6 +111,11 @@ __all__ = [
110
111
  'WebhookEvent',
111
112
  'digits',
112
113
  'get_state_name',
114
+ 'get_profession_name',
115
+ 'get_income_type_name',
116
+ 'get_account_use_type_name',
117
+ 'get_monthly_movements_type_name',
118
+ 'get_monthly_spending_type_name',
113
119
  'uuid_field',
114
120
  'LogConfig',
115
121
  ]
@@ -136,6 +142,7 @@ from .enums import (
136
142
  FileExtension,
137
143
  FileFormat,
138
144
  Gender,
145
+ IncomeType,
139
146
  IssuerNetwork,
140
147
  KYCFileType,
141
148
  KYCValidationSource,
@@ -169,6 +176,11 @@ from .general import (
169
176
  SantizedDict,
170
177
  StrictPositiveInt,
171
178
  digits,
179
+ get_account_use_type_name,
180
+ get_income_type_name,
181
+ get_monthly_movements_type_name,
182
+ get_monthly_spending_type_name,
183
+ get_profession_name,
172
184
  get_state_name,
173
185
  )
174
186
  from .helpers import uuid_field
@@ -691,39 +691,46 @@ class SATRegimeCode(str, Enum):
691
691
 
692
692
 
693
693
  class Profession(str, Enum):
694
- artisticas = 'Actividades Artísticas'
695
- agropecuario = 'Agricultura, Ganadería o Pesca'
696
- comercio = 'Comercio'
697
- estudiante = 'Estudiante'
698
- empleado = 'Empleado(a/e)'
699
- emprendimiento = 'Emprendimiento'
700
- hogar = 'Hogar'
701
- profesor = 'Profesor(a/e)'
702
- profesionista = 'Profesionista'
703
- servidor_publico = 'Servidor(a/e) Público'
704
- sistemas = 'Sistemas y Comunicaciones'
705
- independiente = 'Trabajador(a/e) Independiente'
706
- oficios = 'Oficios Varios'
694
+ artisticas = 'artisticas'
695
+ agropecuario = 'agropecuario'
696
+ comercio = 'comercio'
697
+ estudiante = 'estudiante'
698
+ empleado = 'empleado'
699
+ emprendimiento = 'emprendimiento'
700
+ hogar = 'hogar'
701
+ profesor = 'profesor'
702
+ profesionista = 'profesionista'
703
+ servidor_publico = 'servidor_publico'
704
+ sistemas = 'sistemas'
705
+ independiente = 'independiente'
706
+ oficios = 'oficios'
707
707
 
708
708
 
709
709
  class AccountUseTypes(str, Enum):
710
- personal_expenses = 'Gastos personales o familiares'
711
- business_expenses = 'Gastos relacionados con tu actividad económica'
712
- payment_of_goods_or_services = 'Pago de bienes o servicios'
713
- send_or_receive_transfers = 'Enviar o recibir transferencias'
710
+ personal_expenses = 'personal_expenses'
711
+ business_expenses = 'business_expenses'
712
+ payment_of_goods_or_services = 'payment_of_goods_or_services'
713
+ send_or_receive_transfers = 'send_or_receive_transfers'
714
714
 
715
715
 
716
716
  class MonthlyMovementsTypes(str, Enum):
717
- between_1_and_20 = 'Entre 1 y 20 movimientos'
718
- between_20_and_40 = 'Entre 20 y 40 movimientos'
719
- between_40_and_60 = 'Entre 40 y 60 movimientos'
720
- more_than_60 = 'Más de 60 movimientos'
717
+ between_1_and_20 = 'between_1_and_20'
718
+ between_20_and_40 = 'between_20_and_40'
719
+ between_40_and_60 = 'between_40_and_60'
720
+ more_than_60 = 'more_than_60'
721
721
 
722
722
 
723
723
  class MonthlySpendingTypes(str, Enum):
724
- less_than_1k = 'Menos de $1,000'
725
- between_1k_and_10k = 'Entre $1,000 y $10,000'
726
- between_10k_and_20k = 'Entre $10,000 y $20,000'
727
- between_20k_and_50k = 'Entre $20,000 y $50,000'
728
- between_50k_and_100k = 'Entre $50,000 y $100,000'
729
- more_than_100k = 'Más de $100,000'
724
+ less_than_1k = 'less_than_1k'
725
+ between_1k_and_10k = 'between_1k_and_10k'
726
+ between_10k_and_20k = 'between_10k_and_20k'
727
+ between_20k_and_50k = 'between_20k_and_50k'
728
+ between_50k_and_100k = 'between_50k_and_100k'
729
+ more_than_100k = 'more_than_100k'
730
+
731
+
732
+ class IncomeType(str, Enum):
733
+ salary = 'salary'
734
+ freelance = 'freelance'
735
+ support_from_third_party = 'support_from_third_party'
736
+ variable = 'variable'
@@ -0,0 +1,193 @@
1
+ import json
2
+ from dataclasses import dataclass
3
+ from typing import Annotated, Any, Optional
4
+
5
+ from pydantic import (
6
+ AnyUrl,
7
+ Field,
8
+ HttpUrl,
9
+ IPvAnyAddress,
10
+ PlainSerializer,
11
+ StringConstraints,
12
+ )
13
+
14
+ from ..validators import sanitize_dict, sanitize_item
15
+ from .enums import (
16
+ AccountUseTypes,
17
+ IncomeType,
18
+ MonthlyMovementsTypes,
19
+ MonthlySpendingTypes,
20
+ Profession,
21
+ State,
22
+ )
23
+
24
+ # We use custom serializers for IP addresses and URLs because
25
+ # Pydantic's IPvAnyAddress, AnyUrl, HttpUrl types are not JSON serializable.
26
+ SerializableHttpUrl = Annotated[HttpUrl, PlainSerializer(str, return_type=str)]
27
+ SerializableAnyUrl = Annotated[AnyUrl, PlainSerializer(str, return_type=str)]
28
+ SerializableIPvAnyAddress = Annotated[
29
+ IPvAnyAddress, PlainSerializer(str, return_type=str)
30
+ ]
31
+
32
+ NonEmptyStr = Annotated[
33
+ str, StringConstraints(strip_whitespace=True, min_length=1)
34
+ ]
35
+
36
+
37
+ class SantizedDict(dict):
38
+ def __init__(self, *args, **kwargs):
39
+ super().__init__(*args, **kwargs)
40
+ sanitize_dict(self)
41
+
42
+
43
+ class JSONEncoder(json.JSONEncoder):
44
+ def default(self, o):
45
+ return sanitize_item(o, default=super().default)
46
+
47
+
48
+ MAX_VALUE_IN_DB = 21_474_836_47
49
+
50
+ StrictPositiveInt = Annotated[
51
+ int, Field(strict=True, gt=0, le=MAX_VALUE_IN_DB)
52
+ ]
53
+
54
+
55
+ def digits(
56
+ min_length: Optional[int] = None, max_length: Optional[int] = None
57
+ ) -> Annotated[Any, StringConstraints]:
58
+ return Annotated[
59
+ str,
60
+ StringConstraints(
61
+ strip_whitespace=True,
62
+ min_length=min_length,
63
+ max_length=max_length,
64
+ pattern=r'^\d+$',
65
+ ),
66
+ ]
67
+
68
+
69
+ names_state = {
70
+ State.NE: 'Nacido en el Extranjero',
71
+ State.AS: 'Aguascalientes',
72
+ State.BC: 'Baja California',
73
+ State.BS: 'Baja California Sur',
74
+ State.CC: 'Campeche',
75
+ State.CS: 'Chiapas',
76
+ State.CH: 'Chihuahua',
77
+ State.CL: 'Coahuila',
78
+ State.CM: 'Colima',
79
+ State.DF: 'Ciudad de México',
80
+ State.DG: 'Durango',
81
+ State.GT: 'Guanajuato',
82
+ State.GR: 'Guerrero',
83
+ State.HG: 'Hidalgo',
84
+ State.JC: 'Jalisco',
85
+ State.MC: 'México',
86
+ State.MN: 'Michoacán',
87
+ State.MS: 'Morelos',
88
+ State.NT: 'Nayarit',
89
+ State.NL: 'Nuevo León',
90
+ State.OC: 'Oaxaca',
91
+ State.PL: 'Puebla',
92
+ State.QT: 'Querétaro',
93
+ State.QR: 'Quintana Roo',
94
+ State.SP: 'San Luis Potosí',
95
+ State.SL: 'Sinaloa',
96
+ State.SR: 'Sonora',
97
+ State.TC: 'Tabasco',
98
+ State.TL: 'Tlaxcala',
99
+ State.TS: 'Tamaulipas',
100
+ State.VZ: 'Veracruz',
101
+ State.YN: 'Yucatán',
102
+ State.ZS: 'Zacatecas',
103
+ }
104
+
105
+
106
+ def get_state_name(state: State) -> str:
107
+ return names_state[state]
108
+
109
+
110
+ names_professions = {
111
+ Profession.artisticas: 'Actividades Artísticas',
112
+ Profession.agropecuario: 'Agricultura, Ganadería o Pesca',
113
+ Profession.comercio: 'Comercio',
114
+ Profession.estudiante: 'Estudiante',
115
+ Profession.empleado: 'Empleado(a/e)',
116
+ Profession.emprendimiento: 'Emprendimiento',
117
+ Profession.hogar: 'Hogar',
118
+ Profession.profesor: 'Profesor(a/e)',
119
+ Profession.profesionista: 'Profesionista',
120
+ Profession.servidor_publico: 'Servidor(a/e) Público',
121
+ Profession.sistemas: 'Sistemas y Comunicaciones',
122
+ Profession.independiente: 'Trabajador(a/e) Independiente',
123
+ Profession.oficios: 'Oficios Varios',
124
+ }
125
+
126
+
127
+ def get_profession_name(profession: Profession) -> str:
128
+ return names_professions[profession]
129
+
130
+
131
+ names_account_use_types = {
132
+ AccountUseTypes.personal_expenses: 'Gastos personales o familiares',
133
+ AccountUseTypes.business_expenses: (
134
+ 'Gastos relacionados con tu actividad económica'
135
+ ),
136
+ AccountUseTypes.payment_of_goods_or_services: 'Pago de bienes o servicios',
137
+ AccountUseTypes.send_or_receive_transfers: (
138
+ 'Enviar o recibir transferencias'
139
+ ),
140
+ }
141
+
142
+
143
+ def get_account_use_type_name(account_use_type: AccountUseTypes) -> str:
144
+ return names_account_use_types[account_use_type]
145
+
146
+
147
+ names_monthly_movements_types = {
148
+ MonthlyMovementsTypes.between_1_and_20: 'Entre 1 y 20 movimientos',
149
+ MonthlyMovementsTypes.between_20_and_40: 'Entre 20 y 40 movimientos',
150
+ MonthlyMovementsTypes.between_40_and_60: 'Entre 40 y 60 movimientos',
151
+ MonthlyMovementsTypes.more_than_60: 'Más de 60 movimientos',
152
+ }
153
+
154
+
155
+ def get_monthly_movements_type_name(
156
+ monthly_movements_type: MonthlyMovementsTypes,
157
+ ) -> str:
158
+ return names_monthly_movements_types[monthly_movements_type]
159
+
160
+
161
+ names_monthly_spending_types = {
162
+ MonthlySpendingTypes.less_than_1k: 'Menos de $1,000',
163
+ MonthlySpendingTypes.between_1k_and_10k: 'Entre $1,000 y $10,000',
164
+ MonthlySpendingTypes.between_10k_and_20k: 'Entre $10,000 y $20,000',
165
+ MonthlySpendingTypes.between_20k_and_50k: 'Entre $20,000 y $50,000',
166
+ MonthlySpendingTypes.between_50k_and_100k: 'Entre $50,000 y $100,000',
167
+ MonthlySpendingTypes.more_than_100k: 'Más de $100,000',
168
+ }
169
+
170
+
171
+ def get_monthly_spending_type_name(
172
+ monthly_spending_type: MonthlySpendingTypes,
173
+ ) -> str:
174
+ return names_monthly_spending_types[monthly_spending_type]
175
+
176
+
177
+ names_income_types = {
178
+ IncomeType.salary: 'Sueldo o salario fijo',
179
+ IncomeType.freelance: 'Independiente',
180
+ IncomeType.support_from_third_party: 'Apoyo de terceros o familiares',
181
+ IncomeType.variable: 'Variable',
182
+ }
183
+
184
+
185
+ def get_income_type_name(income_type: IncomeType) -> str:
186
+ return names_income_types[income_type]
187
+
188
+
189
+ @dataclass
190
+ class LogConfig:
191
+ masked: bool = False
192
+ unmasked_chars_length: int = 0
193
+ excluded: bool = False
@@ -30,6 +30,7 @@ from ..types.enums import (
30
30
  EcommerceIndicator,
31
31
  FileExtension,
32
32
  Gender,
33
+ IncomeType,
33
34
  IssuerNetwork,
34
35
  KYCFileType,
35
36
  KYCValidationSource,
@@ -465,6 +466,7 @@ class UserRequest(BaseModel):
465
466
  account_use_type: Optional[AccountUseTypes] = None
466
467
  monthly_movements_type: Optional[MonthlyMovementsTypes] = None
467
468
  monthly_spending_type: Optional[MonthlySpendingTypes] = None
469
+ income_type: Optional[IncomeType] = None
468
470
 
469
471
  model_config = ConfigDict(
470
472
  json_schema_extra={
@@ -504,6 +506,7 @@ class UserUpdateRequest(BaseModel):
504
506
  account_use_type: Optional[AccountUseTypes] = None
505
507
  monthly_movements_type: Optional[MonthlyMovementsTypes] = None
506
508
  monthly_spending_type: Optional[MonthlySpendingTypes] = None
509
+ income_type: Optional[IncomeType] = None
507
510
 
508
511
  @field_validator('beneficiaries')
509
512
  @classmethod
@@ -0,0 +1 @@
1
+ __version__ = '2.1.16.dev8'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca_validations
3
- Version: 2.1.16.dev6
3
+ Version: 2.1.16.dev8
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -17,10 +17,19 @@ from cuenca_validations.types import (
17
17
  SessionRequest,
18
18
  TransactionStatus,
19
19
  digits,
20
+ get_account_use_type_name,
21
+ get_income_type_name,
22
+ get_monthly_movements_type_name,
23
+ get_monthly_spending_type_name,
24
+ get_profession_name,
20
25
  get_state_name,
21
26
  )
22
27
  from cuenca_validations.types.enums import (
28
+ AccountUseTypes,
23
29
  EcommerceIndicator,
30
+ IncomeType,
31
+ MonthlyMovementsTypes,
32
+ MonthlySpendingTypes,
24
33
  Profession,
25
34
  SessionType,
26
35
  State,
@@ -544,10 +553,39 @@ def test_limited_wallet_request():
544
553
  assert LimitedWalletRequest(allowed_curp=curp, allowed_rfc=rfc)
545
554
 
546
555
 
547
- def test_get_state_name():
556
+ def test_get_state_name() -> None:
548
557
  assert get_state_name(State.VZ) == 'Veracruz'
549
558
 
550
559
 
560
+ def test_get_profession_name() -> None:
561
+ assert get_profession_name(Profession.empleado) == 'Empleado(a/e)'
562
+
563
+
564
+ def test_get_income_type_name() -> None:
565
+ assert get_income_type_name(IncomeType.salary) == 'Sueldo o salario fijo'
566
+
567
+
568
+ def test_get_account_use_type_name() -> None:
569
+ assert (
570
+ get_account_use_type_name(AccountUseTypes.personal_expenses)
571
+ == 'Gastos personales o familiares'
572
+ )
573
+
574
+
575
+ def test_get_monthly_spending_type_name() -> None:
576
+ assert (
577
+ get_monthly_spending_type_name(MonthlySpendingTypes.less_than_1k)
578
+ == 'Menos de $1,000'
579
+ )
580
+
581
+
582
+ def test_get_monthly_movements_type_name() -> None:
583
+ assert (
584
+ get_monthly_movements_type_name(MonthlyMovementsTypes.between_1_and_20)
585
+ == 'Entre 1 y 20 movimientos'
586
+ )
587
+
588
+
551
589
  def test_bank_account_validation_clabe_request():
552
590
  assert BankAccountValidationRequest(account_number='646180157098510917')
553
591
 
@@ -1,107 +0,0 @@
1
- import json
2
- from dataclasses import dataclass
3
- from typing import Annotated, Any, Optional
4
-
5
- from pydantic import (
6
- AnyUrl,
7
- Field,
8
- HttpUrl,
9
- IPvAnyAddress,
10
- PlainSerializer,
11
- StringConstraints,
12
- )
13
-
14
- from ..validators import sanitize_dict, sanitize_item
15
- from .enums import State
16
-
17
- # We use custom serializers for IP addresses and URLs because
18
- # Pydantic's IPvAnyAddress, AnyUrl, HttpUrl types are not JSON serializable.
19
- SerializableHttpUrl = Annotated[HttpUrl, PlainSerializer(str, return_type=str)]
20
- SerializableAnyUrl = Annotated[AnyUrl, PlainSerializer(str, return_type=str)]
21
- SerializableIPvAnyAddress = Annotated[
22
- IPvAnyAddress, PlainSerializer(str, return_type=str)
23
- ]
24
-
25
- NonEmptyStr = Annotated[
26
- str, StringConstraints(strip_whitespace=True, min_length=1)
27
- ]
28
-
29
-
30
- class SantizedDict(dict):
31
- def __init__(self, *args, **kwargs):
32
- super().__init__(*args, **kwargs)
33
- sanitize_dict(self)
34
-
35
-
36
- class JSONEncoder(json.JSONEncoder):
37
- def default(self, o):
38
- return sanitize_item(o, default=super().default)
39
-
40
-
41
- MAX_VALUE_IN_DB = 21_474_836_47
42
-
43
- StrictPositiveInt = Annotated[
44
- int, Field(strict=True, gt=0, le=MAX_VALUE_IN_DB)
45
- ]
46
-
47
-
48
- def digits(
49
- min_length: Optional[int] = None, max_length: Optional[int] = None
50
- ) -> Annotated[Any, StringConstraints]:
51
- return Annotated[
52
- str,
53
- StringConstraints(
54
- strip_whitespace=True,
55
- min_length=min_length,
56
- max_length=max_length,
57
- pattern=r'^\d+$',
58
- ),
59
- ]
60
-
61
-
62
- names_state = {
63
- State.NE: 'Nacido en el Extranjero',
64
- State.AS: 'Aguascalientes',
65
- State.BC: 'Baja California',
66
- State.BS: 'Baja California Sur',
67
- State.CC: 'Campeche',
68
- State.CS: 'Chiapas',
69
- State.CH: 'Chihuahua',
70
- State.CL: 'Coahuila',
71
- State.CM: 'Colima',
72
- State.DF: 'Ciudad de México',
73
- State.DG: 'Durango',
74
- State.GT: 'Guanajuato',
75
- State.GR: 'Guerrero',
76
- State.HG: 'Hidalgo',
77
- State.JC: 'Jalisco',
78
- State.MC: 'México',
79
- State.MN: 'Michoacán',
80
- State.MS: 'Morelos',
81
- State.NT: 'Nayarit',
82
- State.NL: 'Nuevo León',
83
- State.OC: 'Oaxaca',
84
- State.PL: 'Puebla',
85
- State.QT: 'Querétaro',
86
- State.QR: 'Quintana Roo',
87
- State.SP: 'San Luis Potosí',
88
- State.SL: 'Sinaloa',
89
- State.SR: 'Sonora',
90
- State.TC: 'Tabasco',
91
- State.TL: 'Tlaxcala',
92
- State.TS: 'Tamaulipas',
93
- State.VZ: 'Veracruz',
94
- State.YN: 'Yucatán',
95
- State.ZS: 'Zacatecas',
96
- }
97
-
98
-
99
- def get_state_name(state: State):
100
- return names_state[state]
101
-
102
-
103
- @dataclass
104
- class LogConfig:
105
- masked: bool = False
106
- unmasked_chars_length: int = 0
107
- excluded: bool = False
@@ -1 +0,0 @@
1
- __version__ = '2.1.16.dev6'