diff --git a/sapl/audiencia/forms.py b/sapl/audiencia/forms.py index 56f4d1285..d62900df6 100755 --- a/sapl/audiencia/forms.py +++ b/sapl/audiencia/forms.py @@ -1,6 +1,7 @@ import logging from django import forms +from sapl.settings import MAX_DOC_UPLOAD_SIZE from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import transaction from django.utils.translation import ugettext_lazy as _ @@ -106,8 +107,6 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm): else: cleaned_data['numero'] = 1 - - if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']: if (self.cleaned_data['hora_fim'] < self.cleaned_data['hora_inicio']): @@ -116,6 +115,22 @@ class AudienciaForm(FileFieldCheckMixin, forms.ModelForm): self.logger.error('Hora de fim anterior à hora de início.') raise ValidationError(msg) + upload_pauta = self.cleaned_data.get('upload_pauta', False) + upload_ata = self.cleaned_data.get('upload_ata', False) + upload_anexo = self.cleaned_data.get('upload_anexo', False) + + if upload_pauta and upload_pauta.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Pauta da Audiência Pública deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_pauta.size/1024)/1024)) + + if upload_ata and upload_ata.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Ata da Audiência Pública deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_ata.size/1024)/1024)) + + if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Anexo da Audiência Pública deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + return cleaned_data @@ -140,3 +155,17 @@ class AnexoAudienciaPublicaForm(forms.ModelForm): row1, row2)) super(AnexoAudienciaPublicaForm, self).__init__( *args, **kwargs) + + def clean(self): + super(AnexoAudienciaPublicaForm, self).clean() + + if not self.is_valid(): + return self.cleaned_data + + arquivo = self.cleaned_data.get('arquivo', False) + + if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + + return self.cleaned_data diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py index e999f0b8d..9f7c449f8 100644 --- a/sapl/comissoes/forms.py +++ b/sapl/comissoes/forms.py @@ -1,6 +1,7 @@ import logging from django import forms +from sapl.settings import MAX_DOC_UPLOAD_SIZE from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError from django.db import transaction @@ -381,6 +382,23 @@ class ReuniaoForm(ModelForm): self.logger.error("A hora de término da reunião ({}) não pode ser menor que a de início ({})." .format(self.cleaned_data['hora_fim'], self.cleaned_data['hora_inicio'])) raise ValidationError(msg) + + upload_pauta = self.cleaned_data.get('upload_pauta', False) + upload_ata = self.cleaned_data.get('upload_ata', False) + upload_anexo = self.cleaned_data.get('upload_anexo', False) + + if upload_pauta and upload_pauta.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Pauta da Reunião deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_pauta.size/1024)/1024)) + + if upload_ata and upload_ata.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Ata da Reunião deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_ata.size/1024)/1024)) + + if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Anexo da Reunião deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + return self.cleaned_data @@ -412,6 +430,20 @@ class DocumentoAcessorioCreateForm(FileFieldCheckMixin, forms.ModelForm): def create_documentoacessorio(self): reuniao = Reuniao.objects.get(id=self.initial['parent_pk']) + def clean(self): + super(DocumentoAcessorioCreateForm, self).clean() + + if not self.is_valid(): + return self.cleaned_data + + arquivo = self.cleaned_data.get('arquivo', False) + + if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + + return self.cleaned_data + class DocumentoAcessorioEditForm(FileFieldCheckMixin, forms.ModelForm): @@ -424,3 +456,17 @@ class DocumentoAcessorioEditForm(FileFieldCheckMixin, forms.ModelForm): def __init__(self, user=None, **kwargs): super(DocumentoAcessorioEditForm, self).__init__(**kwargs) + + def clean(self): + super(DocumentoAcessorioEditForm, self).clean() + + if not self.is_valid(): + return self.cleaned_data + + arquivo = self.cleaned_data.get('arquivo', False) + + if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + + return self.cleaned_data diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 1cfbbb000..85e202139 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -249,6 +249,12 @@ class MateriaLegislativaForm(FileFieldCheckMixin, ModelForm): "pode ser diferente do ano na data de " "origem externa")) + texto_original = self.cleaned_data.get('texto_original', False) + + if texto_original and texto_original.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Texto Original deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (texto_original.size/1024)/1024)) + return cleaned_data def save(self, commit=False): @@ -338,6 +344,20 @@ class DocumentoAcessorioForm(FileFieldCheckMixin, ModelForm): class Meta: model = DocumentoAcessorio fields = ['tipo', 'nome', 'data', 'autor', 'ementa', 'arquivo'] + + def clean(self): + super(DocumentoAcessorioForm, self).clean() + + if not self.is_valid(): + return self.cleaned_data + + arquivo = self.cleaned_data.get('arquivo', False) + + if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + + return self.cleaned_data class RelatoriaForm(ModelForm): @@ -1801,7 +1821,6 @@ class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm): 'observacao', 'texto_original', 'materia_de_vinculo', - 'tipo_materia', 'numero_materia', 'ano_materia', @@ -1889,12 +1908,11 @@ class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm): def clean_texto_original(self): texto_original = self.cleaned_data.get('texto_original', False) + if texto_original and texto_original.size > MAX_DOC_UPLOAD_SIZE: - max_size = str(MAX_DOC_UPLOAD_SIZE / (1024 * 1024)) - self.logger.error( - "- Arquivo muito grande. ( > {0}MB )".format(max_size)) - raise ValidationError( - "Arquivo muito grande. ( > {0}MB )".format(max_size)) + raise ValidationError("O arquivo Texto Original deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (texto_original.size/1024)/1024)) + return texto_original def gerar_hash(self, inst, receber_recibo): @@ -1948,6 +1966,7 @@ class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm): self.logger.info("MateriaLegislativa vinculada (tipo_id={}, ano={}, numero={}) com sucesso." .format(tm, am, nm)) cd['materia_de_vinculo'] = materia_de_vinculo + return cd def save(self, commit=True): diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py index 0298e1a8d..803cd2751 100644 --- a/sapl/norma/forms.py +++ b/sapl/norma/forms.py @@ -199,13 +199,11 @@ class NormaJuridicaForm(FileFieldCheckMixin, ModelForm): super(NormaJuridicaForm, self).clean() texto_integral = self.cleaned_data.get('texto_integral', False) + if texto_integral and texto_integral.size > MAX_DOC_UPLOAD_SIZE: - max_size = str(MAX_DOC_UPLOAD_SIZE / (1024 * 1024)) - tam_fornecido = str(texto_integral.size / (1024 * 1024)) - self.logger.error("Arquivo muito grande ({}MB). ( Tamanho máximo permitido: {}MB )".format( - tam_fornecido, max_size)) - raise ValidationError( - "Arquivo muito grande. ( > {0}MB )".format(max_size)) + raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (texto_integral.size/1024)/1024)) + return texto_integral def save(self, commit=False): @@ -279,16 +277,16 @@ class AnexoNormaJuridicaForm(FileFieldCheckMixin, ModelForm): def clean(self): cleaned_data = super(AnexoNormaJuridicaForm, self).clean() + if not self.is_valid(): return cleaned_data + anexo_arquivo = self.cleaned_data.get('anexo_arquivo', False) + if anexo_arquivo and anexo_arquivo.size > MAX_DOC_UPLOAD_SIZE: - max_size = str(MAX_DOC_UPLOAD_SIZE / (1024 * 1024)) - tam_fornecido = str(anexo_arquivo.size / (1024 * 1024)) - self.logger.error("Arquivo muito grande ({}MB). ( Tamanho máximo permitido: {}MB )".format( - tam_fornecido, max_size)) - raise ValidationError( - "Arquivo muito grande. ( > {0}MB )".format(max_size)) + raise ValidationError("O Arquivo Anexo deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (anexo_arquivo.size/1024)/1024)) + return cleaned_data def save(self, commit=False): diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 52332dcbb..859de2850 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -5,6 +5,7 @@ from crispy_forms.bootstrap import InlineRadios, Alert, FormActions from sapl.crispy_layout_mixin import SaplFormHelper from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout, Div, Submit from django import forms +from sapl.settings import MAX_DOC_UPLOAD_SIZE from django.core.exceptions import (MultipleObjectsReturned, ObjectDoesNotExist, ValidationError) from django.db import models, transaction @@ -657,6 +658,20 @@ class DocumentoAcessorioAdministrativoForm(FileFieldCheckMixin, ModelForm): 'data': forms.DateInput(format='%d/%m/%Y') } + def clean(self): + super(DocumentoAcessorioAdministrativoForm, self).clean() + + if not self.is_valid(): + return self.cleaned_data + + arquivo = self.cleaned_data.get('arquivo', False) + + if arquivo and arquivo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (arquivo.size/1024)/1024)) + + return self.cleaned_data + class TramitacaoAdmForm(ModelForm): @@ -1142,6 +1157,12 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): ' documento vinculado' % (numero_protocolo, ano_protocolo))) + texto_integral = self.cleaned_data.get('texto_integral', False) + + if texto_integral and texto_integral.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Texto Integral deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (texto_integral.size/1024)/1024)) + return self.cleaned_data def save(self, commit=True): diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 339afce51..01f0c3636 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -11,6 +11,7 @@ from django.forms.widgets import CheckboxSelectMultiple from django.utils.translation import ugettext_lazy as _ import django_filters +from sapl.settings import MAX_DOC_UPLOAD_SIZE from sapl.base.models import Autor, TipoAutor from sapl.crispy_layout_mixin import SaplFormHelper from sapl.crispy_layout_mixin import form_actions, to_row, SaplFormLayout @@ -149,6 +150,24 @@ class SessaoPlenariaForm(FileFieldCheckMixin, ModelForm): "entre a data de início e fim tanto da " "Legislatura quanto da Sessão Legislativa.") + + upload_pauta = self.cleaned_data.get('upload_pauta', False) + upload_ata = self.cleaned_data.get('upload_ata', False) + upload_anexo = self.cleaned_data.get('upload_anexo', False) + + if upload_pauta and upload_pauta.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Pauta da Sessão deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_pauta.size/1024)/1024)) + + if upload_ata and upload_ata.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Ata da Sessão deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_ata.size/1024)/1024)) + + if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Anexo da Sessão deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + + return self.cleaned_data @@ -656,6 +675,12 @@ class OradorForm(ModelForm): "Já existe orador nesta posição de ordem de pronunciamento" )) + upload_anexo = self.cleaned_data.get('upload_anexo', False) + + if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Anexo do Orador deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + return self.cleaned_data class Meta: @@ -691,6 +716,12 @@ class OradorExpedienteForm(ModelForm): raise ValidationError(_( 'Já existe orador nesta posição da ordem de pronunciamento')) + upload_anexo = self.cleaned_data.get('upload_anexo', False) + + if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Anexo do Orador deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + return self.cleaned_data class Meta: @@ -728,6 +759,12 @@ class OradorOrdemDiaForm(ModelForm): "Já existe orador nesta posição de ordem de pronunciamento" )) + upload_anexo = self.cleaned_data.get('upload_anexo', False) + + if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Anexo do Orador deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + return self.cleaned_data class Meta: @@ -966,6 +1003,12 @@ class JustificativaAusenciaForm(ModelForm): sessao_plenaria = self.instance.sessao_plenaria + upload_anexo = self.cleaned_data.get('upload_anexo', False) + + if upload_anexo and upload_anexo.size > MAX_DOC_UPLOAD_SIZE: + raise ValidationError("O arquivo Anexo de Justificativa deve ser menor que {0:.1f} mb, o tamanho atual desse arquivo é {1:.1f} mb" \ + .format((MAX_DOC_UPLOAD_SIZE/1024)/1024, (upload_anexo.size/1024)/1024)) + if not sessao_plenaria.finalizada or sessao_plenaria.finalizada is None: raise ValidationError( "A sessão deve estar finalizada para registrar uma Ausência") diff --git a/sapl/settings.py b/sapl/settings.py index a4c8fa2d9..45f62fdba 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -239,7 +239,7 @@ DEFAULT_FROM_EMAIL = config('DEFAULT_FROM_EMAIL', cast=str, default='') SERVER_EMAIL = config('SERVER_EMAIL', cast=str, default='') EMAIL_RUNNING = None -MAX_DOC_UPLOAD_SIZE = 60 * 1024 * 1024 # 60MB +MAX_DOC_UPLOAD_SIZE = 80 * 1024 * 1024 # 80MB MAX_IMAGE_UPLOAD_SIZE = 2 * 1024 * 1024 # 2MB # Internationalization