Browse Source

Merge master

pull/1510/head
Eduardo Calil 8 years ago
parent
commit
04f30bdd5a
  1. 3
      .gitignore
  2. 2
      sapl/base/forms.py
  3. 21
      sapl/base/tests/test_form.py
  4. 35
      sapl/base/tests/test_view_base.py
  5. 12
      sapl/legacy/migration.py
  6. 5
      sapl/legacy/scripts/migra_dbs.sh
  7. 8
      sapl/legacy/scripts/recria_dbs_postgres.sh
  8. 14
      sapl/parlamentares/migrations/0010_corrige_data_inicio_mandato.py
  9. 1
      sapl/protocoloadm/views.py
  10. 26
      sapl/sessao/tests/test_sessao.py
  11. 49
      sapl/sessao/tests/test_sessao_view.py
  12. 20
      setup.py

3
.gitignore

@ -6,6 +6,9 @@ __pycache__/
# C extensions # C extensions
*.so *.so
# Nodejs
node_modules/
# Distribution / packaging # Distribution / packaging
.Python .Python
env/ env/

2
sapl/base/forms.py

@ -231,7 +231,7 @@ class AutorForm(ModelForm):
if 'status_user' in self.Meta.fields: if 'status_user' in self.Meta.fields:
if self.instance.pk and self.instance.user_id: if self.instance.pk and self.instance.user_id:
if getattr( if getattr(
self.instance.user.username, self.instance.user,
get_user_model().USERNAME_FIELD) != cd['username']: get_user_model().USERNAME_FIELD) != cd['username']:
if 'status_user' not in cd or not cd['status_user']: if 'status_user' not in cd or not cd['status_user']:
raise ValidationError( raise ValidationError(

21
sapl/base/tests/test_form.py

@ -1,3 +1,4 @@
import pytest
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from sapl.base.forms import CasaLegislativaForm from sapl.base.forms import CasaLegislativaForm
@ -18,3 +19,23 @@ def test_valida_campos_obrigatorios_casa_legislativa_form():
assert errors['uf'] == [_('Este campo é obrigatório.')] assert errors['uf'] == [_('Este campo é obrigatório.')]
assert len(errors) == 6 assert len(errors) == 6
@pytest.mark.django_db(transaction=False)
def test_casa_legislativa_form_invalido():
form = CasaLegislativaForm(data={'codigo': 'codigo',
'nome': 'nome',
'sigla': 'sg',
'endereco': 'endereco',
'cep': '7000000',
'municipio': 'municipio',
'uf': 'uf',
'telefone': '33333333',
'fax': '33333333',
'logotipo': 'image',
'endereco_web': 'web',
'email': 'email',
'informacao_geral': 'informacao_geral'
})
assert not form.is_valid()

35
sapl/base/tests/test_view_base.py

@ -0,0 +1,35 @@
import pytest
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
@pytest.mark.django_db(transaction=False)
def test_incluir_casa_legislativa_errors(admin_client):
response = admin_client.post(reverse('sapl.base:casalegislativa_create'),
{'salvar': 'salvar'},
follow=True)
assert (response.context_data['form'].errors['nome'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['sigla'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['endereco'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['cep'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['municipio'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['uf'] ==
[_('Este campo é obrigatório.')])
@pytest.mark.django_db(transaction=False)
def test_incluir_tipo_autor_errors(admin_client):
response = admin_client.post(reverse('sapl.base:tipoautor_create'),
{'salvar': 'salvar'},
follow=True)
assert (response.context_data['form'].errors['descricao'] ==
[_('Este campo é obrigatório.')])

12
sapl/legacy/migration.py

@ -17,7 +17,8 @@ from django.db.models import Count, Max
from django.db.models.base import ModelBase from django.db.models.base import ModelBase
from sapl.base.models import AppConfig as AppConf from sapl.base.models import AppConfig as AppConf
from sapl.base.models import Autor, ProblemaMigracao, TipoAutor from sapl.base.models import (Autor, CasaLegislativa, ProblemaMigracao,
TipoAutor)
from sapl.comissoes.models import Comissao, Composicao, Participacao from sapl.comissoes.models import Comissao, Composicao, Participacao
from sapl.legacy.models import TipoNumeracaoProtocolo from sapl.legacy.models import TipoNumeracaoProtocolo
from sapl.materia.models import (AcompanhamentoMateria, Proposicao, from sapl.materia.models import (AcompanhamentoMateria, Proposicao,
@ -208,7 +209,8 @@ def fill_vinculo_norma_juridica():
TipoVinculoNormaJuridica.objects.bulk_create(lista_objs) TipoVinculoNormaJuridica.objects.bulk_create(lista_objs)
def fill_tipo_numeracao_protocolo(): def fill_dados_basicos():
# Ajusta sequencia numérica e cria base.AppConfig
letra = 'A' letra = 'A'
try: try:
tipo = TipoNumeracaoProtocolo.objects.latest('dat_inicial_protocolo') tipo = TipoNumeracaoProtocolo.objects.latest('dat_inicial_protocolo')
@ -223,6 +225,10 @@ def fill_tipo_numeracao_protocolo():
appconf = AppConf(sequencia_numeracao=letra) appconf = AppConf(sequencia_numeracao=letra)
appconf.save() appconf.save()
# Cria instância de CasaLegislativa
casa = CasaLegislativa()
casa.save()
# Uma anomalia no sapl 2.5 causa a duplicação de registros de votação. # Uma anomalia no sapl 2.5 causa a duplicação de registros de votação.
# Essa duplicação deve ser eliminada para que não haja erro no sapl 3.1 # Essa duplicação deve ser eliminada para que não haja erro no sapl 3.1
@ -338,7 +344,7 @@ class DataMigrator:
'--database=default', '--no-input'], stdout=PIPE) '--database=default', '--no-input'], stdout=PIPE)
fill_vinculo_norma_juridica() fill_vinculo_norma_juridica()
fill_tipo_numeracao_protocolo() fill_dados_basicos()
info('Começando migração: %s...' % obj) info('Começando migração: %s...' % obj)
self._do_migrate(obj) self._do_migrate(obj)

5
sapl/legacy/scripts/migra_dbs.sh

@ -3,9 +3,8 @@
# rodar esse script na raiz do projeto # rodar esse script na raiz do projeto
if [ $# -eq 2 ]; then if [ $# -eq 2 ]; then
parallel -eta --verbose ./sapl/legacy/scripts/migra_um_db.sh :::: <(mysql -u $1 -p$2 -e 'show databases;' | grep '^sapl_' | grep -v '_copy$') ::: $1 ::: $2 parallel -eta --verbose -j+0 ./sapl/legacy/scripts/migra_um_db.sh :::: <(mysql -u $1 -p$2 -e 'show databases;' | grep '^sapl_' | grep -v '_copy$') ::: $1 ::: $2
else else
echo "USO:" echo "USO:"
echo " ./sapl/legacy/scripts/migra_dbs.sh [usuário mysql] [senha mysql]" echo " $0 [usuário mysql] [senha mysql]"
fi; fi;

8
sapl/legacy/scripts/recria_dbs_postgres.sh

@ -1,11 +1,11 @@
#!/bin/bash
# (Re)cria todos os bancos postgres para migração # (Re)cria todos os bancos postgres para migração
# cria um banco postgres (de mesmo nome) para cada banco mysql cujo nome começa com "sapl_" # cria um banco postgres (de mesmo nome) para cada banco mysql cujo nome começa com "sapl_"
if [ $# -eq 2 ]; then if [ $# -eq 2 ]; then
parallel --verbose ./recria_um_db_postgres.sh :::: <(mysql -u $1 -p$2 -e 'show databases;' | grep '^sapl_' | grep -v '_copy$') parallel --verbose -j+0 ./recria_um_db_postgres.sh :::: <(mysql -u $1 -p$2 -e 'show databases;' | grep '^sapl_' | grep -v '_copy$')
else else
echo "USO:" echo "USO:"
echo " ./recria_dbs_postgres.sh [usuário mysql] [senha mysql]" echo " $0 [usuário mysql] [senha mysql]"
fi; fi;

14
sapl/parlamentares/migrations/0010_corrige_data_inicio_mandato.py

@ -1,12 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations
import json
import os
from datetime import timedelta
from django.core.management import call_command
from django.db import migrations
def altera_data_inicio_mandato(apps, schema_editor): def altera_data_inicio_mandato(apps, schema_editor):
@ -16,7 +12,9 @@ def altera_data_inicio_mandato(apps, schema_editor):
for mandato in mandatos: for mandato in mandatos:
data_inicio = mandato.data_inicio_mandato data_inicio = mandato.data_inicio_mandato
data_inicio_legislatura = mandato.legislatura.data_inicio data_inicio_legislatura = mandato.legislatura.data_inicio
days = abs((data_inicio - data_inicio_legislatura).days)
days = abs((data_inicio - data_inicio_legislatura
).days) if data_inicio else 60
if days >= 60: if days >= 60:
mandato.data_inicio_mandato = data_inicio_legislatura mandato.data_inicio_mandato = data_inicio_legislatura
@ -28,8 +26,8 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
# A dependencia real desse script é o arquivo 0001_initial.py, mas # A dependencia real desse script é o arquivo 0001_initial.py, mas
# isso gera um erro (Conflicting migrations detected; multiple leaf # isso gera um erro (Conflicting migrations detected; multiple leaf
# nodes in the migration graph). para não ocasionar problemas de migração, # nodes in the migration graph). para não ocasionar problemas de migração,
# vamos manter a ordem padrão do django. # vamos manter a ordem padrão do django.
('parlamentares', '0009_auto_20170905_1617'), ('parlamentares', '0009_auto_20170905_1617'),
] ]

1
sapl/protocoloadm/views.py

@ -1,3 +1,4 @@
from braces.views import FormValidMessageMixin from braces.views import FormValidMessageMixin
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.mixins import PermissionRequiredMixin

26
sapl/sessao/tests/test_sessao.py

@ -2,9 +2,11 @@ import pytest
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_mommy import mommy from model_mommy import mommy
from sapl.materia.models import TipoMateriaLegislativa, MateriaLegislativa
from sapl.parlamentares.models import Legislatura, Partido, SessaoLegislativa from sapl.parlamentares.models import Legislatura, Partido, SessaoLegislativa
from sapl.sessao import forms from sapl.sessao import forms
from sapl.sessao.models import SessaoPlenaria, TipoSessaoPlenaria from sapl.sessao.models import (ExpedienteMateria, SessaoPlenaria,
TipoSessaoPlenaria)
def test_valida_campos_obrigatorios_sessao_plenaria_form(): def test_valida_campos_obrigatorios_sessao_plenaria_form():
@ -113,3 +115,25 @@ def test_bancada_form_datas_invalidas():
assert not form.is_valid() assert not form.is_valid()
assert form.errors['__all__'] == [_('Data de extinção não pode ser menor ' assert form.errors['__all__'] == [_('Data de extinção não pode ser menor '
'que a de criação')] 'que a de criação')]
@pytest.mark.django_db(transaction=False)
def test_expediente_materia_form_valido():
tipo_materia = mommy.make(TipoMateriaLegislativa)
materia = mommy.make(MateriaLegislativa, tipo=tipo_materia)
sessao = mommy.make(SessaoPlenaria)
instance = mommy.make(ExpedienteMateria, sessao_plenaria=sessao,
materia=materia)
form = forms.ExpedienteMateriaForm(data={'data_ordem': '28/12/2009',
'numero_ordem': 1,
'tipo_materia': tipo_materia.pk,
'numero_materia': materia.numero,
'ano_materia': materia.ano,
'tipo_votacao': 1,
'sessao_plenaria': sessao.pk
},
instance=instance)
assert form.is_valid()

49
sapl/sessao/tests/test_sessao_view.py

@ -0,0 +1,49 @@
import pytest
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from model_mommy import mommy
from sapl.parlamentares.models import Legislatura, SessaoLegislativa
from sapl.sessao.models import SessaoPlenaria, TipoSessaoPlenaria
@pytest.mark.django_db(transaction=False)
def test_incluir_sessao_plenaria_submit(admin_client):
legislatura = mommy.make(Legislatura)
sessao = mommy.make(SessaoLegislativa)
tipo = mommy.make(TipoSessaoPlenaria)
response = admin_client.post(reverse('sapl.sessao:sessaoplenaria_create'),
{'legislatura': str(legislatura.pk),
'numero': '1',
'tipo': str(tipo.pk),
'sessao_legislativa': str(sessao.pk),
'data_inicio': '10/11/2017',
'hora_inicio': '10:10'
}, follow=True)
assert response.status_code == 200
sessao_plenaria = SessaoPlenaria.objects.first()
assert sessao_plenaria.tipo == tipo
@pytest.mark.django_db(transaction=False)
def test_incluir_sessao_errors(admin_client):
response = admin_client.post(reverse('sapl.sessao:sessaoplenaria_create'),
{'salvar': 'salvar'},
follow=True)
assert (response.context_data['form'].errors['legislatura'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['sessao_legislativa'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['tipo'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['numero'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['data_inicio'] ==
[_('Este campo é obrigatório.')])
assert (response.context_data['form'].errors['hora_inicio'] ==
[_('Este campo é obrigatório.')])

20
setup.py

@ -10,6 +10,13 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
install_requires = [ install_requires = [
'dj-database-url==0.4.1', 'dj-database-url==0.4.1',
'django-haystack==2.6.0',
'django>=1.9,<1.10',
# TODO O django-admin-bootstrapped 2.5.7 não inseriu a mudança que permite
# a compatibilidade com Django 1.9+. A linha abaixo será mudada quando uma
# nova versão do django-admin-bootstrapped for lançada
# 'git+git://github.com/django-admin-bootstrapped/
# django-admin-bootstrapped.git',
'django-bootstrap3==7.0.1', 'django-bootstrap3==7.0.1',
'django-bower==5.1.0', 'django-bower==5.1.0',
'django-braces==1.9.0', 'django-braces==1.9.0',
@ -20,24 +27,29 @@ install_requires = [
'django-filter==0.15.3', 'django-filter==0.15.3',
'django-floppyforms==1.6.2', 'django-floppyforms==1.6.2',
'django-model-utils==2.5', 'django-model-utils==2.5',
'django-sass-processor==0.4.6', 'django-sass-processor==0.5.4',
'django>=1.9,<1.10',
'djangorestframework', 'djangorestframework',
'drfdocs',
'easy-thumbnails==2.3', 'easy-thumbnails==2.3',
# 'git+git://github.com/interlegis/trml2pdf.git',
'libsass==0.11.1', 'libsass==0.11.1',
'psycopg2==2.6.2', 'psycopg2==2.6.2',
'python-decouple==3.0', 'python-decouple==3.0',
'pytz==2016.4', 'pytz==2016.4',
'pyyaml==3.11', 'pyyaml==3.11',
'rtyaml==0.0.3', 'rtyaml==0.0.3',
'textract==1.5.0',
'unipath==1.1', 'unipath==1.1',
'pysolr==3.6.0',
'python-magic==0.4.12', 'python-magic==0.4.12',
'gunicorn==19.6.0', 'gunicorn==19.6.0',
# git+git://github.com/interlegis/trml2pdf.git 'django-reversion==2.0.8',
'WeasyPrint==0.30',
'whoosh==2.7.4'
] ]
setup( setup(
name='interlegis-sapl', name='interlegis-sapl',
version='3.1.1-alpha', version='3.1.24-BETA',
packages=find_packages(), packages=find_packages(),
include_package_data=True, include_package_data=True,
license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007', license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007',

Loading…
Cancel
Save