From b3d3666e62a59f2344050b6aeb83d0bbfdc84df9 Mon Sep 17 00:00:00 2001 From: Leandro Roberto Date: Wed, 3 Feb 2021 11:01:02 -0300 Subject: [PATCH] =?UTF-8?q?altera=C3=A7=C3=B5es=20de=20IDE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/base/forms.py | 54 +++++++++++++++++++------------ sapl/materia/forms.py | 21 ++++++------ sapl/protocoloadm/forms.py | 7 ++-- sapl/utils.py | 66 +++++++++++++++++++++----------------- 4 files changed, 83 insertions(+), 65 deletions(-) diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 25b8dda55..80e6c530a 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -116,7 +116,8 @@ class UsuarioCreateForm(ModelForm): data = self.cleaned_data if data['password1'] != data['password2']: - self.logger.warning('Erro de validação. Senhas informadas são diferentes.') + self.logger.warning( + 'Erro de validação. Senhas informadas são diferentes.') raise ValidationError('Senhas informadas são diferentes') return data @@ -235,7 +236,8 @@ class UsuarioEditForm(ModelForm): self.helper = SaplFormHelper() self.helper.layout = Layout( 'username', - FieldWithButtons('token', StrictButton('Renovar', id="renovar-token", css_class="btn-outline-primary")), + FieldWithButtons('token', StrictButton( + 'Renovar', id="renovar-token", css_class="btn-outline-primary")), rows, form_actions( more=[ @@ -250,7 +252,8 @@ class UsuarioEditForm(ModelForm): data = self.cleaned_data if data['password1'] and data['password1'] != data['password2']: - self.logger.warning("Erro de validação. Senhas informadas são diferentes.") + self.logger.warning( + "Erro de validação. Senhas informadas são diferentes.") raise ValidationError('Senhas informadas são diferentes') return data @@ -315,7 +318,8 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm): if numero <= ult and flag_edit: self.logger.warning( 'O número da SessaoLegislativa ({}) é menor ou igual ' - 'que o de Sessões Legislativas passadas ({})'.format(numero, ult) + 'que o de Sessões Legislativas passadas ({})'.format( + numero, ult) ) raise ValidationError('O número da Sessão Legislativa não pode ser menor ou igual ' 'que o de Sessões Legislativas passadas') @@ -325,7 +329,8 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm): self.logger.warning( 'A data de início ({}) da SessaoLegislativa está compreendida ' 'fora da data início ({}) e fim ({}) da Legislatura ' - 'selecionada'.format(data_inicio, data_inicio_leg, data_fim_leg) + 'selecionada'.format( + data_inicio, data_inicio_leg, data_fim_leg) ) raise ValidationError('A data de início da Sessão Legislativa deve estar compreendida ' 'entre a data início e fim da Legislatura selecionada') @@ -342,13 +347,15 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm): if data_inicio > data_fim: self.logger.warning( - 'Data início ({}) superior à data fim ({}).'.format(data_inicio, data_fim) + 'Data início ({}) superior à data fim ({}).'.format( + data_inicio, data_fim) ) raise ValidationError( 'Data início não pode ser superior à data fim') if data_fim.year > data_inicio.year + 1: - raise ValidationError('A Sessão Legislativa só pode ter, no máximo, dois anos de período.') + raise ValidationError( + 'A Sessão Legislativa só pode ter, no máximo, dois anos de período.') data_inicio_intervalo = cleaned_data['data_inicio_intervalo'] data_fim_intervalo = cleaned_data['data_fim_intervalo'] @@ -357,7 +364,8 @@ class SessaoLegislativaForm(FileFieldCheckMixin, ModelForm): data_inicio_intervalo > data_fim_intervalo: self.logger.warning( 'Data início de intervalo ({}) superior à ' - 'data fim de intervalo ({}).'.format(data_inicio_intervalo, data_fim_intervalo) + 'data fim de intervalo ({}).'.format( + data_inicio_intervalo, data_fim_intervalo) ) raise ValidationError('Data início de intervalo não pode ser ' 'superior à data fim de intervalo') @@ -766,7 +774,8 @@ class AutorForm(ModelForm): class AutorFilterSet(django_filters.FilterSet): - nome = django_filters.CharFilter(label=_('Nome do Autor'), lookup_expr='icontains') + nome = django_filters.CharFilter( + label=_('Nome do Autor'), lookup_expr='icontains') class Meta: model = Autor @@ -1063,20 +1072,24 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.form.fields['exibir_ordem_dia'] = forms.BooleanField(required=False, label='Exibir presença das Ordens do Dia') + self.form.fields['exibir_ordem_dia'] = forms.BooleanField( + required=False, label='Exibir presença das Ordens do Dia') self.form.initial['exibir_ordem_dia'] = True - self.form.fields['exibir_somente_titular'] = forms.BooleanField(required=False, label='Exibir somente parlamentares titulares') + self.form.fields['exibir_somente_titular'] = forms.BooleanField( + required=False, label='Exibir somente parlamentares titulares') self.form.initial['exibir_somente_titular'] = False - - self.form.fields['exibir_somente_ativo'] = forms.BooleanField(required=False, label='Exibir somente parlamentares ativos') + + self.form.fields['exibir_somente_ativo'] = forms.BooleanField( + required=False, label='Exibir somente parlamentares ativos') self.form.initial['exibir_somente_ativo'] = False - + self.form.fields['legislatura'].required = True self.filters['data_inicio'].label = 'Período (Inicial - Final)' - tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter(nome='Ordinária') + tipo_sessao_ordinaria = self.filters['tipo'].queryset.filter( + nome='Ordinária') if tipo_sessao_ordinaria: self.form.initial['tipo'] = tipo_sessao_ordinaria.first() @@ -1341,7 +1354,6 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet): label='Autor da Matéria', queryset=Autor.objects.all()) - @property def qs(self): parent = super(RelatorioMateriasTramitacaoFilterSet, self).qs @@ -1353,7 +1365,7 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet): model = MateriaEmTramitacao fields = ['materia__ano', 'materia__tipo', 'tramitacao__unidade_tramitacao_destino', - 'tramitacao__status','materia__autores'] + 'tramitacao__status', 'materia__autores'] def __init__(self, *args, **kwargs): super(RelatorioMateriasTramitacaoFilterSet, self).__init__( @@ -1385,7 +1397,7 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet): self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Pesquisa de Matéria em Tramitação'), - row1, row2, row3, row4,row5, + row1, row2, row3, row4, row5, buttons,) ) @@ -1637,7 +1649,8 @@ class RecuperarSenhaForm(PasswordResetForm): if not email_existente: msg = 'Não existe nenhum usuário cadastrado com este e-mail.' self.logger.warning( - 'Não existe nenhum usuário cadastrado com este e-mail ({}).'.format(self.data['email']) + 'Não existe nenhum usuário cadastrado com este e-mail ({}).'.format( + self.data['email']) ) raise ValidationError(msg) @@ -1726,7 +1739,8 @@ class AlterarSenhaForm(Form): if user.is_anonymous: self.logger.warning( - 'Não é possível alterar senha de usuário anônimo ({}).'.format(username) + 'Não é possível alterar senha de usuário anônimo ({}).'.format( + username) ) raise ValidationError( "Não é possível alterar senha de usuário anônimo") diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index f0602db6b..abc2c821d 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -7,7 +7,7 @@ from django import forms from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.files.base import File -from django.db import models, transaction +from django.db import transaction from django.db.models import F, Max, Q from django.forms import ModelChoiceField, ModelForm, widgets from django.forms.forms import Form @@ -15,9 +15,6 @@ from django.forms.models import ModelMultipleChoiceField from django.forms.widgets import CheckboxSelectMultiple, HiddenInput, Select from django.urls import reverse from django.utils import timezone -from django.utils.encoding import force_text -from django.utils.html import format_html -from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ import django_filters @@ -28,15 +25,15 @@ from sapl.compilacao.models import (STATUS_TA_IMMUTABLE_PUBLIC, STATUS_TA_PRIVATE) from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, SaplFormLayout, to_column, to_row) -from sapl.materia.models import (AssuntoMateria, Autoria, MateriaAssunto, +from sapl.materia.models import (AssuntoMateria, MateriaAssunto, MateriaLegislativa, Orgao, RegimeTramitacao, StatusTramitacao, TipoDocumento, TipoProposicao, - UnidadeTramitacao, ConfigEtiquetaMateriaLegislativa) + ConfigEtiquetaMateriaLegislativa) from sapl.norma.models import (LegislacaoCitada, NormaJuridica, TipoNormaJuridica) -from sapl.parlamentares.models import Legislatura, Partido, Parlamentar -from sapl.protocoloadm.models import (Anexado, DocumentoAdministrativo, +from sapl.parlamentares.models import Legislatura, Partido +from sapl.protocoloadm.models import (DocumentoAdministrativo, Protocolo) from sapl.utils import (autor_label, autor_modal, ChoiceWithoutValidationField, @@ -44,7 +41,7 @@ from sapl.utils import (autor_label, autor_modal, FilterOverridesMetaMixin, gerar_hash_arquivo, lista_anexados, MateriaPesquisaOrderingFilter, models_with_gr_for_model, qs_override_django_filter, - RangeWidgetOverride, SEPARADOR_HASH_PROPOSICAO, + SEPARADOR_HASH_PROPOSICAO, validar_arquivo, YES_NO_CHOICES) from .models import (AcompanhamentoMateria, Anexada, Autoria, @@ -2789,7 +2786,8 @@ class FichaSelecionaForm(forms.Form): class StatusTramitacaoFilterSet(django_filters.FilterSet): - descricao = django_filters.CharFilter(label=_("Descrição do Status"), method='multifield_filter') + descricao = django_filters.CharFilter( + label=_("Descrição do Status"), method='multifield_filter') class Meta: model = StatusTramitacao @@ -2806,7 +2804,8 @@ class StatusTramitacaoFilterSet(django_filters.FilterSet): self.form.helper = SaplFormHelper() self.form.helper.form_method = "GET" self.form.helper.layout = Layout( - Fieldset(_("Pesquisa de Status de Tramitacao"), row0, form_actions(label="Pesquisar")) + Fieldset(_("Pesquisa de Status de Tramitacao"), + row0, form_actions(label="Pesquisar")) ) diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 357764a7a..427834250 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -2,12 +2,12 @@ import logging import re from crispy_forms.bootstrap import InlineRadios, Alert, FormActions -from crispy_forms.layout import (Button, Column, Div, Fieldset, HTML, +from crispy_forms.layout import (Button, Div, Fieldset, HTML, Layout, Submit) from django import forms from django.core.exceptions import (MultipleObjectsReturned, ObjectDoesNotExist, ValidationError) -from django.db import models, transaction +from django.db import transaction from django.db.models import Max from django.forms import ModelForm from django.utils import timezone @@ -20,13 +20,12 @@ from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, from sapl.materia.models import (MateriaLegislativa, TipoMateriaLegislativa, UnidadeTramitacao) -from sapl.protocoloadm.models import Protocolo from sapl.utils import (AnoNumeroOrderingFilter, autor_label, autor_modal, choice_anos_com_documentoadministrativo, choice_anos_com_materias, choice_anos_com_protocolo, choice_force_optional, FileFieldCheckMixin, FilterOverridesMetaMixin, - lista_anexados, RangeWidgetOverride, RANGE_ANOS, + lista_anexados, RANGE_ANOS, validar_arquivo, YES_NO_CHOICES) from .models import (Anexado, AcompanhamentoDocumento, diff --git a/sapl/utils.py b/sapl/utils.py index da74e086b..cffa181e9 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -1,23 +1,16 @@ -from itertools import groupby - -import django_filters +from functools import wraps import hashlib +from itertools import groupby import logging -import magic +from operator import itemgetter import os -import re -import unicodedata import platform +import re import tempfile -from crispy_forms.layout import Button, HTML -from easy_thumbnails import source_generators -from floppyforms import ClearableFileInput -from functools import wraps -from operator import itemgetter -from reversion_compare.admin import CompareVersionAdmin from unicodedata import normalize as unicodedata_normalize -from unipath.path import Path +import unicodedata +from crispy_forms.layout import Button, HTML from django import forms from django.apps import apps from django.conf import settings @@ -35,6 +28,12 @@ from django.forms.widgets import SplitDateTimeWidget from django.utils import six, timezone from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ +import django_filters +from easy_thumbnails import source_generators +from floppyforms import ClearableFileInput +import magic +from reversion_compare.admin import CompareVersionAdmin +from unipath.path import Path from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, SaplFormLayout, to_row) @@ -60,11 +59,11 @@ def num_materias_por_tipo(qs, attr_tipo='tipo'): def sort_function(m): return m.tipo else: def sort_function(m): return m.materia.tipo - + # select_related eh importante por questoes de desempenho, pois caso # contrario ele realizara uma consulta ao banco para cada iteracao, # na key do groupby (uma alternativa é só usar tipo_id, na chave). - qs2 = qs.select_related(attr_tipo).order_by(attr_tipo+'_id') + qs2 = qs.select_related(attr_tipo).order_by(attr_tipo + '_id') for key, values in groupby(qs2, key=sort_function): # poderia usar qtdes[key] = len(list(values)) aqui, mas @@ -76,16 +75,16 @@ def num_materias_por_tipo(qs, attr_tipo='tipo'): def validar_arquivo(arquivo, nome_campo): if len(arquivo.name) > 200: raise ValidationError( - "Certifique-se de que o nome do arquivo no " \ - "campo '" + nome_campo + "' tenha no máximo 200 caracteres " \ + "Certifique-se de que o nome do arquivo no " + "campo '" + nome_campo + "' tenha no máximo 200 caracteres " "(ele possui {})".format(len(arquivo.name)) ) if arquivo.size > MAX_DOC_UPLOAD_SIZE: raise ValidationError( - "O arquivo " + nome_campo + " deve ser menor que " \ + "O arquivo " + nome_campo + " 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 + (MAX_DOC_UPLOAD_SIZE / 1024) / 1024, + (arquivo.size / 1024) / 1024 ) ) @@ -96,18 +95,18 @@ def pil_image(source, exif_orientation=False, **options): def dont_break_out(value, max_part=50): _safe = value.split() - + def chunkstring(string): return re.findall('.{%d}' % max_part, string) - + def __map(a): if len(a) <= max_part: return a return '
' + '
'.join(chunkstring(a)) - + _safe = map(__map, _safe) _safe = ' '.join(_safe) - + _safe = mark_safe(_safe) return value @@ -178,7 +177,9 @@ def montar_row_autor(name): return autor_row -#TODO: Esta função é utilizada? +# TODO: Esta função é utilizada? + + def montar_helper_autor(self): autor_row = montar_row_autor('nome') self.helper = SaplFormHelper() @@ -1010,12 +1011,13 @@ def mail_service_configured(request=None): def lista_anexados(principal, isMateriaLegislativa=True): anexados_total = [] - if isMateriaLegislativa: #MateriaLegislativa + if isMateriaLegislativa: # MateriaLegislativa from sapl.materia.models import Anexada anexados_iterator = Anexada.objects.filter(materia_principal=principal) - else: #DocAdm + else: # DocAdm from sapl.protocoloadm.models import Anexado - anexados_iterator = Anexado.objects.filter(documento_principal=principal) + anexados_iterator = Anexado.objects.filter( + documento_principal=principal) anexadas_temp = list(anexados_iterator) @@ -1024,12 +1026,14 @@ def lista_anexados(principal, isMateriaLegislativa=True): if isMateriaLegislativa: if anx.materia_anexada not in anexados_total: anexados_total.append(anx.materia_anexada) - anexados_anexado = Anexada.objects.filter(materia_principal=anx.materia_anexada) + anexados_anexado = Anexada.objects.filter( + materia_principal=anx.materia_anexada) anexadas_temp.extend(anexados_anexado) else: if anx.documento_anexado not in anexados_total: anexados_total.append(anx.documento_anexado) - anexados_anexado = Anexado.objects.filter(documento_principal=anx.documento_anexado) + anexados_anexado = Anexado.objects.filter( + documento_principal=anx.documento_anexado) anexadas_temp.extend(anexados_anexado) if principal in anexados_total: anexados_total.remove(principal) @@ -1058,10 +1062,12 @@ class OverwriteStorage(FileSystemStorage): Muda o comportamento padrão do Django e o faz sobrescrever arquivos de mesmo nome que foram carregados pelo usuário ao invés de renomeá-los. ''' + def get_available_name(self, name, max_length=None): if self.exists(name): os.remove(os.path.join(settings.MEDIA_ROOT, name)) return name + def get_tempfile_dir(): return '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir()