mirror of https://github.com/interlegis/sapl.git
Browse Source
* Inicia a pesquisa textual * Melhora o front-end da pesquisa textual * Bug fix * Ajusta alguns detalhes e cria botão de acesso a pesquisa * Adiciona signals para atualizar o index * Inicia a pesquisa textual * Melhora o front-end da pesquisa textual * Bug fix * Ajusta alguns detalhes e cria botão de acesso a pesquisa * Adiciona signals para atualizar o index * Insere ao README o comando de indexação * Atualiza versão do Haystack * Remove pacote haystack antigo Coloca url de search no padrãopull/978/head
eduardocalil
8 years ago
committed by
Edward
13 changed files with 235 additions and 1 deletions
@ -0,0 +1,58 @@ |
|||
import textract |
|||
|
|||
from haystack import indexes |
|||
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa |
|||
from django.template import Context, loader |
|||
|
|||
|
|||
class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable): |
|||
text = indexes.CharField(document=True, use_template=True) |
|||
|
|||
filename = 'arquivo' |
|||
model = DocumentoAcessorio |
|||
template_name = 'materia/documentoacessorio_text.txt' |
|||
|
|||
def get_model(self): |
|||
return self.model |
|||
|
|||
def index_queryset(self, using=None): |
|||
return self.get_model().objects.all() |
|||
|
|||
def prepare(self, obj): |
|||
if not self.filename or not self.model or not self.template_name: |
|||
raise Exception |
|||
|
|||
data = super(DocumentoAcessorioIndex, self).prepare(obj) |
|||
|
|||
arquivo = getattr(obj, self.filename) |
|||
|
|||
if arquivo: |
|||
try: |
|||
arquivo.open() |
|||
except OSError: |
|||
return self.prepared_data |
|||
|
|||
extracted_data = textract.process( |
|||
arquivo.path).decode( |
|||
'utf-8').replace('\n', ' ') |
|||
|
|||
extracted_data = extracted_data.replace('\t', ' ') |
|||
|
|||
# Now we'll finally perform the template processing to render the |
|||
# text field with *all* of our metadata visible for templating: |
|||
t = loader.select_template(( |
|||
'search/indexes/' + self.template_name, )) |
|||
data['text'] = t.render(Context({'object': obj, |
|||
'extracted': extracted_data})) |
|||
|
|||
return data |
|||
|
|||
return self.prepared_data |
|||
|
|||
|
|||
class MateriaLegislativaIndex(DocumentoAcessorioIndex): |
|||
text = indexes.CharField(document=True, use_template=True) |
|||
|
|||
filename = 'texto_original' |
|||
model = MateriaLegislativa |
|||
template_name = 'materia/materialegislativa_text.txt' |
@ -0,0 +1,29 @@ |
|||
from django.db.models.signals import post_delete, post_save |
|||
from sapl.settings import PROJECT_DIR |
|||
from subprocess import PIPE, call |
|||
from threading import Thread |
|||
|
|||
|
|||
from .models import MateriaLegislativa, DocumentoAcessorio |
|||
|
|||
|
|||
class UpdateIndexCommand(Thread): |
|||
def run(self): |
|||
call([PROJECT_DIR.child('manage.py'), 'update_index'], |
|||
stdout=PIPE) |
|||
|
|||
|
|||
def save_texto(sender, instance, **kwargs): |
|||
update_index = UpdateIndexCommand() |
|||
update_index.start() |
|||
|
|||
|
|||
def delete_texto(sender, instance, **kwargs): |
|||
update_index = UpdateIndexCommand() |
|||
update_index.start() |
|||
|
|||
|
|||
post_save.connect(save_texto, sender=MateriaLegislativa) |
|||
post_save.connect(save_texto, sender=DocumentoAcessorio) |
|||
post_delete.connect(delete_texto, sender=MateriaLegislativa) |
|||
post_delete.connect(delete_texto, sender=DocumentoAcessorio) |
@ -0,0 +1,7 @@ |
|||
{% for k, v in extracted.metadata.items %} |
|||
{% for val in v %} |
|||
{{ k }}: {{ val|safe }} |
|||
{% endfor %} |
|||
{% endfor %} |
|||
|
|||
{{ extracted|striptags|safe }} |
@ -0,0 +1,7 @@ |
|||
{% for k, v in extracted.metadata.items %} |
|||
{% for val in v %} |
|||
{{ k }}: {{ val|safe }} |
|||
{% endfor %} |
|||
{% endfor %} |
|||
|
|||
{{ extracted|striptags|safe }} |
@ -0,0 +1,95 @@ |
|||
{% extends 'crud/form.html' %} |
|||
{% load crispy_forms_tags %} |
|||
{% load common_tags %} |
|||
|
|||
{% block base_content %} |
|||
<h1><legend>Pesquisa Textual</legend></h1> |
|||
|
|||
</br> |
|||
|
|||
<form method="get" action="."> |
|||
<div class="row container-detail clearfix"> |
|||
|
|||
<div class="row-fluid"> |
|||
<div class="col-md-8"> |
|||
{{ form.q|as_crispy_field }} |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row-fluid"> |
|||
<div class="col-md-8"> |
|||
</br> |
|||
<h4> Em quais tipos de documento deseja pesquisar?</h4> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row-fluid"> |
|||
<div class="col-md-8"> |
|||
{{ form.models }} |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
<div class="row-fluid"> |
|||
<div class="col-md-12"> |
|||
<input class="btn btn-primary pull-right" type="submit" value="Pesquisar"> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
</br> |
|||
{% if query %} |
|||
<table class="table table-striped table-bordered"> |
|||
<thead class="thead-default"> |
|||
<tr><td><h3>Resultados</h3></td></tr> |
|||
</thead> |
|||
|
|||
{% for result in page.object_list %} |
|||
<tr> |
|||
<td> |
|||
{% if result.object|search_get_model == 'm' %} |
|||
<p> |
|||
<strong>Matéria Legislativa: </strong> <a href="{% url 'sapl.materia:materialegislativa_detail' result.object.pk %}">{{ result.object }}</a></br> |
|||
|
|||
{% if result.object.texto_original %} |
|||
<strong>Texto Original:</strong> <a href="{{result.object.texto_original.url}}"> Clique aqui </a></br> |
|||
{% else %} |
|||
<strong>O texto desta matéria foi removido recentemente. Em breve ela sairá desta listagem.</strong></br> |
|||
{% endif %} |
|||
</p> |
|||
|
|||
{% elif result.object|search_get_model == 'd' %} |
|||
<p> |
|||
<strong> Documento Acessório: </strong><a href="{% url 'sapl.materia:documentoacessorio_detail' result.object.pk %}">{{ result.object }}</a></br> |
|||
{% if result.object.arquivo %} |
|||
<strong>Texto Original:</strong> <a href="{{result.object.arquivo.url}}"> Clique aqui </a></br> |
|||
{% else %} |
|||
<strong>O texto deste documento foi removido recentemente. Em breve ele sairá desta listagem.</strong></br> |
|||
{% endif %} |
|||
</p> |
|||
{% endif %} |
|||
</td> |
|||
</tr> |
|||
|
|||
{% empty %} |
|||
<h3> Nenhum texto encontrado! </h3> |
|||
<tr> |
|||
<td> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
|
|||
{% if page.has_previous or page.has_next %} |
|||
<div> |
|||
{% if page.has_previous %}<a href="?q={{ query }}&page={{ page.previous_page_number }}">{% endif %}« Previous{% if page.has_previous %}</a>{% endif %} |
|||
| |
|||
{% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Next »{% if page.has_next %}</a>{% endif %} |
|||
</div> |
|||
{% endif %} |
|||
{% else %} |
|||
{# Show some example queries to run, maybe query syntax, something else? #} |
|||
{% endif %} |
|||
</form> |
|||
{% endblock %} |
Loading…
Reference in new issue