def file(_id=None): """Tela para exibição de um 'arquivo' do GridFS. Exibe o arquivo e os metadados associados a ele. """ db = app.config['mongodb'] fs = GridFS(db) tags_object = Tags(db) form_tags = TagsForm() form_tags.tags.choices = tags_object.tags_text if request.args.get('filename'): filename = mongo_sanitizar(request.args.get('filename')) logger.warn('Filename %s ' % filename) grid_data = fs.find_one({'filename': filename}) else: if not _id: _id = request.args.get('_id') grid_data = fs.get(ObjectId(_id)) # print(grid_data) if grid_data: summary_ = dict_to_html(summary(grid_data=grid_data)) summary_carga = dict_to_html(carga.summary(grid_data=grid_data)) tags = tags_object.list(_id) ocorrencias = Ocorrencias(db).list(_id) else: summary_ = summary_carga = 'Arquivo não encontrado.' ocorrencias = [] return render_template('view_file.html', myfile=grid_data, summary=summary_, summary_carga=summary_carga, form_tags=form_tags, tags=tags, ocorrencias=ocorrencias)
def tag_del(): """Função para exclusão de tag na imagem Faz update no fs.files, excluindo do array o nome do usuário ativo e a tag passada, se existir. Args: _id: ObjectId do arquivo tag: String (app usa lista de códigos com tupla (id, desc)) Returns: json['success']: True ou False """ _id = request.values.get('_id') tag = request.values.get('tag') data = {'success': False} try: db = app.config['mongodb'] tags = Tags(db) data['success'] = tags.delete(_id=ObjectId(_id), usuario=current_user.id, tag=tag) data['tags'] = tags.list(ObjectId(_id)) except Exception as err: logger.error(err, exc_info=True) data['error'] = str(err) # raise return jsonify(data)
def test3_delete_tags(self): tags = Tags(mongodb) tags.add(self.inserted_id, 'ivan', '1') tags.add(self.inserted_id, 'ivan', '2') tags.add(self.inserted_id, 'ajna', '3') sucesso = tags.delete(self.inserted_id, 'ajna', '3') assert sucesso is True lista_tags = tags.list_usuario(self.inserted_id, 'ajna') assert lista_tags == []
def test1_add_tag(self): tags = Tags(mongodb) assert self.inserted_id is not None tags.add(self.inserted_id, 'ivan', '1') tags.add(self.inserted_id, 'ivan', '2') tags.add(self.inserted_id, 'ajna', '3') lista_tags = tags.list(self.inserted_id) assert type(lista_tags) is list assert len(lista_tags) == 3
def test4_tagged(self): inserted_id2 = mongodb['fs.files'].insert_one({ 'teste': True }).inserted_id try: tags = Tags(mongodb) tags.add(inserted_id2, 'ivan', '1') tags.add(inserted_id2, 'ivan', '2') tags.add(inserted_id2, 'ajna', '1') tags.add(self.inserted_id, '', '1') lista_tags = list(tags.tagged(usuario='space ghost')) assert lista_tags == [] lista_tags = list(tags.tagged(tag='42')) assert lista_tags == [] lista_tags = list(tags.tagged(tag='1')) assert len(lista_tags) == 2 lista_tags = list(tags.tagged(tag='2')) assert len(lista_tags) == 1 finally: mongodb['fs.files'].delete_one({'_id': ObjectId(inserted_id2)})
def test2_list_tags_usuario(self): tags = Tags(mongodb) tags.add(self.inserted_id, 'ivan', '1') tags.add(self.inserted_id, 'ivan', '2') tags.add(self.inserted_id, 'ajna', '3') lista_tags = tags.list_usuario(self.inserted_id, 'ivan') assert len(lista_tags) == 2 lista_tags = tags.list_usuario(self.inserted_id, 'ajna') assert len(lista_tags) == 1 assert lista_tags == [{ 'tag': '3', 'usuario': 'ajna', 'descricao': 'Auditando' }]
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 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