diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 79ddd0387..eebbab2e2 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -199,7 +199,7 @@ class UsuarioEditForm(ModelForm): return data -class SessaoLegislativaForm(ModelForm): +class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm): logger = logging.getLogger(__name__) class Meta: diff --git a/sapl/base/views.py b/sapl/base/views.py index f28596ecd..e41b9e9de 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -9,7 +9,7 @@ from django.contrib.auth import get_user_model from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.models import Group, User from django.contrib.auth.tokens import default_token_generator -from django.core.exceptions import ObjectDoesNotExist, PermissionDenied +from django.core.exceptions import ObjectDoesNotExist, PermissionDenied, ValidationError from django.core.mail import send_mail from django.core.urlresolvers import reverse, reverse_lazy from django.db import connection @@ -1499,8 +1499,11 @@ class AppConfigCrud(CrudAux): def gerar_hash(self, inst): inst.save() if inst.texto_original: - inst.hash_code = gerar_hash_arquivo( - inst.texto_original.path, str(inst.pk)) + try: + inst.hash_code = gerar_hash_arquivo( + inst.texto_original.path, str(inst.pk)) + except IOError: + raise ValidationError("Existem proposicoes com arquivos inexistentes.") elif inst.texto_articulado.exists(): ta = inst.texto_articulado.first() inst.hash_code = 'P' + ta.hash() + SEPARADOR_HASH_PROPOSICAO + str(inst.pk) diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py index cef967102..9b0e69d72 100644 --- a/sapl/comissoes/forms.py +++ b/sapl/comissoes/forms.py @@ -12,6 +12,7 @@ from sapl.base.models import Autor, TipoAutor from sapl.comissoes.models import (Comissao, Composicao, DocumentoAcessorio, Participacao, Reuniao, Periodo) from sapl.parlamentares.models import Legislatura, Mandato, Parlamentar +from sapl.utils import FileFieldCheckMixin class ComposicaoForm(forms.ModelForm): @@ -382,7 +383,7 @@ class ReuniaoForm(ModelForm): return self.cleaned_data -class DocumentoAcessorioCreateForm(forms.ModelForm): +class DocumentoAcessorioCreateForm(FileFieldCheckMixin, forms.ModelForm): parent_pk = forms.CharField(required=False) # widget=forms.HiddenInput()) @@ -404,7 +405,7 @@ class DocumentoAcessorioCreateForm(forms.ModelForm): reuniao = Reuniao.objects.get(id=self.initial['parent_pk']) -class DocumentoAcessorioEditForm(forms.ModelForm): +class DocumentoAcessorioEditForm(FileFieldCheckMixin, forms.ModelForm): parent_pk = forms.CharField(required=False) # widget=forms.HiddenInput()) diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index ad1d77e46..f934cb8d3 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -355,7 +355,7 @@ class AcompanhamentoMateriaForm(ModelForm): super(AcompanhamentoMateriaForm, self).__init__(*args, **kwargs) -class DocumentoAcessorioForm(ModelForm): +class DocumentoAcessorioForm(FileFieldCheckMixin, ModelForm): data = forms.DateField(required=True) class Meta: @@ -1345,7 +1345,7 @@ class TipoProposicaoSelect(Select): return option -class ProposicaoForm(forms.ModelForm): +class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm): logger = logging.getLogger(__name__) diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py index 8766d6216..5f5e0aa37 100644 --- a/sapl/norma/forms.py +++ b/sapl/norma/forms.py @@ -271,7 +271,7 @@ class AutoriaNormaForm(ModelForm): return cd -class AnexoNormaJuridicaForm(ModelForm): +class AnexoNormaJuridicaForm(FileFieldCheckMixin, ModelForm): class Meta: model = AnexoNormaJuridica fields = ['norma', 'anexo_arquivo', 'assunto_anexo'] diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 6660e32cb..0e62fb877 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -23,7 +23,8 @@ from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, AnoNumeroOrderingFilter, RangeWidgetOverride, autor_label, autor_modal, choice_anos_com_protocolo, choice_force_optional, choice_anos_com_documentoadministrativo, - FilterOverridesMetaMixin, choice_anos_com_materias) + FilterOverridesMetaMixin, choice_anos_com_materias, + FileFieldCheckMixin) from .models import (AcompanhamentoDocumento, DocumentoAcessorioAdministrativo, DocumentoAdministrativo, @@ -626,7 +627,7 @@ class ProtocoloMateriaForm(ModelForm): self.fields['data_hora_manual'].widget = forms.HiddenInput() -class DocumentoAcessorioAdministrativoForm(ModelForm): +class DocumentoAcessorioAdministrativoForm(FileFieldCheckMixin, ModelForm): class Meta: model = DocumentoAcessorioAdministrativo @@ -782,7 +783,7 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): return self.cleaned_data -class DocumentoAdministrativoForm(ModelForm): +class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): logger = logging.getLogger(__name__) diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index b576545d2..18df83b58 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -20,7 +20,8 @@ from sapl.materia.models import (MateriaLegislativa, StatusTramitacao, from sapl.parlamentares.models import Parlamentar, Mandato from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, MateriaPesquisaOrderingFilter, autor_label, - autor_modal, timezone, choice_anos_com_sessaoplenaria) + autor_modal, timezone, choice_anos_com_sessaoplenaria, + FileFieldCheckMixin) from .models import (Bancada, Bloco, ExpedienteMateria, JustificativaAusencia, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria, @@ -45,7 +46,7 @@ ORDENACAO_RESUMO = [('cont_mult', 'Conteúdo Multimídia'), ('ocorr_sessao', 'Ocorrências da Sessão')] -class SessaoPlenariaForm(ModelForm): +class SessaoPlenariaForm(FileFieldCheckMixin, ModelForm): class Meta: model = SessaoPlenaria