コード例 #1
0
def valida_form_files(form, filtro, db):
    """Lê formulário e adiciona campos ao filtro se necessário."""
    order = None
    pagina_atual = None
    if form.validate():  # configura filtro básico
        numero = form.numero.data
        start = form.start.data
        end = form.end.data
        alerta = form.alerta.data
        ranking = form.ranking.data
        pagina_atual = form.pagina_atual.data
        filtro_escolhido = form.filtro_auditoria.data
        if filtro_escolhido and filtro_escolhido != '0':
            auditoria_object = Auditoria(db)
            filtro_auditoria = \
                auditoria_object.dict_auditoria.get(filtro_escolhido)
            # logger.debug(auditoria_object.dict_auditoria)
            # logger.debug(filtro_escolhido)
            # logger.debug(filtro_auditoria)
            if filtro_auditoria:
                filtro.update(filtro_auditoria.get('filtro'))
                order = filtro_auditoria.get('order')
        tag_escolhida = form.filtro_tags.data
        tag_usuario = form.tag_usuario.data
        # print('****************************', tag_escolhida)
        if tag_escolhida and tag_escolhida != '0':
            filtro_tag = {'tag': tag_escolhida}
            if tag_usuario:
                filtro_tag.update({'usuario': current_user.id})
            filtro.update({'metadata.tags': {'$elemMatch': filtro_tag}})
        texto_ocorrencia = form.texto_ocorrencia.data
        if texto_ocorrencia:
            filtro.update({
                'metadata.ocorrencias': {
                    '$exists': True
                },
                'metadata.ocorrencias.texto': {
                    '$regex': texto_ocorrencia
                }
            })
        if numero == 'None':
            numero = None
        if start and end:
            start = datetime.combine(start, datetime.min.time())
            end = datetime.combine(end, datetime.max.time())
            filtro['metadata.dataescaneamento'] = {'$lte': end, '$gte': start}
        if numero:
            filtro['metadata.numeroinformado'] = mongo_sanitizar(
                numero).upper()
        if alerta:
            filtro['metadata.xml.alerta'] = True
        if ranking:
            filtro['metadata.ranking'] = {'$exists': True, '$gte': .5}
            order = [('metadata.ranking', -1)]
    # print(filtro)
    return filtro, pagina_atual, order
コード例 #2
0
 def valida(self):
     """Lê formulário e adiciona campos ao filtro se necessário."""
     if self.validate():  # configura filtro básico
         self.filtro = {}
         # pagina_atual = self.pagina_atual.data
         numero = self.numero.data
         start = self.start.data
         end = self.end.data
         alerta = self.alerta.data
         zscore = self.zscore.data
         if numero == 'None':
             numero = None
         if start and end:
             start = datetime.combine(start, datetime.min.time())
             end = datetime.combine(end, datetime.max.time())
             self.filtro['metadata.dataescaneamento'] = {'$lte': end, '$gte': start}
         if numero:
             self.filtro['metadata.numeroinformado'] = \
                 {'$regex': '^' + mongo_sanitizar(self.numero), '$options': 'i'}
         if alerta:
             self.filtro['metadata.xml.alerta'] = True
         if zscore:
             self.filtro['metadata.zscore'] = {'$gte': zscore}
         # Auditoria
         filtro_escolhido = self.filtro_auditoria.data
         if filtro_escolhido and filtro_escolhido != '0':
             auditoria_object = Auditoria(self.db)
             filtro_auditoria = \
                 auditoria_object.dict_auditoria.get(filtro_escolhido)
             if filtro_auditoria:
                 self.filtro.update(filtro_auditoria.get('filtro'))
                 order = filtro_auditoria.get('order')
         tag_escolhida = self.filtro_tags.data
         tag_usuario = self.tag_usuario.data
         if tag_escolhida and tag_escolhida != '0':
             filtro_tag = {'tag': tag_escolhida}
             if tag_usuario:
                 filtro_tag.update({'usuario': current_user.id})
             self.filtro['metadata.tags'] = {'$elemMatch': filtro_tag}
         texto_ocorrencia = self.texto_ocorrencia.data
         if texto_ocorrencia:
             self.filtro.update(
                 {'metadata.ocorrencias': {'$exists': True},
                  'metadata.ocorrencias.texto':
                      {'$regex':
                           '^' + mongo_sanitizar(texto_ocorrencia), '$options': 'i'
                       }
                  })
         print('FILTRO: ', self.filtro)
         return True
     return False
コード例 #3
0
def auditoria():
    """Permite editar e gravar filtro de auditoria"""
    # TODO: Passar lógica para caso de Uso ou para form e classe
    # TODO: Criar perfil para acesso restrito e SANITIZAR ENTRADA
    form = FormAuditoria()
    select = SelectAuditoria()
    auditoria = Auditoria(app.config['mongodb'])
    select.filtro_auditoria.choices = auditoria.filtros_auditoria_desc
    if request.method == 'POST':
        if form.validate_on_submit():
            filtro = json.loads(form.filtro.data)
            try:
                order = json.loads(form.order.data)
            except JSONDecodeError as err:
                order = form.order.data.split(',')
            filtro = filtro.replace('function', 'XXXX')
            order = order.replace('function', 'XXXX')
            form.descricao.data = mongo_sanitizar(form.descricao.data)
            auditoria.add_relatorio(form.id.data, filtro, order,
                                    form.descricao.data)
            flash('Filtro incluído!', 'success')
            return redirect(url_for('auditoria'))

    return render_template('auditoria.html', form=form, select=select)
コード例 #4
0
def select_auditoria():
    """Permite editar e gravar filtro de auditoria"""
    # TODO: Passar lógica para caso de Uso ou para form e classe
    form = FormAuditoria()
    select = SelectAuditoria()
    auditoria = Auditoria(app.config['mongodb'])
    select.filtro_auditoria.choices = auditoria.filtros_auditoria_desc
    if request.method == 'POST':
        filtro_escolhido = select.filtro_auditoria.data
        # print(filtro_escolhido)
        if filtro_escolhido and filtro_escolhido != '0':
            filtro_auditoria = \
                auditoria.dict_auditoria.get(filtro_escolhido)
            # print(filtro_auditoria)
            form.id.data = filtro_escolhido
            form.order.data = json.dumps(filtro_auditoria.get('order'))
            form.filtro.data = json.dumps(filtro_auditoria.get('filtro'))
            form.descricao.data = filtro_auditoria.get('descricao')
    return render_template('auditoria.html', form=form, select=select)
コード例 #5
0
def files():
    """Recebe parâmetros, aplica no GridFS, retorna a lista de arquivos."""
    db = app.config['mongodb']
    PAGE_ROWS = 50
    PAGES = 100
    lista_arquivos = []
    campos = campos_chave()
    npaginas = 1
    pagina_atual = 1
    count = 0
    order = None
    tags_object = Tags(db)
    auditoria_object = Auditoria(db)
    form_files = FilesForm(start=date.today() - timedelta(days=10),
                           end=date.today())
    form_files.filtro_tags.choices = tags_object.tags_text
    form_files.filtro_auditoria.choices = auditoria_object.filtros_auditoria_desc
    filtro, user_filtros = recupera_user_filtros()
    if request.method == 'POST':
        # print('****************************', request.form)
        form_files = FilesForm(**request.form)
        form_files.filtro_tags.choices = tags_object.tags_text
        form_files.filtro_auditoria.choices = auditoria_object.filtros_auditoria_desc
        filtro, pagina_atual, order = valida_form_files(form_files, filtro, db)
    else:
        numero = request.args.get('numero')
        if numero:
            form_files = FilesForm(numero=numero)
            form_files.filtro_tags.choices = tags_object.tags_text
            form_files.filtro_auditoria.choices = auditoria_object.filtros_auditoria_desc
            filtro['metadata.numeroinformado'] = mongo_sanitizar(
                numero).upper()
    if filtro:
        filtro['metadata.contentType'] = 'image/jpeg'
        if order is None:
            order = [('metadata.dataescaneamento', 1)]
        if pagina_atual is None:
            pagina_atual = 1

        projection = {
            '_id': 1,
            'filename': 1,
            'metadata.numeroinformado': 1,
            'metadata.predictions': 1,
            'metadata.pesagens': 1,
            'metadata.dataescaneamento': 1,
            'metadata.carga': 1
        }
        skip = (pagina_atual - 1) * PAGE_ROWS
        logger.debug(filtro)
        logger.debug(projection)
        logger.debug('order: %s' % order)
        logger.debug(PAGE_ROWS)
        logger.debug(skip)
        count = db['fs.files'].count_documents(filtro, limit=PAGES * PAGE_ROWS)
        # print(count)
        # count = 100
        npaginas = (count - 1) // PAGE_ROWS + 1
        # print('**Página:', pagina_atual, skip, type(skip))
        # print(count, skip)
        for grid_data in db['fs.files'] \
                .find(filter=filtro, projection=projection) \
                .sort(order) \
                .limit(PAGE_ROWS).skip(skip):
            linha = {}
            linha['_id'] = grid_data['_id']
            linha['filename'] = grid_data['filename']
            linha['dataescaneamento'] = datetime.strftime(
                grid_data['metadata'].get('dataescaneamento'),
                '%-d/%m/%Y %H:%M:%S')
            linha['ncms'] = carga.get_dados_ncm(grid_data)
            linha['infocarga'] = carga.get_dados_conteiner(grid_data)
            linha['pesocarga'] = carga.get_peso_conteiner(grid_data)
            linha['infodue'] = due_mongo.get_dados(grid_data)
            linha['peso'] = carga.get_pesos(grid_data)
            linha['numero'] = grid_data['metadata'].get('numeroinformado')
            linha['conhecimento'] = carga.get_conhecimento(grid_data)
            lista_arquivos.append(linha)
        # print(lista_arquivos)
        if len(lista_arquivos) < 50:
            npaginas = pagina_atual
    return render_template('search_files.html',
                           paginated_files=lista_arquivos,
                           oform=form_files,
                           campos=campos,
                           filtros=user_filtros,
                           npaginas=npaginas,
                           nregistros=count)
コード例 #6
0
 def test_auditoria(self):
     auditoria = Auditoria(self.db)
     auditoria.add_relatorio(0, filtro={}, order=[], descricao='Selecione')
     for id, campos in self.FILTROS_AUDITORIA.items():
         auditoria.add_relatorio(id, **campos)
     auditoria.mount_filtros()
コード例 #7
0
 def initialize(self, db):
     self.db = db
     self.auditoria_object = Auditoria(db)
     self.tags_object = Tags(db)
     self.filtro_tags.choices = self.tags_object.tags_text
     self.filtro_auditoria.choices = self.auditoria_object.filtros_auditoria_desc