Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
 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 == []
Пример #4
0
 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
Пример #5
0
 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)})
Пример #6
0
 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'
     }]
Пример #7
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)
Пример #8
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