radar-parlamentar/radar

View on GitHub
radar_parlamentar/importadores/sen_indexacao.py

Summary

Maintainability
A
2 hrs
Test Coverage
from modelagem.models import Proposicao
from modelagem.models import CasaLegislativa
import urllib.request
import urllib.error
import urllib.parse
import xml.etree.ElementTree as etree
import logging

logger = logging.getLogger("radar")


def get_materia_xml(proposicao):
    url = "http://legis.senado.gov.br/dadosabertos/materia/%s/%s/%s" % \
        (proposicao.sigla, proposicao.numero, proposicao.ano)
    try:
        request = urllib.request.Request(url)
        materia_xml = urllib.request.urlopen(request).read()
    except urllib.error.URLError as error:
        logger.error("urllib2.URLError: %s" % error)
        raise ValueError(
            'materia_xml não encontrada para %s %s/%s' %
            (proposicao.sigla, proposicao.numero, proposicao.ano))
    try:
        tree = etree.fromstring(materia_xml)
    except etree.ParseError as error:
        logger.error("etree.ParseError: %s" % error)
        raise ValueError(
            'materia_xml não encontrada para %s %s/%s' %
            (proposicao.sigla, proposicao.numero, proposicao.ano))
    return tree


def inserirIndex(proposicao):
    materia_xml = get_materia_xml(proposicao)
    ementa = materia_xml.find(
        "Materia").find("DadosBasicosMateria").find("EmentaMateria")
    if ementa is not None:
        proposicao.descricao = ementa.text
    index = materia_xml.find(
        "Materia").find("DadosBasicosMateria").find("IndexacaoMateria")
    if index is not None:
        proposicao.indexacao = index.text
    proposicao.save()


def indexar_proposicoes():
    senado = CasaLegislativa.objects.get(nome_curto="sen")
    proposicoes = Proposicao.objects.filter(casa_legislativa=senado,
                                            indexacao__isnull=True,
                                            ementa__isnull=True)
    for proposicao in proposicoes:
        inserirIndex(proposicao)


def main():
    indexar_proposicoes()