Browse Source

apl sugestões de rev e outras ideias surgidas a partir daí

pull/1594/head
LeandroRoberto 8 years ago
parent
commit
d27ce8d6e0
  1. 55
      sapl/base/search_indexes.py

55
sapl/base/search_indexes.py

@ -62,18 +62,15 @@ class TextExtractField(CharField):
print(msg) print(msg)
logger.error(msg) logger.error(msg)
def file_extraction(self, arquivo): def file_extractor(self, arquivo):
r = [] if not os.path.exists(arquivo.path) or \
if not os.path.exists(arquivo.path): not os.path.splitext(arquivo.path)[1][:1]:
return r return ''
if not os.path.splitext(arquivo.path)[1][:1]:
return r
# Em ambiente de produção utiliza-se o SOLR # Em ambiente de produção utiliza-se o SOLR
if SOLR_URL: if SOLR_URL:
try: try:
r.append(self.solr_extraction(arquivo)) return self.solr_extraction(arquivo)
except Exception: except Exception:
self.print_error(arquivo) self.print_error(arquivo)
@ -81,15 +78,15 @@ class TextExtractField(CharField):
# Como ele não possui extração, faz-se uso do textract # Como ele não possui extração, faz-se uso do textract
else: else:
try: try:
r.apend(self.whoosh_extraction(arquivo)) return self.whoosh_extraction(arquivo)
except ExtensionNotSupported as e: except ExtensionNotSupported as e:
print(str(e)) print(str(e))
logger.error(str(e)) logger.error(str(e))
except Exception: except Exception:
self.print_error(arquivo) self.print_error(arquivo)
return r return ''
def ta_extraction(self, value): def ta_extractor(self, value):
r = [] r = []
for ta in value.filter(privacidade__in=[ for ta in value.filter(privacidade__in=[
STATUS_TA_PUBLIC, STATUS_TA_PUBLIC,
@ -106,26 +103,22 @@ class TextExtractField(CharField):
).values_list( ).values_list(
'rotulo_texto', flat=True) 'rotulo_texto', flat=True)
r += list(filter(lambda x: x.strip(), dispositivos)) r += list(filter(lambda x: x.strip(), dispositivos))
return r return ' '.join(r)
def extract_data(self, obj): def extract_data(self, obj):
data = [] data = ''
for attr in self.model_attr: for attr, func in self.model_attr:
if not hasattr(obj, attr): if not hasattr(obj, attr) or not hasattr(self, func):
raise Exception raise Exception
value = getattr(obj, attr) value = getattr(obj, attr)
if not value: if not value:
continue continue
data += getattr(self, func)(value)
if isinstance(value, FieldFile): return data
data.append(self.file_extraction(value))
elif hasattr(value, 'model') and value.model == TextoArticulado:
data += self.ta_extraction(value)
return ' '.join(data)
def prepare_template(self, obj): def prepare_template(self, obj):
app_label, model_name = get_model_ct_tuple(obj) app_label, model_name = get_model_ct_tuple(obj)
@ -141,7 +134,9 @@ class TextExtractField(CharField):
class DocumentoAcessorioIndex(SearchIndex, Indexable): class DocumentoAcessorioIndex(SearchIndex, Indexable):
model = DocumentoAcessorio model = DocumentoAcessorio
text = TextExtractField( text = TextExtractField(
document=True, use_template=True, model_attr='arquivo') document=True, use_template=True,
model_attr=(('arquivo', 'file_extractor'), )
)
def get_model(self): def get_model(self):
return self.model return self.model
@ -156,12 +151,20 @@ class DocumentoAcessorioIndex(SearchIndex, Indexable):
class NormaJuridicaIndex(DocumentoAcessorioIndex): class NormaJuridicaIndex(DocumentoAcessorioIndex):
model = NormaJuridica model = NormaJuridica
text = TextExtractField( text = TextExtractField(
model_attr=('texto_integral', 'texto_articulado'), document=True, use_template=True,
document=True, use_template=True, ) model_attr=(
('texto_integral', 'file_extractor'),
('texto_articulado', 'ta_extractor')
)
)
class MateriaLegislativaIndex(DocumentoAcessorioIndex): class MateriaLegislativaIndex(DocumentoAcessorioIndex):
model = MateriaLegislativa model = MateriaLegislativa
text = TextExtractField( text = TextExtractField(
model_attr=('texto_original', 'texto_articulado'), document=True, use_template=True,
document=True, use_template=True, ) model_attr=(
('texto_original', 'file_extractor'),
('texto_articulado', 'ta_extractor')
)
)

Loading…
Cancel
Save