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