Commit d5ac1d50 authored by Diego Rabatone's avatar Diego Rabatone

Merge branch 'merging_teste_importadores' into 'master'

Merge teste importadores

See merge request !480
parents c4e65826 8fbfc5dc
Pipeline #35514982 passed with stages
in 2 minutes and 11 seconds
......@@ -9,6 +9,7 @@
FROM radarparlamentar/base:1.0.3
COPY radar_parlamentar/requirements.txt /tmp/requirements.txt
RUN set -ex \
&& pip install -U pip setuptools wheel \
&& pip install -r /tmp/requirements.txt \
......
......@@ -32,7 +32,7 @@ WORKDIR ${RADAR_HOME}
# o postgres.
# musl-dev é usada apenas apra compilação da lib python psycopg2.
RUN set -ex \
&& apk add --update \
&& apk add --no-cache --update \
curl \
postgresql-dev \
postgresql \
......@@ -45,7 +45,7 @@ RUN set -ex \
linux-headers \
musl-dev \
&& pip install -U pip setuptools wheel \
&& pip install uwsgi numpy psycopg2-binary\
&& pip install uwsgi numpy psycopg2-binary \
&& apk del _build_deps \
&& rm -rf \
~/.cache/pip/* \
......
......@@ -8,11 +8,6 @@ TRY_LOOP="20"
export DB_HOST="postgres"
export DB_PORT="5432"
# Install custom python package if requirements.txt is present
if [ -e "/radar/radar_parlamentar/requirements.txt" ]; then
pip install -r /radar/radar_parlamentar/requirements.txt
fi
wait_for_port() {
local name="$1" host="$2" port="$3"
local j=0
......@@ -104,7 +99,6 @@ case "$1" in
# The command is something like bash, not an airflow subcommand. Just run it in the right environment.
echo "Default initialization."
wait_for_port "Postgres" "$DB_HOST" "$DB_PORT"
python manage.py migrate
python manage.py collectstatic --noinput
setup_pgpass
setup_cron
......
radar
|
|-deploy // Backend
| |-elasticsearch // Redutor de palavras
| >entrypoint.sh // Entrada do Docker
| >radar_uwsgi.sh // uWSGI Web server
| >radar.nginx.conf // Nginx proxy reverso
| >uswgi_params // uWSGI Web server
|
|-doc // Algumas documentações
|
|-radar_parlamentar
| |
| |-analises // Hackaton com análises
| | >analise.py // Inicializa as análises
| | >filtro.py // Acessa DB e retorna dados
| | >genero.py // Acessa DB e retorna dados de gênero e "tag cloud"
| | >grafico.py // Visual dos gráficos
| | >models.py
| | >pca.py // Análise matemática
| | >views.py // Chama as análises e salva os JSON em radar/json
| |
| |-cron // Cron jobs
| |
| |-exportadores
| | >exportador_csv_r.py // Gera CSV para R
| | >exportador_csv.py // Gera CSV
| | >models.py // vazio
| | >views.py // vazio
| |
| |-htmlcov
| |
| |-importadores
| |
| |-modelagem
| |
| |-plenaria
| |
| |-radar_parlamentar
| |
| |-sonar
| |
| |-static
| |
| |-testes_integracao
| |
| |-util_test
|
|-sockets
| >radar.sock // Comunicação dos dockers
tabelas
modelagem_casalegislativa
id*
nome
nome_curto (unique)
esfera
local
modelagem_chefeexecutivo
id*
nome
genero
mandato_ano_inicio
mandato_ano_fim
partido_id** (modelagem_partido)
modelagem_chefeexecutivo_casas_legislativas
id*
chefeexecutivo_id** (modelagem_chefe_executivo)
casalegislativa_id** (modelagem_casalegislativa)
??? mandato_ano_inicio/mandato_ano_fim aqui ????
modelagem_indexadores
id*
termo
principal (boolean)
modelagem_parlamentar
id*
id_parlamentar
nome
genero
localidade
casa_legislativa_id** (modelagem_casa_legislativa)
partido_id** (modelagem_partido)
modelagem_partido
id*
nome
numero
cor
modelagem_proposicao
id*
id_prop
sigla
numero
ano
ementa
descricao
indexacao ??? TEXT ???
data_apresentacao
situacao
autor_principal ??? NÃO DEVERIA VIR DE MODELAGEM_PARLAMENTAR ???
casa_legislativa_id** (modelagem_casa_legislativa)
modelagem_proposicao_autores
id*
proposicao_id** (modelagem_proposicao)
parlamentar_id** (modelagem_parlamentar)
modelagem_votacao
id*
id_vot
descricao
data
resultado *NÃO ESTÁ NORMALIZADO
proposicao_id** (modelagem_proposicao)
modelagem_voto
id*
opcao
parlamentar_id** (modelagem_parlamentar - parlamentar_id)
votacao_id** (modelagem_votacao)
......@@ -62,12 +62,6 @@ services:
- .:/radar
- volume_radar_sockets:/radar/sockets/
- volume_radar_django_static:/radar/radar_parlamentar/static
links:
- postgres
- memcache
- rabbitmq
- elasticsearch
- nginx # because CashRefresherJob
depends_on:
- postgres
- nginx
......@@ -82,10 +76,6 @@ services:
- RADAR_DB_PASSWORD=${RADAR_DB_PASSWORD:-radar}
volumes:
- .:/radar
links:
- postgres
- memcache
- rabbitmq
depends_on:
- postgres
- memcache
......
This diff is collapsed.
......@@ -17,39 +17,56 @@
import bz2
import os
import xml.etree.ElementTree as etree
import glob
import json
import xml.etree.ElementTree as etree
from importadores import cdep
MOCK_PATH = os.path.join(cdep.RESOURCES_FOLDER, 'mocks')
XMLS = glob.glob(os.path.join(MOCK_PATH, '*.xml.bz2'))
def parse_arquivo_xml(nome_arquivo):
"""retorna etree"""
for xml in XMLS:
if nome_arquivo == os.path.basename(xml):
with bz2.open(xml, mode='rt') as arquivo_xml:
return etree.fromstring(arquivo_xml.read())
arquivo = os.path.join(MOCK_PATH, nome_arquivo)
with bz2.open(arquivo, mode='rt') as arquivo_xml:
return etree.fromstring(arquivo_xml.read())
raise ValueError
def mock_obter_proposicao(id_prop):
"""retorna etree"""
return parse_arquivo_xml('proposicao_%s.xml.bz2' % id_prop)
def parse_arquivo_json(nome_arquivo):
"""retorna json como dicionario"""
arquivo = os.path.join(MOCK_PATH, nome_arquivo)
with bz2.open(arquivo, mode='rt') as arquivo_json:
return json.load(arquivo_json)
def mock_listar_proposicoes(sigla, ano):
"""retorna etree"""
return parse_arquivo_xml('proposicoes_%s%s.xml.bz2' % (sigla, ano))
def mock_obter_proposicao(id_prop):
"""retorna dicionario"""
return parse_arquivo_json('proposicao_%s.json.bz2' % id_prop)
def mock_obter_votacoes(sigla, num, ano):
"""retorna dicionario"""
return parse_arquivo_json('votacoes_%s%s%s.json.bz2' % (sigla, num, ano))
def mock_obter_proposicoes_votadas_plenario(ano):
"""retorna etree"""
return parse_arquivo_xml('proposicoes_votadas_%s.xml.bz2' % ano)
def mock_listar_proposicoes(sigla, ano, pagina):
"""retorna dicionario"""
return parse_arquivo_json('proposicoes_%s%s_%s.json.bz2' % (sigla, ano, pagina))
def mock_obter_autores(id_prop):
"""retorna dicionario"""
return parse_arquivo_json('autores_proposicao_%s.json.bz2' % id_prop)
def mock_obter_evento(id_evento):
"""retorna dicionario"""
return parse_arquivo_json('evento_%s.json.bz2' % id_evento)
def mock_obter_votos(id_votacao, pagina):
"""retorna dicionario"""
return parse_arquivo_json('votos_%s_%s.json.bz2' % (id_votacao, pagina))
def mock_obter_votacoes(sigla, num, ano):
"""retorna etree"""
return parse_arquivo_xml('votacoes_%s%s%s.xml.bz2' % (sigla, num, ano))
......@@ -61,7 +61,7 @@ STATICFILES_DIRS = (
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
......
......@@ -18,9 +18,10 @@
from django.test import TestCase
from importadores import cdep
from unittest import skip
# constantes relativas ao código florestal
ID = '17338'
ID = 17338
SIGLA = 'PL'
NUM = '1876'
ANO = '1999'
......@@ -28,82 +29,53 @@ NOME = 'PL 1876/1999'
class CamarawsTest(TestCase):
"""Realiza testes envolvendo os web services da câmara"""
def setUp(self):
self.camaraws = cdep.Camaraws()
def test_obter_proposicao(self):
codigo_florestal_xml = self.camaraws.obter_proposicao_por_id(ID)
nome = codigo_florestal_xml.find('nomeProposicao').text
self.assertEqual(nome, NOME)
codigo_florestal_json = cdep.Camaraws.obter_proposicao_por_id(ID)
self.assertEqual(codigo_florestal_json['siglaTipo'], SIGLA)
self.assertEqual(str(codigo_florestal_json['numero']), NUM)
self.assertEqual(str(codigo_florestal_json['ano']), ANO)
def test_obter_votacoes(self):
codigo_florestal_xml = self.camaraws.obter_votacoes(SIGLA, NUM, ANO)
data_vot_encontrada = codigo_florestal_xml.find(
'Votacoes').find('Votacao').get('Data')
self.assertEqual(data_vot_encontrada, '11/5/2011')
votacao_cod_florestal_json = cdep.Camaraws.obter_votacoes(ID)[1]
uri_evento = votacao_cod_florestal_json['uriEvento']
evento = cdep.Camaraws.obter_evento(uri_evento)
data_vot_encontrada = evento['dataHoraInicio']
self.assertEqual(data_vot_encontrada, '2011-05-24T20:01')
def test_listar_proposicoes(self):
pecs_2011_xml = self.camaraws.listar_proposicoes('PEC', '2011')
pecs_elements = pecs_2011_xml.findall('proposicao')
self.assertEqual(len(pecs_elements), 135)
# 135 obtido por conferência manual com:
# http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarProposicoes?sigla=PEC&numero=&ano=2011&datApresentacaoIni=&datApresentacaoFim=&autor=&parteNomeAutor=&siglaPartidoAutor=&siglaUFAutor=&generoAutor=&codEstado=&codOrgaoEstado=&emTramitacao=
pecs_2011_json = cdep.Camaraws.listar_proposicoes('PEC', '2011')
self.assertEqual(len(pecs_2011_json), 135)
def test_prop_nao_existe(self):
id_que_nao_existe = 'id_que_nao_existe'
caught = False
try:
self.camaraws.obter_proposicao_por_id(id_que_nao_existe)
except ValueError as e:
self.assertEqual(
str(e), 'Proposicao %s nao encontrada' % id_que_nao_existe)
caught = True
self.assertTrue(caught)
id_que_nao_existe = -1
with self.assertRaises(ValueError):
cdep.Camaraws.obter_proposicao_por_id(id_que_nao_existe)
def test_votacoes_nao_existe(self):
sigla = 'PCC'
num = '1500'
ano = '1876'
caught = False
try:
self.camaraws.obter_votacoes(sigla, num, ano)
except ValueError as e:
self.assertEqual(
str(e), 'Votacoes da proposicao %s %s/%s nao encontrada'
% (sigla, num, ano))
caught = True
self.assertTrue(caught)
with self.assertRaises(ValueError):
cdep.Camaraws.obter_votacoes(-1)
def test_listar_proposicoes_que_nao_existem(self):
sigla = 'PEC'
ano = '2113'
caught = False
try:
self.camaraws.listar_proposicoes(sigla, ano)
except ValueError as e:
self.assertEqual(
str(e), 'Proposicoes nao encontradas para sigla=%s&ano=%s'
% (sigla, ano))
caught = True
self.assertTrue(caught)
self.assertEqual(cdep.Camaraws.listar_proposicoes(sigla, ano), [])
def test_listar_siglas(self):
siglas = self.camaraws.listar_siglas()
siglas = cdep.Camaraws.listar_siglas()
self.assertTrue('PL' in siglas)
self.assertTrue('PEC' in siglas)
self.assertTrue('MPV' in siglas)
def test_votacao_presente_plenario(self):
ANO_PLENARIO = 2013
ANO = 2013
NOME_PLENARIO = 'REQ 8196/2013'
NOT_NOME_PLENARIO = 'DAVID 1309/1992'
etree_plenario = self.camaraws.obter_proposicoes_votadas_plenario(
ANO_PLENARIO)
nome_prop_list = []
for nomeProp in etree_plenario:
nome_prop_list.append(nomeProp.find('nomeProposicao').text)
etree_plenario = cdep.Camaraws.obter_proposicoes_votadas_plenario(ANO)
nome_prop_list = [
nomeProp.find('nomeProposicao').text for nomeProp in etree_plenario
]
self.assertTrue(NOME_PLENARIO in nome_prop_list)
self.assertFalse(NOT_NOME_PLENARIO in nome_prop_list)
docker-compose build test
#!/bin/sh
docker-compose run --no-deps --rm test test_only
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment