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.norma.models import NormaJuridica
from sapl.parlamentares.models import Filiacao
from sapl.utils import filiacao_data
from sapl.utils import filiacao_data, SEPARADOR_HASH_PROPOSICAO
register = template.Library()
@ -96,7 +96,12 @@ def isinst(value, class_str):
@register.filter
@stringfilter
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

5
sapl/materia/forms.py

@ -39,7 +39,7 @@ from sapl.norma.models import (LegislacaoCitada, NormaJuridica,
from sapl.parlamentares.models import Legislatura
from sapl.protocoloadm.models import Protocolo, DocumentoAdministrativo
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,
MateriaPesquisaOrderingFilter, RangeWidgetOverride,
autor_label, autor_modal, gerar_hash_arquivo,
@ -1425,8 +1425,7 @@ class ProposicaoForm(forms.ModelForm):
inst.texto_original.path, str(inst.pk))
elif inst.texto_articulado.exists():
ta = inst.texto_articulado.first()
# FIXME hash para textos articulados
inst.hash_code = 'P' + ta.hash() + '/' + str(inst.pk)
inst.hash_code = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(inst.pk)
def clean(self):
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.parlamentares.models import Legislatura
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,
get_mime_type_from_file_extension, montar_row_autor,
show_results_filter_set)
@ -504,7 +504,9 @@ class ReceberProposicao(PermissionRequiredForAppCrudMixin, FormView):
if form.is_valid():
try:
# 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,
data_envio__isnull=False,
data_recebimento__isnull=True)
@ -512,17 +514,17 @@ class ReceberProposicao(PermissionRequiredForAppCrudMixin, FormView):
if proposicao.texto_articulado.exists():
ta = proposicao.texto_articulado.first()
# FIXME hash para textos articulados
hasher = 'P' + ta.hash() + '/' + str(proposicao.id)
hasher = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(proposicao.id)
else:
hasher = gerar_hash_arquivo(
proposicao.texto_original.path,
str(proposicao.id)) \
if proposicao.texto_original else None
if hasher == form.cleaned_data['cod_hash']:
if hasher == cod_hash:
return HttpResponseRedirect(
reverse('sapl.materia:proposicao-confirmar',
kwargs={
'hash': hasher.split('/')[0][1:],
'hash': hasher.split(SEPARADOR_HASH_PROPOSICAO)[0][1:],
'pk': proposicao.pk}))
except ObjectDoesNotExist:
messages.error(request, _('Proposição não encontrada!'))
@ -603,13 +605,13 @@ class ConfirmarProposicao(PermissionRequiredForAppCrudMixin, UpdateView):
if proposicao.texto_articulado.exists():
ta = proposicao.texto_articulado.first()
hasher = 'P' + ta.hash() + '/' + str(proposicao.id)
hasher = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(proposicao.id)
else:
hasher = gerar_hash_arquivo(
proposicao.texto_original.path,
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
except Exception as e:
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
# (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):
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:
break
md5.update(data)
return 'P' + md5.hexdigest() + '/' + pk
return 'P' + md5.hexdigest() + SEPARADOR_HASH_PROPOSICAO + pk
class ChoiceWithoutValidationField(forms.ChoiceField):

Loading…
Cancel
Save