예제 #1
0
파일: views.py 프로젝트: umoqnier/Esquite
def index(request):
    """**Muestra la vista raíz del corpus paralelo**

    :param request: Objeto ``HttpRequets`` para pasar el estado de la app
                    a través del sistema
    :type: ``HttpRequest``
    :return: Vista principal
    """
    # Formulario de búsqueda en django
    form = SearchPostForm()
    # Agregando variantes desde el servidor
    current_variants = get_variants()
    if current_variants['status'] == 'success':
        del current_variants['status']
        if len(current_variants):
            str_variants = ", ".join(list(current_variants.keys()))
            LOGGER.debug(f"Variantes: {str_variants}")
            form.fields['variante'].choices = current_variants.items()
        else:
            LOGGER.debug("No hay variantes")
            form.fields['variante'].choices = current_variants.items()
            form.fields['variante'].widget.attrs['disabled'] = True
    elif current_variants['status'] == 'error':
        del current_variants['status']
        LOGGER.error("Al obtener variantes de Elasticsearch")
        messages.error(request, "Error de conexión a servidores :(")
    return render(request, "index.html", {
        'form': form,
        'total_variants': len(current_variants)
    })
예제 #2
0
파일: views.py 프로젝트: jolivaresc/Esquite
def doc_preview(request, _id):
    """**Vista que muestra el contenido de un documento particular**

    Muestra los renglones alineados que componen un documento en
    particular del corpus. Cada renglon tiene dos acciones, eliminar y
    editar.

    * `:param request:` Objeto *HttpRequets* para pasar el estado de la app a
        través del sistema
    * `:type:` *HttpRequest*
    * `:param _id:` identificador del documento a visualizar
    * `:type:` *str*
    * `:return:` Contenido de un documento
    """
    query = query_kreator("document_id:" + _id)
    r = es.search(index=settings.INDEX, body=query)
    corpus = data_processor(r['hits'], "NONE", "")
    data = r['hits']['hits'][0]['_source']
    name = data['document_name']
    doc = get_document_info(_id)
    file = doc['file']
    current_variants = get_variants()
    return render(
        request, "corpus-admin/doc-preview.html", {
            "doc_data": corpus,
            "doc_name": name,
            "doc_file": file,
            "total": len(corpus),
            "id": _id,
            "total_variants": len(current_variants)
        })
예제 #3
0
def doc_preview(request, _id):
    """**Vista que muestra el contenido de un documento particular**

    Muestra los renglones alineados que componen un documento en
    particular del corpus. Cada renglon tiene dos acciones, eliminar y
    editar.

    * `:param request:` Objeto *HttpRequets* para pasar el estado de la app a
        través del sistema
    * `:type:` *HttpRequest*
    * `:param _id:` identificador del documento a visualizar
    * `:type:` *str*
    * `:return:` Contenido de un documento
    """
    query = query_kreator("document_id:" + _id)
    r = es.search(index=settings.INDEX, body=query)
    corpus = data_processor(r['hits'], "NONE", "")
    data = r['hits']['hits'][0]['_source']
    name = data['document_name']
    doc = get_document_info(_id)
    file = doc['file']
    # TODO: Refactor variants across the backend
    current_variants = get_variants()
    if len(current_variants) == 1:
        current_variants = {}
    # TODO: Make a function for this
    mappings = es.indices.get_mapping(index=settings.INDEX)
    del mappings[settings.INDEX]['mappings']['properties']['document_id']
    del mappings[settings.INDEX]['mappings']['properties']['pdf_file']
    del mappings[settings.INDEX]['mappings']['properties']['document_name']
    fields = list(mappings[settings.INDEX]['mappings']['properties'].keys())
    # Ordening fields
    fields.insert(0, fields.pop(fields.index("l1")))
    fields.insert(1, fields.pop(fields.index("l2")))
    fields.insert(2, fields.pop(fields.index("variant")))
    return render(
        request, "corpus-admin/doc-preview.html", {
            "doc_data": corpus,
            "doc_name": name,
            "doc_file": file,
            "total": len(corpus),
            "id": _id,
            "total_variants": len(current_variants),
            "fields": fields
        })
예제 #4
0
def list_docs(request):
    """
    **Esta vista muestra todos los documentos que conforman el corpus
    paralelo**

    * `:param request:` Objeto *HttpRequets* para pasar el estado de la app a
        través del sistema
    * `:type:` *HttpRequest*
    * `:return:` Lista de documentos del corpus con acciones por documento
    """
    # TODO: Excepcion cuando no se pueda conectar al indice del corpus
    LOGGER.info("Listando Documentos")
    total, docs = get_corpus_info(request)
    variants = get_variants()
    # TODO: Notificar de error al traer variantes
    del variants['status']
    LOGGER.info("Total::{}".format(total))
    return render(request, "corpus-admin/docs-list.html",
                  {'total': total, 'docs': docs, 'variants': variants})
예제 #5
0
def list_docs(request):
    """
    **Esta vista muestra todos los documentos que conforman el corpus
    paralelo**

    * `:param request:` Objeto *HttpRequets* para pasar el estado de la app a
        través del sistema
    * `:type:` *HttpRequest*
    * `:return:` Lista de documentos del corpus con acciones por documento
    """
    # Errores en las variables de entorno del proyecto
    if settings.WRONG_CONFIGS['error']:
        msg = "Configuraciones necesarias para sitio no se encuentran en \
        el archivo <code>env.yaml</code>."

        str_fields = ", ".join(settings.WRONG_CONFIGS['error'])
        msg += f" Modifica los campos: {str_fields} o ejecuta el asistente \
            <code>wizard.py</code>."

        messages.error(request, msg)
        conf_docs_link = "https://esquite.readthedocs.io/es/latest/wizard.html#configuraciones"
        messages.info(
            request,
            f"TIP: Revisar la documentación <a href='{conf_docs_link}'>aqui<a>"
        )
    if "COLORS" in settings.WRONG_CONFIGS['warn']:
        messages.warning(
            request, "Los colores del proyecto no fueron \
                         configurados")
    total, docs = get_corpus_info(request)
    variants = get_variants()
    del variants['status']
    LOGGER.info("Total::{}".format(total))
    return render(request, "corpus-admin/docs-list.html", {
        'total': total,
        'docs': docs,
        'variants': variants
    })
예제 #6
0
from rest_framework import serializers
from searcher.helpers import get_variants

variants = get_variants()
if variants['status'] == 'success':
    del variants['status']
    if len(variants):
        VARIANTS = variants.items()
    else:
        VARIANTS = []
else:
    VARIANTS = []

class SearchSerializer(serializers.Serializer):
    l1 = serializers.CharField(required=True)
    l2 = serializers.CharField(required=True)
    variants = serializers.ChoiceFields(choices=VARIANTS, required=False,
                                        allow_blank=True)