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()