Browse Source

Fix #2333 (#2336)

* Fix #2333

* Remove comentário não mais necessário
pull/2341/head
Victor Fabre 6 years ago
committed by Edward
parent
commit
a2767b6859
  1. 9
      sapl/base/templatetags/common_tags.py
  2. 5
      sapl/materia/forms.py
  3. 16
      sapl/materia/views.py
  4. 6
      sapl/utils.py

9
sapl/base/templatetags/common_tags.py

@ -6,7 +6,7 @@ from sapl.base.models import AppConfig
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa, Proposicao from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa, Proposicao
from sapl.norma.models import NormaJuridica from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import Filiacao from sapl.parlamentares.models import Filiacao
from sapl.utils import filiacao_data from sapl.utils import filiacao_data, SEPARADOR_HASH_PROPOSICAO
register = template.Library() register = template.Library()
@ -96,7 +96,12 @@ def isinst(value, class_str):
@register.filter @register.filter
@stringfilter @stringfilter
def strip_hash(value): def strip_hash(value):
return value.split('/')[0][1:] vet = value.split('/')
if len(vet) == 2:
return vet[0][1:]
else:
return value.split(SEPARADOR_HASH_PROPOSICAO)[0][1:]
@register.filter @register.filter

5
sapl/materia/forms.py

@ -39,7 +39,7 @@ from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
from sapl.parlamentares.models import Legislatura from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo
from sapl.settings import MAX_DOC_UPLOAD_SIZE from sapl.settings import MAX_DOC_UPLOAD_SIZE
from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, SEPARADOR_HASH_PROPOSICAO,
ChoiceWithoutValidationField, ChoiceWithoutValidationField,
MateriaPesquisaOrderingFilter, RangeWidgetOverride, MateriaPesquisaOrderingFilter, RangeWidgetOverride,
autor_label, autor_modal, gerar_hash_arquivo, autor_label, autor_modal, gerar_hash_arquivo,
@ -1425,8 +1425,7 @@ class ProposicaoForm(forms.ModelForm):
inst.texto_original.path, str(inst.pk)) inst.texto_original.path, str(inst.pk))
elif inst.texto_articulado.exists(): elif inst.texto_articulado.exists():
ta = inst.texto_articulado.first() ta = inst.texto_articulado.first()
# FIXME hash para textos articulados inst.hash_code = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(inst.pk)
inst.hash_code = 'P' + ta.hash() + '/' + str(inst.pk)
def clean(self): def clean(self):
super(ProposicaoForm, self).clean() super(ProposicaoForm, self).clean()

16
sapl/materia/views.py

@ -42,7 +42,7 @@ from sapl.materia.forms import (AnexadaForm, AutoriaForm,
from sapl.norma.models import LegislacaoCitada from sapl.norma.models import LegislacaoCitada
from sapl.parlamentares.models import Legislatura from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo from sapl.protocoloadm.models import Protocolo
from sapl.utils import (YES_NO_CHOICES, autor_label, autor_modal, from sapl.utils import (YES_NO_CHOICES, autor_label, autor_modal, SEPARADOR_HASH_PROPOSICAO,
gerar_hash_arquivo, get_base_url, gerar_hash_arquivo, get_base_url,
get_mime_type_from_file_extension, montar_row_autor, get_mime_type_from_file_extension, montar_row_autor,
show_results_filter_set) show_results_filter_set)
@ -504,7 +504,9 @@ class ReceberProposicao(PermissionRequiredForAppCrudMixin, FormView):
if form.is_valid(): if form.is_valid():
try: try:
# A ultima parte do código deve ser a pk da Proposicao # A ultima parte do código deve ser a pk da Proposicao
id = form.cleaned_data["cod_hash"].split("/")[1] cod_hash = form.cleaned_data["cod_hash"]. \
replace('/', SEPARADOR_HASH_PROPOSICAO)
id = cod_hash.split(SEPARADOR_HASH_PROPOSICAO)[1]
proposicao = Proposicao.objects.get(id=id, proposicao = Proposicao.objects.get(id=id,
data_envio__isnull=False, data_envio__isnull=False,
data_recebimento__isnull=True) data_recebimento__isnull=True)
@ -512,17 +514,17 @@ class ReceberProposicao(PermissionRequiredForAppCrudMixin, FormView):
if proposicao.texto_articulado.exists(): if proposicao.texto_articulado.exists():
ta = proposicao.texto_articulado.first() ta = proposicao.texto_articulado.first()
# FIXME hash para textos articulados # FIXME hash para textos articulados
hasher = 'P' + ta.hash() + '/' + str(proposicao.id) hasher = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(proposicao.id)
else: else:
hasher = gerar_hash_arquivo( hasher = gerar_hash_arquivo(
proposicao.texto_original.path, proposicao.texto_original.path,
str(proposicao.id)) \ str(proposicao.id)) \
if proposicao.texto_original else None if proposicao.texto_original else None
if hasher == form.cleaned_data['cod_hash']: if hasher == cod_hash:
return HttpResponseRedirect( return HttpResponseRedirect(
reverse('sapl.materia:proposicao-confirmar', reverse('sapl.materia:proposicao-confirmar',
kwargs={ kwargs={
'hash': hasher.split('/')[0][1:], 'hash': hasher.split(SEPARADOR_HASH_PROPOSICAO)[0][1:],
'pk': proposicao.pk})) 'pk': proposicao.pk}))
except ObjectDoesNotExist: except ObjectDoesNotExist:
messages.error(request, _('Proposição não encontrada!')) messages.error(request, _('Proposição não encontrada!'))
@ -603,13 +605,13 @@ class ConfirmarProposicao(PermissionRequiredForAppCrudMixin, UpdateView):
if proposicao.texto_articulado.exists(): if proposicao.texto_articulado.exists():
ta = proposicao.texto_articulado.first() ta = proposicao.texto_articulado.first()
hasher = 'P' + ta.hash() + '/' + str(proposicao.id) hasher = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(proposicao.id)
else: else:
hasher = gerar_hash_arquivo( hasher = gerar_hash_arquivo(
proposicao.texto_original.path, proposicao.texto_original.path,
str(proposicao.pk)) if proposicao.texto_original else None str(proposicao.pk)) if proposicao.texto_original else None
if hasher == 'P%s/%s' % (self.kwargs['hash'], proposicao.pk): if hasher == 'P%s%s%s' % (self.kwargs['hash'], SEPARADOR_HASH_PROPOSICAO, proposicao.pk):
self.object = proposicao self.object = proposicao
except Exception as e: except Exception as e:
self.logger.error("user=" + username + ". Objeto Proposicao com atributos (pk={}, data_envio=Not Null, " self.logger.error("user=" + username + ". Objeto Proposicao com atributos (pk={}, data_envio=Not Null, "

6
sapl/utils.py

@ -28,6 +28,10 @@ from unipath.path import Path
from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row
# (26/10/2018): O separador foi mudador de '/' para 'K'
# por conta dos leitores de códigos de barra, que trocavam
# a '/' por '&' ou ';'
SEPARADOR_HASH_PROPOSICAO = 'K'
def pil_image(source, exif_orientation=False, **options): def pil_image(source, exif_orientation=False, **options):
return source_generators.pil_image(source, exif_orientation, **options) return source_generators.pil_image(source, exif_orientation, **options)
@ -484,7 +488,7 @@ def gerar_hash_arquivo(arquivo, pk, block_size=2**20):
if not data: if not data:
break break
md5.update(data) md5.update(data)
return 'P' + md5.hexdigest() + '/' + pk return 'P' + md5.hexdigest() + SEPARADOR_HASH_PROPOSICAO + pk
class ChoiceWithoutValidationField(forms.ChoiceField): class ChoiceWithoutValidationField(forms.ChoiceField):

Loading…
Cancel
Save