示例#1
0
 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)
示例#2
0
 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]
示例#3
0
 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]
示例#4
0
"""
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