Пример #1
0
def aplicar_risco_mongo(self, visaoid, padraoid, parametros_ativos, dest_path):
    """Chama função de aplicação de risco e grava resultado em arquivo."""
    mensagem = 'Aguarde. Aplicando risco no MongoDB. Visão: ' + visaoid
    self.update_state(state=states.STARTED, meta={'status': mensagem})
    mysession = MySession(Base)
    dbsession = mysession.session
    conn = MongoClient(host=MONGODB_URI)
    db = conn[DATABASE]
    gerente = GerenteRisco()
    try:
        self.update_state(state=states.PENDING, meta={'status': mensagem})
        lista_risco = gerente.aplica_risco_por_parametros(
            dbsession,
            visaoid=visaoid,
            padraoid=padraoid,
            parametros_ativos=parametros_ativos,
            base_csv=None,
            db=db)
        if lista_risco:
            csv_salvo = os.path.join(
                dest_path,
                datetime.today().strftime('%Y-%m-%d-%H:%M:%S') + '.csv')
            gerente.save_csv(lista_risco, csv_salvo)
        return {'status': 'Planilha criada com sucesso a partir do MongoDB'}
    except Exception as err:
        logger.error(err, exc_info=True)
        self.update_state(state=states.FAILURE, meta={'status': str(err)})
Пример #2
0
def arquiva_base_csv(self, baseid, base_csv):
    """Copia CSVs para MongoDB e apaga do disco."""
    # Aviso: Esta função rmtree só deve ser utilizada com caminhos seguros,
    # de preferência gerados pela própria aplicação
    self.update_state(state=states.STARTED,
                      meta={'status': 'Aguarde. Arquivando base ' + base_csv})
    mysession = MySession(Base)
    dbsession = mysession.session
    try:
        abase = dbsession.query(BaseOrigem).filter(
            BaseOrigem.id == baseid).first()
        self.update_state(state=states.PENDING,
                          meta={
                              'status':
                              'Aguarde... arquivando base ' + base_csv +
                              ' na base MongoDB ' + abase.nome
                          })
        conn = MongoClient(host=MONGODB_URI)
        db = conn[DATABASE]
        GerenteRisco.csv_to_mongo(db, abase, base_csv)
        shutil.rmtree(base_csv)
        return {'status': 'Base arquivada com sucesso'}
    except Exception as err:
        logger.error(err, exc_info=True)
        self.update_state(state=states.FAILURE, meta={'status': str(err)})
Пример #3
0
def aplicar_risco(self, base_csv: str, padraoid: int, visaoid: int,
                  parametros_ativos: list, dest_path: str):
    """Chama função de aplicação de risco e grava resultado em arquivo."""
    mensagem = 'Aguarde. Aplicando risco na base ' + \
        '-'.join(base_csv.split('/')[-3:])
    self.update_state(state=states.STARTED, meta={'status': mensagem})
    mysession = MySession(Base)
    dbsession = mysession.session
    gerente = GerenteRisco()
    try:
        self.update_state(state=states.PENDING, meta={'status': mensagem})
        lista_risco = gerente.aplica_risco_por_parametros(
            dbsession,
            padraoid=padraoid,
            visaoid=visaoid,
            parametros_ativos=parametros_ativos,
            base_csv=base_csv)
        if lista_risco:
            csv_salvo = os.path.join(
                dest_path,
                datetime.today().strftime('%Y-%m-%d-%H:%M:%S') + '.csv')
            gerente.save_csv(lista_risco, csv_salvo)
        return {'status': 'Planilha criada com sucesso'}
    except Exception as err:
        logger.error(str(err), exc_info=True)
        self.update_state(state=states.FAILURE, meta={'status': str(err)})
Пример #4
0
 def setUp(self):
     mysession = MySession(Base, test=True)
     self.session = mysession.session
     self.engine = mysession.engine
     Base.metadata.create_all(self.engine)
     self.tmpdir = tempfile.mkdtemp()
     # Ensure the file is read/write by the creator only
     self.saved_umask = os.umask(0o077)
Пример #5
0
def importar_base(self, csv_folder, baseid, data, filename, remove=False):
    """Função para upload do arquivo de uma extração ou outra fonte externa.

    Utiliza o :class: `bhadrasana.utils.gerenterisco.GerenteRisco`.
    Suporte por ora para csv com títulos e zip com sch (padrão Carga)
    Ver também :func: `bhadrasana.app.importa_base`

    Args:
        csv_folder: caminho onde será salvo o resultado

        abase: Base de Origem do arquivo

        data: data inicial do período extraído (se não for passada,
        assume hoje)

        filename: arquivo csv, sch+txt, ou conjunto deles em formato zip

        remove: exclui arquivo original no final do processamento
    """
    self.update_state(
        state=states.STARTED,
        meta={'status': 'Processando arquivo ' + filename + '. Aguarde!!!'})
    basefilename = os.path.basename(filename)
    print(basefilename)
    mysession = MySession(Base)
    dbsession = mysession.session
    gerente = GerenteRisco()
    try:
        abase = dbsession.query(BaseOrigem).filter(
            BaseOrigem.id == baseid).first()
        self.update_state(state=states.PENDING,
                          meta={
                              'status':
                              'Processando arquivo ' + basefilename +
                              ' na base ' + abase.nome + '. Aguarde!!!'
                          })
        lista_arquivos = gerente.importa_base(csv_folder, baseid, data,
                                              filename, remove)
        # Sanitizar base já na importação para evitar
        # processamento repetido depois
        gerente.ativa_sanitizacao(ascii_sanitizar)
        gerente.checa_depara(abase)  # Aplicar na importação???
        gerente.pre_processa_arquivos(lista_arquivos)
        return {'status': 'Base ' + data + ' importada com sucesso'}
    except Exception as err:
        logger.error(err, exc_info=True)
        self.update_state(state=states.FAILURE, meta={'status': str(err)})
Пример #6
0
def arquiva_base_csv_sync(baseid, base_csv):
    """Copia CSVs para MongoDB e apaga do disco."""
    # Aviso: Esta função rmtree só deve ser utilizada com caminhos seguros,
    # de preferência gerados pela própria aplicação
    mysession = MySession(Base)
    dbsession = mysession.session
    try:
        abase = dbsession.query(BaseOrigem).filter(
            BaseOrigem.id == baseid).first()
        conn = MongoClient(host=MONGODB_URI)
        db = conn[DATABASE]
        GerenteRisco.csv_to_mongo(db, abase, base_csv)
        shutil.rmtree(base_csv)
        return 'Base arquivada com sucesso'
    except Exception as err:
        logger.error(err, exc_info=True)
        return str(err)
Пример #7
0
    def create_app(self):
        """Requisito do LiveServerTestCase. Retorna aplicação a ser testada.

        Está sendo criado um BD de testes, na memória.
        Deve-ser tomar cuidado ao modificar, pois a classe recria e APAGA
        o BD dbsession a cada teste.

        """
        mysession = MySession(Base, test=True)
        self.dbsession = mysession.session
        self.engine = mysession.engine
        # print('####################################### CREATE DATABASE')
        Base.metadata.create_all(self.engine)
        create_base_testes(self.dbsession)
        conn = MongoClient(host=MONGODB_URI)
        self.mongodb = conn[DATABASE]
        app = AppSingleTon.create(self.dbsession, self.mongodb)
        DBUser.dbsession = None  # Bypass authentication
        app.config.update(
            LIVESERVER_PORT=8942
        )
        return app
Пример #8
0
# Interpret the config file for Python logging.
# This line sets up loggers basically.
fileConfig(config.config_file_name)

# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
target_metadata = None

# other values from the config, defined by the needs of env.py,
# can be acquired:
# my_important_option = config.get_main_option("my_important_option")
# ... etc.

mysession = MySession(Base)
session = mysession.session
engine = mysession.engine
target_metadata = Base.metadata


def run_migrations_offline():
    """Run migrations in 'offline' mode.

    This configures the context with just a URL
    and not an Engine, though an Engine is acceptable
    here as well.  By skipping the Engine creation
    we don't even need a DBAPI to be available.

    Calls to context.execute() here emit the given string to the
    script output.
Пример #9
0
        print(de_para_dict)
        # TODO: Fazer planilha COV "FAKE" com títulos reais
        # e linha de dados
        lista_nova = muda_titulos_csv(CSV_TITLES_TEST, de_para_dict)
        lista_old = [[
            'nome motorista', 'cpf motorista', 'descricao ncm',
            'razao social exportador / importador',
            'cnpj exportador / importador', 'nome operador scanner',
            'cpf operador scanner', 'cnpj transportadora'
        ], ['dado1c1', 'dado1c2']]
        lista = muda_titulos_lista(lista_old, de_para_dict)
        print(lista_nova[0])
        print('lista')
        print(lista[0])
        for old, new in de_para_dict.items():
            assert old in ''.join(lista_old[0])
            assert new not in ''.join(lista_old[0])
        for old, new in de_para_dict.items():
            assert new in ''.join(lista_nova[0])


if __name__ == '__main__':
    # Cria no banco atualmente configurado os objetos de teste
    # Apenas para praticidade durante o período inicial de testes
    mysession = MySession(Base, test=False)
    dbsession = mysession.session
    print('Atenção, entrando em Base REAL!!!!')
    # gerente = GerenteRisco()
    # gerente.import_named_csv(CSV_NAMEDRISCO_TEST, session=mysession.session)
    # gerente.cria_base('PLANILHA_COV', session=mysession.session)
Пример #10
0
 def setUp(self):
     mysession = MySession(Base, test=True)
     self.session = mysession.session
     self.engine = mysession.engine
     Base.metadata.create_all(self.engine)
Пример #11
0
"""Arquivo temporário para testes exploratórios com novos métodos MongoDB."""
from pymongo import MongoClient

from bhadrasana.models.models import Base, MySession, PadraoRisco, Visao
from bhadrasana.utils.gerente_risco import GerenteRisco

gerente = GerenteRisco()
mysession = MySession(Base, test=False).session
db = MongoClient()['test']
visao = mysession.query(Visao).filter(Visao.id == 1).first()
padrao = mysession.query(PadraoRisco).filter(PadraoRisco.id == 1).first()
gerente.set_padraorisco(padrao)
df = gerente.aplica_juncao_mongo(db,
                                 visao,
                                 parametros_ativos=['cpfcnpjconsignatario'],
                                 filtrar=True,
                                 pandas=False)
print(df)

filtro = {
    '$or': [{
        'alimento': {
            '$in': ['bacon', 'coxinha', 'frutose', 'dextrose de milho']
        }
    }, {
        'esporte': {
            '$in': ['basejump', 'surf', 'ufc', 'escalada']
        }
    }]
}
"""