Ejemplo n.º 1
0
    def genera_back_list(self, back_list):
        """
        Primer paso de la creación de una Backlist.

        Este método se encarga de validar los datos para la creación del
        del objeto y llevar a cabo el guardado del mismo.

        Valida:
            Que el archivo subido para importar la base de datos de contactos
            sea y tenga las características válidas.
            Si el archivo es válido, hace el save del objeto y si no los es
            lanza la excepción correspondiente.
        """

        csv_extensions = ['.csv']

        file_invalid_msg = _(
            "El archivo especificado para realizar la importación de contactos "
            "no es válido.")
        filename = back_list.nombre_archivo_importacion
        extension = os.path.splitext(filename)[1].lower()
        if extension not in csv_extensions:
            logger.warn(_("La extension {0} no es CSV. ".format(extension)))
            raise (OmlArchivoImportacionInvalidoError(file_invalid_msg))
        file_obj = codecs.iterdecode(back_list.archivo_importacion,
                                     'utf-8',
                                     errors='ignore')
        data = csv.reader(file_obj, skipinitialspace=True)
        validar_estructura_csv(data, file_invalid_msg, logger)
    def crear_bd_contactos(self, archivo, nombre_archivo, nombre_bd) -> int:
        model_base_contactos = BaseDatosContacto()
        if self._existe_bd_contactos(nombre_bd):
            raise (OmlError(
                _("Ya existe una base de datos de contactos con ese nombre")))
        self.parser = BaseDatosContactoArchivoCSVParser(
            nombre_archivo, archivo)

        if not self.parser.es_valida_extension(
        ) or not self.parser.es_valido_archivo():
            file_invalid_msg = _(
                "El archivo especificado para realizar la importación de "
                "contactos no es válido.")
            raise (OmlArchivoImportacionInvalidoError(file_invalid_msg))

        if not self.parser.headers_no_repetidos():
            raise OmlParserRepeatedColumnsError(
                _("El archivo a procesar tiene nombres de columnas "
                  "repetidos."))

        model_base_contactos.archivo_importacion = archivo
        model_base_contactos.nombre_archivo_importacion = nombre_archivo
        model_base_contactos.nombre = nombre_bd
        model_base_contactos.save()

        return model_base_contactos.id
Ejemplo n.º 3
0
    def genera_base_dato_contacto(self, base_datos_contacto):
        """
        Primer paso de la creación de una BaseDatoContacto.

        Este método se encarga de validar los datos para la creación del
        del objeto y llevar a cabo el guardado del mismo.

        Valida:
            Que el archivo subido para importar la base de datos de contactos
            sea y tenga las características válidas.
            Si el archivo es válido, hace el save del objeto y si no los es
            lanza la excepción correspondiente.
        """
        assert (base_datos_contacto.estado in
                (BaseDatosContacto.ESTADO_EN_DEFINICION,
                 BaseDatosContacto.ESTADO_DEFINIDA_ACTUALIZADA))

        csv_extensions = ['.csv']

        file_invalid_msg = _("El archivo especificado para realizar la importación de contactos "
                             "no es válido.")
        filename = base_datos_contacto.nombre_archivo_importacion
        extension = os.path.splitext(filename)[1].lower()
        if extension not in csv_extensions:
            logger.warn(_("La extension {0} no es CSV. ".format(extension)))
            raise(OmlArchivoImportacionInvalidoError(file_invalid_msg))
        base_datos_contacto.save()
Ejemplo n.º 4
0
def validar_estructura_csv(data_csv_memory, err_message, logger):
    """Analiza si un archivo con extensión .csv tiene una estructura válida"""
    try:
        # chequea que el csv tenga un formato estándar de black list, así podemos descartar
        # archivos csv corruptos
        all([row[0] < row[1] for row in data_csv_memory])
    except Exception as e:
        logger.warn("Error: {0}".format(e.message))
        raise (OmlArchivoImportacionInvalidoError(err_message))
Ejemplo n.º 5
0
def validar_estructura_csv(data_csv_memory, err_message, logger):
    """Analiza si un archivo con extensión .csv tiene una estructura válida"""
    # chequea que el csv tenga un formato estándar de base de contactos o black list o
    # así podemos descartar archivos csv corruptos
    for i, row in enumerate(data_csv_memory):
        # controlamos que el primer valor sea numérico, como campo teléfonico
        try:
            if i > 0:
                int(row[0])
        except Exception as e:
            logger.warn("Error: {0}".format(e))
            raise (OmlArchivoImportacionInvalidoError(err_message))
Ejemplo n.º 6
0
    def genera_lista_rapida(self, lista_rapida):

        nombre_archivo = lista_rapida.nombre_archivo_importacion
        archivo = lista_rapida.archivo_importacion
        self.parser = ListaRapidaArchivoCSVParser(nombre_archivo, archivo)

        if not self.parser.es_valida_extension(
        ) or not self.parser.es_valido_archivo():
            file_invalid_msg = _(
                "El archivo especificado para realizar la importación de "
                "contactos no es válido.")
            raise (OmlArchivoImportacionInvalidoError(file_invalid_msg))
Ejemplo n.º 7
0
    def valida_lista_rapida(self, archivo, nombre_archivo, nombre_lista):
        if self._existe_lista_rapida(nombre_lista):
            raise (OmlError(
                _("Ya existe una lista de contactos rapida con ese nombre")))
        self.parser = ListaRapidaArchivoCSVParser(nombre_archivo, archivo)

        if not self.parser.es_valida_extension(
        ) or not self.parser.es_valido_archivo():
            file_invalid_msg = _(
                "El archivo especificado para realizar la importación de "
                "contactos no es válido.")
            raise (OmlArchivoImportacionInvalidoError(file_invalid_msg))

        if not self.parser.headers_no_repetidos():
            raise OmlParserRepeatedColumnsError(
                _("El archivo a procesar tiene nombres de columnas "
                  "repetidos."))