Browse Source

Inicia a pesquisa textual

pull/980/head
Eduardo Calil 9 years ago
committed by Edward Ribeiro
parent
commit
fe8b3a14e9
  1. 1
      .gitignore
  2. 4
      requirements/requirements.txt
  3. 57
      sapl/base/search_indexes.py
  4. 11
      sapl/base/templatetags/common_tags.py
  5. 2
      sapl/base/urls.py
  6. 11
      sapl/settings.py
  7. 7
      sapl/templates/search/indexes/materia/documentoacessorio_text.txt
  8. 7
      sapl/templates/search/indexes/materia/materialegislativa_text.txt
  9. 70
      sapl/templates/search/search.html

1
.gitignore

@ -92,3 +92,4 @@ collected_static
bower
bower_components
media
whoosh/

4
requirements/requirements.txt

@ -13,19 +13,23 @@ django-extensions==1.6.7
django-extra-views==0.8.0
django-filter==0.15.3
django-floppyforms==1.6.2
django-haystack==2.5.1
django-model-utils==2.5
django-sass-processor==0.4.6
djangorestframework
drfdocs
easy-thumbnails==2.3
git+git://github.com/interlegis/trml2pdf.git
haystack==0.36
libsass==0.11.1
psycopg2==2.6.2
python-decouple==3.0
pytz==2016.4
pyyaml==3.11
rtyaml==0.0.3
textract==1.5.0
unipath==1.1
python-magic==0.4.12
gunicorn==19.6.0
django-reversion==2.0.8
whoosh==2.7.4

57
sapl/base/search_indexes.py

@ -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'

11
sapl/base/templatetags/common_tags.py

@ -2,6 +2,7 @@ from compressor.utils import get_class
from django import template
from sapl.base.models import AppConfig
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa
from sapl.parlamentares.models import Filiacao
register = template.Library()
@ -137,3 +138,13 @@ def cronometro_to_seconds(value):
@register.filter
def to_list_pk(object_list):
return [o.pk for o in object_list]
@register.filter
def search_get_model(object):
if type(object) == MateriaLegislativa:
return 'm'
elif type(object) == DocumentoAcessorio:
return 'd'
return None

2
sapl/base/urls.py

@ -99,4 +99,6 @@ urlpatterns = [
name='login'),
url(r'^logout/$', views.logout, {'next_page': '/login'}, name='logout'),
url(r'^search/', include('haystack.urls')),
] + recuperar_senha

11
sapl/settings.py

@ -76,12 +76,23 @@ INSTALLED_APPS = (
'crispy_forms',
'easy_thumbnails',
'floppyforms',
'haystack',
'sass_processor',
'rest_framework',
'reversion',
'whoosh',
) + SAPL_APPS
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': PROJECT_DIR.child('whoosh'),
},
}
if DEBUG:
INSTALLED_APPS += ('debug_toolbar', 'rest_framework_docs',)

7
sapl/templates/search/indexes/materia/documentoacessorio_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 }}

7
sapl/templates/search/indexes/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 }}

70
sapl/templates/search/search.html

@ -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 }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>{% endif %}
|
{% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% if page.has_next %}</a>{% endif %}
</div>
{% endif %}
{% else %}
{# Show some example queries to run, maybe query syntax, something else? #}
{% endif %}
</form>
{% endblock %}
Loading…
Cancel
Save