Commit 772383f1 authored by Diego Rabatone's avatar Diego Rabatone

Merge branch '493-fix_api_cdep' into 'master'

Resolve "[URGENTE] Problemas com a API da CDEP"

Closes #493.

Continuação do merge request proposto em !512. Mesmas alterações, apenas usando a branch no repositório principal para evitar erro com o registry do docker durante a build.

See merge request !513
See merge request !512
parents db326d0f 8ff79753
Pipeline #61333532 passed with stages
in 9 minutes and 39 seconds
......@@ -20,6 +20,7 @@ sockets/*
.*.swp
__pycache__
.ropeproject
*.db
# eclipse related
.project
......
......@@ -16,7 +16,9 @@ variables:
LATEST_IMAGE: "${DOCKER_REGISTRY}production:latest"
before_script:
- apk add --no-cache py-pip git make
# py-paramiko added to avoid issues with gcc while installing docker-compose
# https://github.com/docker/compose/issues/6617
- apk add --no-cache py-pip git make py-paramiko
- pip install docker-compose
# Doing it here because of:
# - https://gitlab.com/gitlab-org/gitlab-ce/issues/48061#note_101405444
......
......@@ -10,7 +10,14 @@ FROM radarparlamentar/base:1.0.3
COPY radar_parlamentar/requirements.txt /tmp/requirements.txt
# libxml2-dev é uma dependência do zeep, pacote utilizado para interagir com SOAP no python.
# Os outros pacotes são necessários para a instalação correta da mesma.
RUN set -ex \
&& apk --no-cache add --virtual _build_deps \
libxml2-dev \
libxslt-dev \
libc-dev \
gcc \
&& pip install -U pip setuptools wheel \
&& pip install -r /tmp/requirements.txt \
&& rm -rf ~/.cache/pip/*
......
This diff is collapsed.
......@@ -18,55 +18,44 @@
import bz2
import os
import glob
import json
import xml.etree.ElementTree as etree
from lxml import 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"""
arquivo = os.path.join(MOCK_PATH, nome_arquivo)
with bz2.open(arquivo, mode='rt') as arquivo_xml:
return etree.fromstring(arquivo_xml.read())
for xml in XMLS:
if nome_arquivo == os.path.basename(xml):
with bz2.open(xml, mode='rt') as arquivo_xml:
return etree.parse(arquivo_xml).getroot()
raise ValueError
def parse_arquivo_json(nome_arquivo):
"""retorna json como dicionario"""
def mock_obter_proposicao(id_prop):
"""retorna etree"""
return parse_arquivo_xml('proposicao_%s.xml.bz2' % id_prop)
arquivo = os.path.join(MOCK_PATH, nome_arquivo)
with bz2.open(arquivo, mode='rt') as arquivo_json:
return json.load(arquivo_json)
def mock_obter_proposicao(id_prop):
"""retorna dicionario"""
return parse_arquivo_json('proposicao_%s.json.bz2' % id_prop)
def mock_listar_proposicoes(sigla, ano):
"""retorna etree"""
return parse_arquivo_xml('proposicoes_%s%s.xml.bz2' % (sigla, ano))
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(prop_id):
"""retorna etree"""
xml = parse_arquivo_xml('votacoes_%s.xml.bz2' % (prop_id))
votacoes_list = xml.find('Votacoes') # corresponde ao elemento <votacoes>
return votacoes_list.findall('Votacao') # retorna uma lista com vários <votacao>
......@@ -11,5 +11,6 @@ ipython
coveralls
coverage
codacy-coverage
zeep
# Dependência para o coveralls
pyyaml
......@@ -18,10 +18,9 @@
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'
......@@ -29,53 +28,59 @@ NOME = 'PL 1876/1999'
class CamarawsTest(TestCase):
"""Realiza testes envolvendo os web services da câmara"""
def test_obter_proposicao(self):
codigo_florestal_json = cdep.Camaraws.obter_proposicao_por_id(ID)
def setUp(self):
self.camaraws = cdep.Camaraws()
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_proposicao(self):
codigo_florestal_xml = self.camaraws.obter_proposicao_por_id(ID)
nome = codigo_florestal_xml.find('nomeProposicao').text
self.assertEqual(nome, NOME)
def test_obter_votacoes(self):
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')
codigo_florestal_xml = self.camaraws.obter_votacoes(ID)
data_vot_encontrada = codigo_florestal_xml[0].get('Data')
def test_listar_proposicoes(self):
pecs_2011_json = cdep.Camaraws.listar_proposicoes('PEC', '2011')
self.assertEqual(len(pecs_2011_json), 135)
self.assertEqual(data_vot_encontrada, '11/5/2011')
def test_prop_nao_existe(self):
id_que_nao_existe = -1
with self.assertRaises(ValueError):
cdep.Camaraws.obter_proposicao_por_id(id_que_nao_existe)
id_que_nao_existe = 'id_que_nao_existe'
try:
self.camaraws.obter_proposicao_por_id(id_que_nao_existe)
self.fail('Foi solicitada uma proposição com um ID inexistente, e mesmo assim uma exceção não foi levantada.')
except ValueError as e:
self.assertEqual(
str(e), 'Proposicao %s nao encontrada' % id_que_nao_existe)
def test_votacoes_nao_existe(self):
with self.assertRaises(ValueError):
cdep.Camaraws.obter_votacoes(-1)
id_que_nao_existe = '-1'
caught = False
def test_listar_proposicoes_que_nao_existem(self):
sigla = 'PEC'
ano = '2113'
self.assertEqual(cdep.Camaraws.listar_proposicoes(sigla, ano), [])
try:
self.camaraws.obter_votacoes(id_que_nao_existe)
except ValueError as e:
self.assertEqual(
str(e), 'Votacoes da proposicao %s nao encontrada' % id_que_nao_existe)
caught = True
self.assertTrue(caught)
def test_listar_siglas(self):
siglas = cdep.Camaraws.listar_siglas()
siglas = self.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 = 2013
ANO_PLENARIO = 2013
NOME_PLENARIO = 'REQ 8196/2013'
NOT_NOME_PLENARIO = 'DAVID 1309/1992'
etree_plenario = cdep.Camaraws.obter_proposicoes_votadas_plenario(ANO)
nome_prop_list = [
nomeProp.find('nomeProposicao').text for nomeProp in etree_plenario
]
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)
self.assertTrue(NOME_PLENARIO in nome_prop_list)
self.assertFalse(NOT_NOME_PLENARIO in nome_prop_list)
self.assertFalse(NOT_NOME_PLENARIO in nome_prop_list)
\ No newline at end of file
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