mirror of https://github.com/interlegis/sapl.git
9 changed files with 171 additions and 1 deletions
@ -0,0 +1,57 @@ |
|||||
|
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): |
||||
|
"""Used when the entire index for model is updated.""" |
||||
|
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', ' ') |
||||
|
|
||||
|
# 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,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,70 @@ |
|||||
|
{% 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> |
||||
|
|
||||
|
{% if query %} |
||||
|
<h3>Resultados</h3> |
||||
|
|
||||
|
{% for result in page.object_list %} |
||||
|
{% if result.object|search_get_model == 'm' %} |
||||
|
<p> |
||||
|
<a href="{% url 'sapl.materia:materialegislativa_detail' result.object.pk %}">{{ result.object }}</a> |
||||
|
</p> |
||||
|
|
||||
|
{% elif result.object|search_get_model == 'd' %} |
||||
|
<p> |
||||
|
<a href="{% url 'sapl.materia:documentoacessorio_detail' result.object.pk %}">{{ result.object }}</a> |
||||
|
</p> |
||||
|
{% endif %} |
||||
|
|
||||
|
{% empty %} |
||||
|
<p>No results found.</p> |
||||
|
{% endfor %} |
||||
|
|
||||
|
{% 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