Browse Source

alterações de IDE

pull/3337/head
Leandro Roberto 5 years ago
parent
commit
b3d3666e62
  1. 54
      sapl/base/forms.py
  2. 21
      sapl/materia/forms.py
  3. 7
      sapl/protocoloadm/forms.py
  4. 66
      sapl/utils.py

54
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")

21
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"))
)

7
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,

66
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 '<br>' + '<br>'.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()

Loading…
Cancel
Save