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