· 4 years ago · Nov 25, 2020, 10:26 PM
1# import
2from dba import DataBase
3
4# class
5class Validador():
6 # cnstr
7 def __init__(self, data_base=DataBase):
8 self.__mydb = data_base
9 # mthds
10 def validar_mail(self, val):
11 err = []
12 count = 0
13 dominios_validos = ['hotmail.com', 'gmail.com']
14 if '@' in val:
15 for dom in dominios_validos:
16 if dom in val:
17 count+=1
18 if count == 0:
19 err.append('[Err]: los dominios contemplados como validos actulamente son: %s y %s' % (dominios_validos[0], dominios_validos[1]))
20 else:
21 err.append('[Err]: la estructura contemplada de un mail valido es "username_valido@dominio_valido.com"')
22 return err
23 def verif_espacios_intermedios(self, key, val):
24 err=[]
25 if (' ' in val) and (key not in ('user_id', 'cuenta_id', 'usuario', 'ciudad', 'pais')):
26 err.append(f'[Err]: el campo {key} contiene espacios en blanco')
27 return err
28 def verif_campo_vacio(self, key, val):
29 err=[]
30 if (val == '') and (key not in ('user_id', 'cuenta_id', 'usuario')):
31 err.append(f'[Err]: el campo {key} esta vacio')
32 return err
33 # validaciones de usuario
34 def validar_datos(self, key, val):
35 if key == 'ciudad':
36 val[1] = val[1].strip()
37 err = self.verif_campo_vacio(key, val[1])
38 err = self.verif_espacios_intermedios(key, val[1])
39 elif key == 'login_pass':
40 # pass 1
41 val[0] = val[0].strip()
42 err = self.verif_campo_vacio(key, val[0])
43 err = self.verif_espacios_intermedios(key, val[0])
44 # pass 2
45 val[1] = val[1].strip()
46 err = self.verif_campo_vacio(key, val[1])
47 err = self.verif_espacios_intermedios(key, val[1])
48 else:
49 val = val.strip()
50 err = self.verif_campo_vacio(key, val)
51 err = self.verif_espacios_intermedios(key, val)
52 if err == []:
53 if key == 'nombre':
54 val = val.capitalize()
55 if (len(val) < 2) or (len(val) > 12):
56 err.append('[Err]: el nombre debe contener entre 2 y 12 caracteres')
57 elif key == 'apellido':
58 val = val.capitalize()
59 if (len(val) < 2) or (len(val) > 12):
60 err.append('[Err]: el apellido debe contener entre 2 y 12 caracteres')
61 elif key == 'edad':
62 if not(val.isdigit()):
63 err.append('[Err]: la edad debe ser una caracter numerico')
64 else:
65 if (int(val) < 1) or (int(val) > 99):
66 err.append('[Err]: la edad esta contemplada como un numero entero positivo menor a 99')
67 elif key == 'genero':
68 val = val.capitalize()
69 if val.lower() not in ('m', 'f'):
70 err.append('[Err]: el genero esta contemplado como -> "m" (masculino) o "f" (femenino)')
71 elif key == 'pais':
72 val = val.capitalize()
73 query = 'select id from paises where nombre = %s'
74 values = (val, )
75 self.__mydb.ejecutar(query, values)
76 r = self.__mydb.get_cursor().fetchall()
77 if r == []:
78 err.append('[Err]: no se encontro el pais especificado')
79 else:
80 val = r[0][0]
81 elif key == 'ciudad':
82 if type(val[0]).__name__ != 'list':
83 val[1] = val[1].capitalize()
84 query = 'SELECT ciudades.ciudad_id FROM ciudades INNER JOIN paises ON ciudades.pais_codigo = paises.codigo AND paises.id = %s WHERE ciudades.nombre = %s;'
85 values = (*val, )
86 self.__mydb.ejecutar(query, values)
87 r = self.__mydb.get_cursor().fetchall()
88 if r == []:
89 err.append('[Err]: no se encontro la ciudad ingresada (o no pertenece al pais especificado con anterioridad)')
90 else:
91 val = r[0][0]
92 else:
93 err.append('[Err]: es necesario ingresar un pais valido para validar la ciudad')
94 elif key == 'telefono':
95 if not(val.isdigit()):
96 err.append('[Err]: el numero de telefono debe ser una caracter numerico')
97 else:
98 if int(val) < 0:
99 err.append('[Err]: el numero de telefono esta contemplado como un numero entero positivo')
100 elif key == 'login_name':
101 if (len(val) < 6) or (len(val) > 12):
102 err.append('[Err]: el login_name debe contener entre 6 y 12 caracteres')
103 qry = 'select cuenta_id from cuentas where login_name = %s;'
104 self.__mydb.ejecutar(qry, (val, ))
105 if self.__mydb.get_cursor().fetchall() != []:
106 err.append('[Err]: el nombre de login ingresado ya se encuentra en uso')
107 elif key == 'login_pass':
108 if val[0] != val[1]:
109 err.append('[Err]: las contraseñas no coinciden')
110 if len(val[0]) < 8:
111 err.append('[Err]: el login_pass debe contener minimo 8 caracteres')
112 val = val[0]
113 elif key == 'l_login_name':
114 if (len(val) < 6) or (len(val) > 12):
115 err.append('[Err]: el login_name debe contener entre 6 y 12 caracteres')
116 elif key == 'l_login_pass':
117 if len(val) < 8:
118 err.append('[Err]: el login_pass debe contener minimo 8 caracteres')
119 elif key == 'mail_primario':
120 err = self.validar_mail(val)
121 elif key == 'mail_secundario':
122 err = self.validar_mail(val)
123 return err if len(err)>0 else val
124 # validadores generales
125 # v general de usuario
126 def validar_datos_de_usuario(self, dic):
127 d_errores = {}
128 d_final = {}
129 d_temp = {}
130 for key, val in dic.items():
131 if key == 'ciudad':
132 pais_ciudad = [d_temp['pais'], val]
133 d_temp[key] = self.validar_datos(key, pais_ciudad)
134 else:
135 d_temp[key] = self.validar_datos(key, val)
136 err_count=0
137 for k, v in d_temp.items():
138 if type(v).__name__ == 'list':
139 err_count+=1
140 d_errores[k] = v
141 else:
142 d_final[k] = v
143 if err_count > 0:
144 return 1, d_errores
145 else:
146 return 0, d_final
147 # v general de registro
148 def validar_registro(self, dic):
149 d_errores = {}
150 d_final = {}
151 d_temp = {}
152 err_count = 0
153 for key, val in dic.items():
154 d_temp[key] = self.validar_datos(key, val)
155 for k, v in d_temp.items():
156 if type(v).__name__ == 'list':
157 err_count+=1
158 d_errores[k] = v
159 else:
160 d_final[k] = v
161 if err_count > 0:
162 return 1, d_errores
163 else:
164 return 0, d_final
165 # v general de login
166 def validar_login(self, dic):
167 d_errores = {}
168 d_final = {}
169 d_temp = {}
170 for key, val in dic.items():
171 if key == 'login_name':
172 d_temp[key] = self.validar_datos('l_login_name', val)
173 elif key == 'login_pass':
174 d_temp[key] = self.validar_datos('l_login_pass', val)
175 else:
176 d_temp[key] = self.validar_datos(key, val)
177 err_count=0
178 for k, v in d_temp.items():
179 if type(v).__name__ == 'list':
180 err_count+=1
181 d_errores[k] = v
182 else:
183 d_final[k] = v
184 if err_count > 0:
185 return 1, d_errores
186 else:
187 return 0, d_final
188