def test_carga(self): # Define parâmetros de risco. Na interface de usuário estes # valores deverão estar persistidos em Banco de Dados e/ou serem # exportados ou importados via arquivo .csv # (GerenteRisco parametros_tocsv e parametros_fromcsv) ######################################################### # Este precisa de uma extração disponível e é pesado # Para não rodar, renomeie o método para no_test_carga # O pytest só chama os métodos começados com test # ################### filenames = sch_processing(CARGA_ZIP_TEST) print(filenames) assert filenames is not None # assert(len(filenames) == 14) padraorisco = carrega_carga(self.session) gerente = GerenteRisco() gerente.set_padraorisco(padraorisco) print(padraorisco.parametros[0].valores) # Preferencialmente vai tentar processar o arquivo de conhecimentos # Se não houver, pega o primeiro da lista mesmo ind = 0 for index, filename in enumerate(filenames): if filename[0].find('Conhecimento'): ind = index break with open(filenames[ind][0]) as show_the_head: head = [next(show_the_head) for x in range(5)] print(head) result = gerente.aplica_risco(arquivo=filenames[ind][0]) print(result)
def test_sch_dir_viagens(self): print(SCH_VIAGENS) filenames = sch_processing(SCH_FILE_TEST) print(filenames) with open(filenames[0][1], 'r', encoding=ENCODE, newline='') as txt_file: reader = csv.reader(txt_file, delimiter='\t') lista = [linha for linha in reader] with open(filenames[0][0], 'r', encoding=ENCODE, newline='') as csv_file: reader = csv.reader(csv_file) lista2 = [linha for linha in reader] assert len(lista) == len(lista2) print(lista[0]) assert lista[1][0][0:5] == lista2[1][0][0:5]
def test_sch_zip(self): filenames = sch_processing(SCH_ZIP_TEST) with ZipFile(SCH_ZIP_TEST) as myzip: with myzip.open(filenames[0][1]) as zip_file: zip_io = io.TextIOWrapper( zip_file, encoding=ENCODE, newline=None ) reader = csv.reader(zip_io, delimiter='\t') lista = [linha for linha in reader] print(filenames[0][1]) print(filenames[0][0]) with open(filenames[0][0], 'r', encoding=ENCODE, newline='') as txt_file: reader = csv.reader(txt_file) lista2 = [linha for linha in reader] assert len(lista) == len(lista2) print('test_sch lista', lista[:2]) print('test_sch lista2', lista2[:2]) assert lista[1][0:5] == lista2[1][0:5]
""" Created on Mon Jun 25 14:30:28 2018 @author: 25052288840 """ import os import pandas as pd from bhadrasana.conf import ENCODE from bhadrasana.utils.csv_handlers import sch_processing CAMINHO = '/home/ivan/Downloads' CAMINHO = r'P:\SISTEMAS\roteiros\AJNA\CARGA' ARQUIVO = 'Atracados201710.zip' ARQUIVO = 'DESCARREGADOS201711.zip' lista = sch_processing(os.path.join(CAMINHO, ARQUIVO), dest_path='.') 'PROCURAR POR 435N' df_conhecimento = pd.read_csv('Conhecimento.csv', encoding=ENCODE, dtype=str) df_mc = pd.read_csv('ManifestoConhecimento.csv', encoding=ENCODE, dtype=str) df_manifesto = pd.read_csv('Manifesto.csv', encoding=ENCODE, dtype=str) df_em = pd.read_csv('EscalaManifesto.csv', encoding=ENCODE, dtype=str) df_atracacao = pd.read_csv('AtracDesatracEscala.csv', encoding=ENCODE, dtype=str) dfm1 = df_atracacao.merge(df_em) dfm2 = dfm1.merge(df_manifesto) dfm3 = dfm2.merge(df_mc) df_final = dfm3.merge(df_conhecimento, on='Conhecimento')
def importa_base(self, csv_folder: str, baseid: int, data: str, filename: str, remove=False): """Copia base para dest_path, processando se necessário. Aceita arquivos .zip contendo arquivos sch e arquivos csv únicos. No caso de CSV, retorna erro caso títulos não batam com importação anterior para a mesma "BASE" (dest_path) para evitar erros do usuário Args: csv_folder: destino do(s) arquivo(s) gerados base_id: id da base, será usada para identificar uma subpasta data: data formato YYYY-MM-DD do período inicial da base/extração. Será usada para gerar subpasta no formato YYYY/MM/DD filename: caminho completo do arquivo da base de origem (fonte externa/extração) remove: excluir o arquivo temporário após processamento Returns: Uma tupla ou lista de tuplas. Primeiros itens são CSVs criados """ dest_path = os.path.join(csv_folder, str(baseid), data[:4], data[5:7], data[8:10]) if os.path.exists(dest_path): raise FileExistsError( 'Já houve importação de base para os parâmetros informados' + ' %s ' % dest_path) else: os.makedirs(dest_path) try: if '.zip' in filename or os.path.isdir(filename): result = sch_processing(filename, dest_path=dest_path) else: # No caso de CSV, retornar erro caso títulos não batam # com importação anterior # Para sch zipados e lista de csv zipados, esta verificação # é mais custosa, mas também precisa ser implementada cabecalhos_antigos = self.get_headers_base(baseid, csv_folder) diferenca_cabecalhos = set() if cabecalhos_antigos: with open(filename, 'r', newline='') as file: reader = csv.reader(file) cabecalhos_novos = set(next(reader)) diferenca_cabecalhos = (cabecalhos_novos ^ cabecalhos_antigos) if diferenca_cabecalhos: raise ValueError( 'Erro na importação! Há base anterior' + ' com cabeçalhos diferentes: ' + str(diferenca_cabecalhos)) dest_filename = os.path.join(dest_path, os.path.basename(filename)) shutil.copyfile(filename, os.path.join(dest_filename)) result = [(dest_filename, 'single csv')] # result = csv_processing(tempfile, dest_path=dest_path) if not os.path.isdir(filename) and remove: os.remove(filename) except Exception as err: shutil.rmtree(dest_path) raise err return result