from app.comunes.idioma import leng
[documentos]
class Tabla:
"""
Clase encargada de almacenar los datos y opciones ingresadas.
"""
def __init__(self):
"""
Constructor de la clase Tabla.
"""
self.gestor = None
self._ruta_salida_csv:str = ""
self._encabezado_tabla:list = []
self._delimitador:str = ""
self._orden:str = ""
self._criterio:str = ""
self._modo:str = ""
self._semilla:str = ""
self._campos_booleanos:dict = dict()
self._campos_texto:dict = dict()
self._campos_enteros:dict = dict()
self._campos_decimales:dict = dict()
[documentos]
def enlazar_gestor(self, gestor):
"""
Almacena la instancia del gestor.
:param gestor: Componente que coordina y comunica los módulos.
:type gestor: Gestor
:return: None
"""
self.gestor = gestor
# Ruta
[documentos]
def establecer_ruta(self, ruta:str):
"""
Establece la ruta de salida.
:param ruta: Ruta de salida.
:type ruta: str
:return: None
"""
self._ruta_salida_csv = ruta
[documentos]
def obtener_ruta(self) -> str:
"""
Obtiene y retorna el valor del atributo.
:return: Valor del atributo.
"""
return self._ruta_salida_csv
# Encabezado
[documentos]
def establecer_encabezado(self, encabezado:list):
"""
Establece los campos de la tabla.
:param encabezado: Campos de la tabla.
:type encabezado: list
:return: None
"""
encabezado = [e for e in encabezado if e != ""]
self._encabezado_tabla = encabezado
[documentos]
def obtener_encabezado(self) -> list:
"""
Ver Tabla.obtener_ruta()
"""
return self._encabezado_tabla
[documentos]
def borrar_encabezado(self):
"""
Vacía el encabezado de la tabla y actualiza la vista
:return: None
"""
self._encabezado_tabla = []
self.gestor.actualizar_vista()
# Delimitador
[documentos]
def establecer_delimitador(self, delimitador:str):
"""
Establece el delimitador de las columnas.
:param delimitador: Delimitador de la tabla.
:type delimitador: str
:return: None
"""
self._delimitador = delimitador
[documentos]
def obtener_delimitador(self) -> str:
"""
Ver Tabla.obtener_ruta()
"""
return self._delimitador
# Orden
[documentos]
def establecer_orden(self, orden:str):
"""
Establece el orden de la tabla.
:param orden: Forma de ordenar la tabla.
:type orden: str
:return: None
"""
self._orden = orden
[documentos]
def obtener_orden(self) -> str:
"""
Ver Tabla.obtener_ruta()
"""
return self._orden
# Criterio
[documentos]
def establecer_criterio(self, criterio:str):
"""
Establece el campo de referencia para ordenar la tabla.
:param criterio: Campo de referencia.
:type criterio: str
:return: None
"""
self._criterio = criterio
[documentos]
def obtener_criterio(self) -> str:
"""
Ver Tabla.obtener_ruta()
"""
return self._criterio
# Modo
[documentos]
def establecer_modo(self, modo:str):
"""
Establece el modo de aleatoriedad.
:param modo: Librería a utilizar.
:type modo: str
:return: None
"""
self._modo = modo
[documentos]
def obtener_modo(self) -> str:
"""
Ver Tabla.obtener_ruta()
"""
return self._modo
# Semilla
[documentos]
def establecer_semilla(self, semilla:str):
"""
Establece el estado incial para 'random'.
:param semilla: Valor de 'seed'.
:type semilla: str
:return: None
"""
self._semilla = semilla
[documentos]
def obtener_semilla(self) -> str:
"""
Ver Tabla.obtener_ruta()
"""
return self._semilla
# Campos booleanos
[documentos]
def establecer_campo_booleano(self, nombre_campo:str, valores_bool:str):
"""
Establece un campo como booleano.
:param nombre_campo: Nombre del campo.
:type nombre_campo: str
:param valores_bool: Posibles valores (True, False, None).
:type valores_bool: str
:return: None
"""
self._campos_booleanos[nombre_campo] = valores_bool
[documentos]
def borrar_campo_booleano(self, nombre_campo:str):
"""
Si está registrado en la tabla, elimina el campo recibido y
actualiza la vista.
:param nombre_campo: Nombre del campo recibido.
:type nombre_campo: str
:return: None
"""
self._campos_booleanos.pop(nombre_campo, None)
self.gestor.actualizar_vista()
[documentos]
def obtener_campos_booleanos(self) -> dict:
"""
Ver Tabla.obtener_ruta()
"""
return self._campos_booleanos
# Campos de texto
[documentos]
def establecer_campo_texto(self, nombre_campo:str, valores:list):
"""
Establece un campo como de texto.
:param nombre_campo: Nombre del campo.
:type nombre_campo: str
:param valores: Alternativas de texto para el campo.
:type valores: list
:return: None
"""
self._campos_texto[nombre_campo] = valores
[documentos]
def borrar_campo_texto(self, nombre_campo:str):
"""
Ver Tabla.borrar_campo_booleano()
"""
self._campos_texto.pop(nombre_campo, None)
self.gestor.actualizar_vista()
[documentos]
def obtener_campos_texto(self) -> dict:
"""
Ver Tabla.obtener_ruta()
"""
return self._campos_texto
# Campos enteros
[documentos]
def establecer_campo_entero(self, campo:str, rango:tuple):
"""
Establece un campo como de enteros.
:param campo: Nombre del campo.
:type campo: str
:param rango: Rango de posibles valores.
:type rango: tuple
:return: None
"""
self._campos_enteros[campo] = rango
[documentos]
def borrar_campo_entero(self, campo:str):
"""
Ver Tabla.borrar_campo_booleano()
"""
self._campos_enteros.pop(campo, None)
self.gestor.actualizar_vista()
[documentos]
def obtener_campos_enteros(self) -> dict:
"""
Ver Tabla.obtener_ruta()
"""
return self._campos_enteros
# Campos decimales
[documentos]
def establecer_campo_decimal(self, campo:str, rango:tuple):
"""
Establece un campo como de decimales.
:param campo: Nombre del campo.
:type campo: str
:param rango: Rango de posibles valores.
:type rango: tuple
:return: None
"""
self._campos_decimales[campo] = rango
[documentos]
def borrar_campo_real(self, campo:str):
"""
Ver Tabla.borrar_campo_booleano()
"""
self._campos_decimales.pop(campo, None)
self.gestor.actualizar_vista()
[documentos]
def borrar_campos_decimales(self):
"""
Elimina los campos definidos como decimales cuando se elige
el modo de aleatoriedad 'secrets'.
:return: None
"""
self._campos_decimales.clear()
[documentos]
def obtener_campos_decimales(self) -> dict:
"""
Ver Tabla.obtener_ruta()
"""
return self._campos_decimales
# Métodos generales
[documentos]
def campos_definidos(self) -> list:
"""
Retorna una lista con los campos definidos.
:return: Lista con los campos definidos.
:rtype: list
"""
lista_aux:list = list(self._campos_booleanos.keys())
lista_aux += list(self._campos_texto.keys())
lista_aux += list(self._campos_enteros.keys())
lista_aux += list(self._campos_decimales.keys())
return lista_aux
[documentos]
def borrar_todos_los_campos(self):
"""
Elimina todos los campos registrados en la tabla y actualiza la vista.
:return: None
"""
self._campos_booleanos.clear()
self._campos_texto.clear()
self._campos_enteros.clear()
self._campos_decimales.clear()
self._criterio:str = ""
self.gestor.actualizar_vista()
[documentos]
def obtener_datos(self) -> list:
"""
Produce y retorna una lista con todos los datos ingresados
praparados para que se puedan insertar en la vista.
:return: Lista con los datos.
:rtype: list
"""
l_aux:list = []
l_aux.append(leng.tex['ruta_clave'])
l_aux.append(f'{self.obtener_ruta()}\n')
l_aux.append(leng.tex['encabezado_clave'])
l_aux.append(f'{self.obtener_encabezado()}\n')
l_aux.append(leng.tex['delimitador_clave'])
l_aux.append(f'"{self.obtener_delimitador()}"\n')
l_aux.append(leng.tex['orden_clave'])
l_aux.append(f'{self.obtener_orden()}\n')
l_aux.append(leng.tex['criterio_campo'])
l_aux.append(f'{self.obtener_criterio()}\n')
l_aux.append(leng.tex['clave_modo'])
l_aux.append(f'{self.obtener_modo()}\n')
l_aux.append(leng.tex['clave_semilla'])
l_aux.append(f'"{self.obtener_semilla()}"\n')
l_aux.append(leng.tex['clave_bool'])
l_aux.append(f'{self.obtener_campos_booleanos()}\n')
l_aux.append(leng.tex['clave_tex'])
l_aux.append(f'{self.obtener_campos_texto()}\n')
l_aux.append(leng.tex['clave_int'])
l_aux.append(f'{self.obtener_campos_enteros()}\n')
l_aux.append(leng.tex['clave_float'])
l_aux.append(f'{self.obtener_campos_decimales()}\n')
return l_aux
[documentos]
def restablecer_tabla(self):
"""
Vacía todos los datos registrados y actualiza la vista.
:return: None
"""
self._ruta_salida_csv = ""
self._encabezado_tabla = []
self._delimitador = ""
self._orden = ""
self._criterio = ""
self._modo = ""
self._semilla = ""
self._campos_booleanos.clear()
self._campos_texto.clear()
self._campos_enteros.clear()
self._campos_decimales.clear()
self.gestor.actualizar_vista()