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
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()
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))
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))
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))
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."))