Advertisement
GastonPalazzo

validador.py

Nov 25th, 2020 (edited)
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.10 KB | None | 0 0
  1. # import
  2. from dba import DataBase
  3.  
  4. # class
  5. class 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.         err = []
  36.         if key == 'ciudad':
  37.             val[1] = val[1].strip()
  38.             err = self.verif_campo_vacio(key, val[1])
  39.             err = self.verif_espacios_intermedios(key, val[1])
  40.         elif key == 'login_pass':
  41.             # pass 1
  42.             val[0] = val[0].strip()
  43.             err = self.verif_campo_vacio(key, val[0])
  44.             err = self.verif_espacios_intermedios(key, val[0])
  45.             # pass 2
  46.             val[1] = val[1].strip()
  47.             err = self.verif_campo_vacio(key, val[1])
  48.             err = self.verif_espacios_intermedios(key, val[1])
  49.         else:
  50.             if key not in ('user_id', 'cuenta_id', 'usuario', 'ciudad', 'pais'):
  51.                 val = val.strip()
  52.                 err = self.verif_campo_vacio(key, val)
  53.                 err = self.verif_espacios_intermedios(key, val)
  54.         if err == []:
  55.             if key == 'nombre':
  56.                 val = val.capitalize()
  57.                 if (len(val) < 2) or (len(val) > 12):
  58.                     err.append('[Err]: el nombre debe contener entre 2 y 12 caracteres')
  59.             elif key == 'apellido':
  60.                 val = val.capitalize()
  61.                 if (len(val) < 2) or (len(val) > 12):
  62.                     err.append('[Err]: el apellido debe contener entre 2 y 12 caracteres')
  63.             elif key == 'edad':
  64.                 if not(val.isdigit()):
  65.                     err.append('[Err]: la edad debe ser una caracter numerico')
  66.                 else:
  67.                     if (int(val) < 1) or (int(val) > 99):
  68.                         err.append('[Err]: la edad esta contemplada como un numero entero positivo menor a 99')
  69.             elif key == 'genero':
  70.                 val = val.capitalize()
  71.                 if val.lower() not in ('m', 'f'):
  72.                     err.append('[Err]: el genero esta contemplado como -> "m" (masculino) o "f" (femenino)')
  73.             elif key == 'pais':
  74.                 val = val.capitalize()
  75.                 query = 'select id from paises where nombre = %s'
  76.                 values = (val, )
  77.                 self.__mydb.ejecutar(query, values)
  78.                 r = self.__mydb.get_cursor().fetchall()
  79.                 if r == []:
  80.                     err.append('[Err]: no se encontro el pais especificado')
  81.                 else:
  82.                     val = r[0][0]
  83.             elif key == 'ciudad':
  84.                 if type(val[0]).__name__ != 'list':
  85.                     val[1] = val[1].capitalize()
  86.                     query = 'SELECT ciudades.ciudad_id FROM ciudades INNER JOIN paises ON ciudades.pais_codigo = paises.codigo AND paises.id = %s WHERE ciudades.nombre = %s;'
  87.                     values = (*val, )
  88.                     self.__mydb.ejecutar(query, values)
  89.                     r = self.__mydb.get_cursor().fetchall()
  90.                     if r == []:
  91.                         err.append('[Err]: no se encontro la ciudad ingresada (o no pertenece al pais especificado con anterioridad)')
  92.                     else:
  93.                         val = r[0][0]
  94.                 else:
  95.                     err.append('[Err]: es necesario ingresar un pais valido para validar la ciudad')
  96.             elif key == 'telefono':
  97.                 if not(val.isdigit()):
  98.                     err.append('[Err]: el numero de telefono debe ser una caracter numerico')
  99.                 else:
  100.                     if int(val) < 0:
  101.                         err.append('[Err]: el numero de telefono esta contemplado como un numero entero positivo')
  102.             elif key == 'login_name':
  103.                 if (len(val) < 6) or (len(val) > 12):
  104.                     err.append('[Err]: el login_name debe contener entre 6 y 12 caracteres')
  105.                 qry = 'select cuenta_id from cuentas where login_name = %s;'
  106.                 self.__mydb.ejecutar(qry, (val, ))
  107.                 if self.__mydb.get_cursor().fetchall() != []:
  108.                     err.append('[Err]: el nombre de login ingresado ya se encuentra en uso')
  109.             elif key == 'login_pass':
  110.                 if val[0] != val[1]:
  111.                     err.append('[Err]: las contraseรฑas no coinciden')
  112.                 if len(val[0]) < 8:
  113.                     err.append('[Err]: el login_pass debe contener minimo 8 caracteres')
  114.                 val = val[0]
  115.             elif key == 'l_login_name':
  116.                 if (len(val) < 6) or (len(val) > 12):
  117.                     err.append('[Err]: el login_name debe contener entre 6 y 12 caracteres')
  118.             elif key == 'l_login_pass':
  119.                 if len(val) < 8:
  120.                     err.append('[Err]: el login_pass debe contener minimo 8 caracteres')
  121.             elif key == 'mail_primario':
  122.                 err = self.validar_mail(val)
  123.             elif key == 'mail_secundario':
  124.                 err = self.validar_mail(val)
  125.         return err if len(err)>0 else val
  126.     # validadores generales
  127.     # v general de usuario
  128.     def validar_datos_de_usuario(self, dic):
  129.         d_errores = {}
  130.         d_final = {}
  131.         d_temp = {}
  132.         for key, val in dic.items():
  133.             if key == 'ciudad':
  134.                 pais_ciudad = [d_temp['pais'], val]
  135.                 d_temp[key] = self.validar_datos(key, pais_ciudad)
  136.             else:
  137.                 d_temp[key] = self.validar_datos(key, val)
  138.         err_count=0
  139.         for k, v in d_temp.items():
  140.             if type(v).__name__ == 'list':
  141.                 err_count+=1
  142.                 d_errores[k] = v
  143.             else:
  144.                 d_final[k] = v
  145.         if err_count > 0:
  146.             return 1, d_errores
  147.         else:
  148.             return 0, d_final
  149.     # v general de registro
  150.     def validar_registro(self, dic):
  151.         d_errores = {}
  152.         d_final = {}
  153.         d_temp = {}
  154.         err_count = 0
  155.         for key, val in dic.items():
  156.             d_temp[key] = self.validar_datos(key, val)
  157.         for k, v in d_temp.items():
  158.             if type(v).__name__ == 'list':
  159.                 err_count+=1
  160.                 d_errores[k] = v
  161.             else:
  162.                 d_final[k] = v
  163.         if err_count > 0:
  164.             return 1, d_errores
  165.         else:
  166.             return 0, d_final
  167.     # v general de login
  168.     def validar_login(self, dic):
  169.         d_errores = {}
  170.         d_final = {}
  171.         d_temp = {}
  172.         for key, val in dic.items():
  173.             if key == 'login_name':
  174.                 d_temp[key] = self.validar_datos('l_login_name', val)
  175.             elif key == 'login_pass':
  176.                 d_temp[key] = self.validar_datos('l_login_pass', val)
  177.             else:
  178.                 d_temp[key] = self.validar_datos(key, val)
  179.         err_count=0
  180.         for k, v in d_temp.items():
  181.             if type(v).__name__ == 'list':
  182.                 err_count+=1
  183.                 d_errores[k] = v
  184.             else:
  185.                 d_final[k] = v
  186.         if err_count > 0:
  187.             return 1, d_errores
  188.         else:
  189.             return 0, d_final
  190.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement