Ejemplo n.º 1
0
    def _prop_from_xml(self, prop_xml, id_prop):
        """Recebe XML representando proposição (objeto etree)
        e devolve objeto do tipo Proposicao, que é salvo no banco de dados.
        Caso proposição já exista no banco, é retornada a proposição que já estava no banco.
        """
        try:
            query = models.Proposicao.objects.filter(
                id_prop=id_prop, casa_legislativa=self.camara_dos_deputados)
        except DatabaseError:
            # try again
            time.sleep(1)
            query = models.Proposicao.objects.filter(
                id_prop=id_prop, casa_legislativa=self.camara_dos_deputados)

        if query:
            prop = query[0]
        else:
            prop = models.Proposicao()
            prop.id_prop = id_prop
            prop.sigla = prop_xml.get('tipo').strip()
            prop.numero = prop_xml.get('numero').strip()
            prop.ano = prop_xml.get('ano').strip()
            prop.ementa = prop_xml.find('Ementa').text.strip()
            prop.descricao = prop_xml.find('ExplicacaoEmenta').text.strip()
            prop.indexacao = prop_xml.find('Indexacao').text.strip()
            #prop.autores = prop_xml.find('Autor').text.strip()
            date_str = prop_xml.find('DataApresentacao').text.strip()
            prop.data_apresentacao = self._converte_data(date_str)
            prop.situacao = prop_xml.find('Situacao').text.strip()
            prop.casa_legislativa = self.camara_dos_deputados
            prop.save()
        return prop
Ejemplo n.º 2
0
    def _from_xml_to_bd(self, xml_file):
        """Salva no banco de dados do Django e retorna lista das votações"""

        f = open(xml_file, 'r')
        xml = f.read()
        f.close()
        tree = etree.fromstring(xml)

        proposicoes = {
        }  # chave é string (ex: 'pl 127/2004'); valor é objeto do tipo Proposicao
        votacoes = []

        for vot_tree in tree.getchildren():
            if vot_tree.tag == 'Votacao' and vot_tree.get(
                    'TipoVotacao') == 'Nominal':  # se é votação nominal
                resumo = '%s -- %s' % (vot_tree.get('Materia'),
                                       vot_tree.get('Ementa'))

                # Prop_nome eh como se identificam internamente por ora as propostas.
                # Queremos saber a que proposicao estah associada a votacao analisanda.
                prop_nome = self._prop_nome(
                    resumo
                )  # vai retornar prop_nome se votação for de proposição

                # se a votacao for associavel a uma proposicao, entao..
                if (prop_nome):
                    # a proposicao aa qual a votacao sob analise se refere jah estava no dicionario (eba!)
                    if proposicoes.has_key(prop_nome):
                        prop = proposicoes[prop_nome]
                    # a prop. nao estava ainda, entao devemo-la tanto  criar qnt cadastrar no dicionario.
                    else:
                        prop = models.Proposicao()
                        prop.sigla, prop.numero, prop.ano = self.tipo_num_anoDePropNome(
                            prop_nome)
                        prop.casa_legislativa = self.cmsp
                        proposicoes[prop_nome] = prop

                    if self.verbose:
                        print 'Proposição %s salva' % prop
                    prop.save()
                    vot = models.Votacao()
                    vot.save(
                    )  # só pra criar a chave primária e poder atribuir o votos
                    vot.id_vot = vot_tree.get('VotacaoID')
                    vot.descricao = resumo
                    vot.data = self._converte_data(
                        vot_tree.get('DataDaSessao'))
                    vot.resultado = vot_tree.get('Resultado')
                    self._votos_from_tree(vot_tree, vot)
                    vot.proposicao = prop
                    if self.verbose:
                        print 'Votação %s salva' % vot
                    else:
                        self.progresso()
                    vot.save()

                    votacoes.append(vot)

        return votacoes
 def test_recupera_votacoes_da_proposicao(self):
     proposicao = models.Proposicao()
     proposicao.id = 1
     votacoes = models.Votacao.objects.all()
     filtro_votacao = filtro.FiltroVotacao()
     votacoes_da_proposicao = filtro_votacao._recupera_votacoes_da_proposicao(
         proposicao, votacoes)
     self.assertEquals(1, len(votacoes_da_proposicao))
Ejemplo n.º 4
0
 def create_proposition(self, proposicoes, prop_nome,vot_tree):
     proposicao = models.Proposicao()
     proposicao.sigla, proposicao.numero, proposicao.ano = self. \
         tipo_num_anoDePropNome(prop_nome)
     proposicao.ementa = vot_tree.get('Ementa')
     proposicao.casa_legislativa = self.cmsp
     proposicoes[prop_nome] = proposicao
     return proposicao
Ejemplo n.º 5
0
    def setUpClass(cls):
        '''Metodo responsavel por setar o que for necessario para rodar os
        testes. No nosso a criacao dos objetos no banco de testes'''

        partidoTest1 = models.Partido(nome='PMDB', numero='40')
        partidoTest2 = models.Partido(nome='PT', numero='13')
        partidoTest3 = models.Partido(nome='PSDB', numero='23')
        partidoTest1.save()
        partidoTest2.save()
        partidoTest3.save()

        parlamentarTest1 = models.Parlamentar(
            id_parlamentar='', nome='Ivandro Cunha Lima', genero='')
        parlamentarTest2 = models.Parlamentar(
            id_parlamentar='', nome='Fernando Ferro', genero='')
        parlamentarTest3 = models.Parlamentar(
            id_parlamentar='', nome='Humberto Costa', genero='')

        parlamentarTest1.save()
        parlamentarTest2.save()
        parlamentarTest3.save()

        casa_legislativaTest1 = models.CasaLegislativa(
            nome='Camara dos Deputados', nome_curto='cdep', esfera='FEDERAL',
            local='', atualizacao='2012-06-01')

        casa_legislativaTest2 = models.CasaLegislativa(
            nome='Camara Municipal de Sao Paulo', nome_curto='cmsp',
            esfera='MUNICIPAL', local='Sao Paulo - SP',
            atualizacao='2012-12-31')

        casa_legislativaTest1.save()
        casa_legislativaTest2.save()

        legislaturaTest1 = models.Legislatura(
            parlamentar=parlamentarTest1,
            casa_legislativa=casa_legislativaTest1, inicio='2004-01-01',
            fim='2012-07-01', partido=partidoTest1, localidade='PB')
        legislaturaTest1.save()

        proposicaoTest1 = models.Proposicao()
        proposicaoTest1.id_prop = '5555'
        proposicaoTest1.sigla = 'PL'
        proposicaoTest1.numero = '4520'
        proposicaoTest1.casa_legislativa = casa_legislativaTest1
        proposicaoTest1.save()

        votacaoTest1 = models.Votacao(
            id_vot=' 12345', descricao='Teste da votacao',
            data='1900-12-05', resultado='Teste', proposicao=proposicaoTest1)
        votacaoTest1.save()

        votoTest1 = models.Voto(
            votacao=votacaoTest1, legislatura=legislaturaTest1, opcao='TESTE')
        votoTest1.save()

        exportar.main()
Ejemplo n.º 6
0
    def get_votings_from_tree(self, proposicoes, votacoes, vot_tree):

        # If the votation is nominal, vot_tree gets the subject and the menu
        # Gets the type of voting from 'vot_tree'.
        type_of_votating = vot_tree.get('TipoVotacao')

        if vot_tree.tag == 'Votacao' and type_of_votating == 'Nominal':

            # Receive 'Materia' and 'Ementa' from 'vot_tree'.
            abstract = '%s -- %s' % (vot_tree.get('Materia'),
                                     vot_tree.get('Ementa'))

            # Prop_nome is as internally identifies the proposals
            # We want to know which proposition the analyzed voting is associated
            # Will return if search_propostition_by_name vote for Proposition
            proposition_name = self.search_propostition_by_name(abstract)

            # If the voting was associable to a proposition, so..
            if (proposition_name):
                id_vote = vot_tree.get('VotacaoID')
                voting_blank = models.Votacao.objects.filter(id_vot=id_vote)
                if voting_blank:
                    vot = voting_blank[0]
                else:
                    if proposition_name in proposicoes:
                        proposition = proposicoes[proposition_name]

                    # The propositon was not in dictionary yet, so we have to create and
                    # register it on dictionary
                    else:
                        proposition = models.Proposicao()
                        proposition.sigla, proposition.numero, proposition.ano = self.extract_year_from_num_and_year(
                            proposition_name)
                        proposition.casa_legislativa = self.cmsp
                        proposicoes[proposition_name] = proposition

                    if self.verbose:
                        print 'Proposicao %s salva' % proposition
                    proposition.save()
                    vot = models.Votacao()

                    # To create de primary key and assign the votes
                    vot.save()
                    vot.id_vot = id_vote
                    vot.descricao = abstract
                    vot.data = self.convert_data(vot_tree.get('DataDaSessao'))
                    vot.resultado = vot_tree.get('Resultado')
                    self.get_votes_from_tree(vot_tree, vot)
                    vot.proposicao = proposition
                    if self.verbose:
                        print 'Votacao %s salva' % vot
                    else:
                        self.show_progress()
                    vot.save()

                votacoes.append(vot)
Ejemplo n.º 7
0
 def _gera_proposicao(self, num, descricao):  
     prop = models.Proposicao()    
     prop.id_prop = num
     prop.sigla = 'PL'
     prop.numero = num
     prop.ementa = descricao
     prop.descricao = descricao
     prop.casa_legislativa = self.casa
     prop.save()
     return prop
Ejemplo n.º 8
0
    def test_filtro_proposicao1(self):
        lista_teste = []
        lista_teste2 = []
        palavra_proposicao = models.Proposicao()
        obj_filtro = filtro.Filtro_Proposicao()
        obj_filtro1 = filtro.Filtro_Proposicao()
        palavra_proposicao1 = models.Proposicao()
        palavra_proposicao.sigla = 'PTB'
        sigla = 'PTB'
        palavra_proposicao.descricao = 'Discussao da legalizacao do aborto'
        palavra_proposicao1.descricao = 'Estudo de caso para viabilidade do VLP'
        palavra_proposicao1.sigla = 'PM'
        sigla1 = 'PM'
        palavra_proposicao.save()
        palavra_proposicao1.save()

        self.assertFalse(palavra_proposicao.descricao in
                         obj_filtro.filtra_proposicao([sigla], ['musica']))
        self.assertFalse(palavra_proposicao1.descricao in
                         obj_filtro1.filtra_proposicao([sigla1], ['futebol']))
Ejemplo n.º 9
0
Archivo: cmsp.py Proyecto: Attany/radar
    def votacao_from_tree(self, proposicoes,
                          votacoes, vot_tree):
        # se é votação nominal
        votacao_TipoVotacao = vot_tree.get('TipoVotacao')
        if vot_tree.tag == 'Votacao' and votacao_TipoVotacao == 'Nominal':
            # Prop_nome eh como se identifica internamente as propostas.
            # Queremos saber a que proposicao estah associada a votacao
            # analisanda.
            # vai retornar prop_nome se votação for de proposição
            prop_nome = self.prop_nome(vot_tree.get('Materia'))
            # se a votacao for associavel a uma proposicao, entao..
            if prop_nome:
                id_vot = vot_tree.get('VotacaoID')
                votacoes_em_banco = models.Votacao.objects.filter(
                    proposicao__casa_legislativa__nome_curto='cmsp', id_vot=id_vot)
                if votacoes_em_banco:
                    vot = votacoes_em_banco[0]
                else:
                    # a proposicao a qual a votacao sob analise se refere jah
                    # estava no dicionario (eba!)
                    if prop_nome in proposicoes:
                        prop = proposicoes[prop_nome]
                    # a prop. nao estava ainda, entao devemo-la tanto  criar
                    # qnt cadastrar no dicionario.
                    else:
                        prop = models.Proposicao()
                        prop.sigla, prop.numero, prop.ano = self. \
                            tipo_num_anoDePropNome(prop_nome)
                        prop.ementa = vot_tree.get('Ementa')
                        prop.casa_legislativa = self.cmsp
                        proposicoes[prop_nome] = prop

                    if self.verbose:
                        logger.info('Proposicao %s salva' % prop)
                    prop.save()
                    vot = models.Votacao()
                    # só pra criar a chave primária e poder atribuir o votos
                    vot.save()
                    vot.id_vot = id_vot
                    vot.descricao = vot_tree.get('Materia') + ' - ' + vot_tree.get('NotasRodape')
                    vot.data = self.data_da_sessao
                    vot.resultado = vot_tree.get('Resultado')
                    self.votos_from_tree(vot_tree, vot)
                    vot.proposicao = prop
                    if self.verbose:
                        logger.info('Votacao %s salva' % vot)
                    else:
                        self.progresso()
                    vot.save()

                votacoes.append(vot)
Ejemplo n.º 10
0
    def _proposicao_from_tree(self, votacao_tree):

        prop_nome = self._nome_prop_from_tree(votacao_tree)
        if prop_nome in self.proposicoes:
            prop = self.proposicoes[prop_nome]
        else:
            prop = models.Proposicao()
            prop.sigla = votacao_tree.find('SiglaMateria').text
            prop.numero = votacao_tree.find('NumeroMateria').text
            prop.ano = votacao_tree.find('AnoMateria').text
            prop.casa_legislativa = self.senado
            prop.save()
            self.proposicoes[prop_nome] = prop
        return prop
Ejemplo n.º 11
0
    def get_proposition_from_tree(self, votacao_tree):

        # Receive proposition's name.
        proposition_name = self.get_proposition_data(votacao_tree)

        if proposition_name in self.proposicoes:
            proposition = self.proposicoes[proposition_name]
        else:

            # Get 'Proposicao' from 'models'.
            proposition = models.Proposicao()
            proposition.sigla = votacao_tree.find_legislature(
                'SiglaMateria').text
            proposition.numero = votacao_tree.find_legislature(
                'NumeroMateria').text
            proposition.ano = votacao_tree.find_legislature('AnoMateria').text
            proposition.casa_legislativa = self.senado
            proposition.save()
            self.proposicoes[proposition_name] = proposition
        return proposition
Ejemplo n.º 12
0
    def votacao_from_tree(self, proposicoes, votacoes, vot_tree):
        if vot_tree.tag == 'Votacao' and vot_tree.get(
                'TipoVotacao') == 'Nominal':  # se é votação nominal
            resumo = '%s -- %s' % (vot_tree.get('Materia'),
                                   vot_tree.get('Ementa'))
            # Prop_nome eh como se identificam internamente por ora as propostas.
            # Queremos saber a que proposicao estah associada a votacao analisanda.
            prop_nome = self.prop_nome(
                resumo)  # vai retornar prop_nome se votação for de proposição
            # se a votacao for associavel a uma proposicao, entao..
            if (prop_nome):
                # a proposicao a qual a votacao sob analise se refere jah estava no dicionario (eba!)
                if proposicoes.has_key(prop_nome):
                    prop = proposicoes[prop_nome]
                # a prop. nao estava ainda, entao devemo-la tanto  criar qnt cadastrar no dicionario.
                else:
                    prop = models.Proposicao()
                    prop.sigla, prop.numero, prop.ano = self.tipo_num_anoDePropNome(
                        prop_nome)
                    prop.casa_legislativa = self.cmsp
                    proposicoes[prop_nome] = prop

                if self.verbose:
                    print 'Proposicao %s salva' % prop
                prop.save()
                vot = models.Votacao()
                vot.save(
                )  # só pra criar a chave primária e poder atribuir o votos
                vot.id_vot = vot_tree.get('VotacaoID')
                vot.descricao = resumo
                vot.data = self.converte_data(vot_tree.get('DataDaSessao'))
                vot.resultado = vot_tree.get('Resultado')
                self.votos_from_tree(vot_tree, vot)
                vot.proposicao = prop
                if self.verbose:
                    print 'Votacao %s salva' % vot
                else:
                    self.progresso()
                vot.save()

                votacoes.append(vot)
Ejemplo n.º 13
0
    def _new_votation8(self):

        NUM = '8'
        DESCRICAO = 'Guerra contra a Inglaterra'
        prop = models.Proposicao()
        prop.id_prop = NUM
        prop.sigla = 'PL'
        prop.numero = NUM
        prop.ementa = 'o uso proibido de armas químicas'
        prop.descricao = 'descricao da guerra'
        prop.casa_legislativa = self.casa
        prop.indexacao = 'bombas, efeitos, destruições'
        prop.save()
        votacao = self._new_votation(NUM, DESCRICAO, BEGIN_SECOND_SEMESTER,
                                     prop)

        self.girondine_votes2(votacao)

        self.jacobine_votes8(votacao)

        self.monarquist_votes7(votacao)
Ejemplo n.º 14
0
    def _gera_votacao8(self):

        NUM = '8'
        DESCRICAO = 'Guerra contra a Inglaterra'
        prop = models.Proposicao()
        prop.id_prop = NUM
        prop.sigla = 'PL'
        prop.numero = NUM
        prop.ementa = 'o uso proibido de armas químicas'
        prop.descricao = 'descricao da guerra'
        prop.casa_legislativa = self.casa
        prop.indexacao = 'bombas, efeitos, destruições'
        prop.save()
        votacao = self._gera_votacao(NUM, DESCRICAO, DATA_NO_SEGUNDO_SEMESTRE,
                                     prop)

        votos_girondinos = [models.NAO, models.NAO, models.NAO]
        self._gera_votos(votacao, GIRONDINOS, votos_girondinos)

        votos_jacobinos = [models.ABSTENCAO, models.NAO, models.NAO]
        self._gera_votos(votacao, JACOBINOS, votos_jacobinos)

        votos_monarquistas = [models.SIM, models.AUSENTE, models.SIM]
        self._gera_votos(votacao, MONARQUISTAS, votos_monarquistas)
Ejemplo n.º 15
0
    def _prop_from_xml(self, prop_xml):
        """prop_xml -- tipo etree

        Retorna proposicao
        """
        id_prop = prop_xml.find('idProposicao').text.strip()
        prop = models.Proposicao()
        prop.id_prop = id_prop
        prop.sigla = prop_xml.get('tipo').strip()
        prop.numero = prop_xml.get('numero').strip()
        prop.ano = prop_xml.get('ano').strip()
        logger.info("Importando %s %s/%s" %
                    (prop.sigla, prop.numero, prop.ano))
        prop.ementa = prop_xml.find('Ementa').text.strip()
        prop.descricao = prop_xml.find('ExplicacaoEmenta').text.strip()
        prop.indexacao = prop_xml.find('Indexacao').text.strip()
        prop.autor_principal = prop_xml.find('Autor').text.strip()
        date_str = prop_xml.find('DataApresentacao').text.strip()
        prop.data_apresentacao = _converte_data(date_str)
        prop.situacao = prop_xml.find('Situacao').text.strip()
        prop.casa_legislativa = self.camara_dos_deputados
        prop.save()
        self.proposicoes[id_prop] = prop
        return prop
Ejemplo n.º 16
0
    def setUpClass(cls):
        """Method to set responsible for what is needed to run the tests. 
        In this case, the creation of objects in the test bank."""

        testParty1 = models.Partido(nome='PMDB', numero='40')
        testParty2 = models.Partido(nome='PT', numero='13')
        partyTest3 = models.Partido(nome='PSDB', numero='23')
        testParty1.save()
        testParty2.save()
        partyTest3.save()

        parliamentaryTest1 = models.Parlamentar(id_parlamentar='',
                                                nome='Ivandro Cunha Lima',
                                                genero='')
        parliamentaryTest2 = models.Parlamentar(id_parlamentar='',
                                                nome='Fernando Ferro',
                                                genero='')
        parliamentaryTest3 = models.Parlamentar(id_parlamentar='',
                                                nome='Humberto Costa',
                                                genero='')

        parliamentaryTest1.save()
        parliamentaryTest2.save()
        parliamentaryTest3.save()

        legislative_houseTest1 = models.CasaLegislativa(
            nome='Camara dos Deputados',
            nome_curto='cdep',
            esfera='FEDERAL',
            local='',
            atualizacao='2012-06-01')

        legislative_houseTest2 = models.CasaLegislativa(
            nome='Camara Municipal de Sao Paulo',
            nome_curto='cmsp',
            esfera='MUNICIPAL',
            local='Sao Paulo - SP',
            atualizacao='2012-12-31')

        legislative_houseTest1.save()
        legislative_houseTest2.save()

        legislatureTest1 = models.Legislatura(
            parlamentar=parliamentaryTest1,
            casa_legislativa=legislative_houseTest1,
            inicio='2004-01-01',
            fim='2012-07-01',
            partido=testParty1,
            localidade='PB')
        legislatureTest1.save()

        propositionTest1 = models.Proposicao()
        propositionTest1.id_prop = '5555'
        propositionTest1.sigla = 'PL'
        propositionTest1.numero = '4520'
        propositionTest1.casa_legislativa = legislative_houseTest1
        propositionTest1.save()

        votingTest1 = models.Votacao(id_vot=' 12345',
                                     descricao='Teste da votacao',
                                     data='1900-12-05',
                                     resultado='Teste',
                                     proposicao=propositionTest1)
        votingTest1.save()

        voteTest1 = models.Voto(votacao=votingTest1,
                                legislatura=legislatureTest1,
                                opcao='TESTE')
        voteTest1.save()

        exportar.main()
Ejemplo n.º 17
0
class ImportadorCamara:

    """Saves the data of the web services of the Chamber of Deputies in the database."""

    def __init__(self, voted, verbose=False):
        """verbose (booleano) -- enables / disables the screen prints."""

        self.verbose = verbose
        # id/sigla/num/ano das proposições que tiveram votações
        self.votadas = voted
        self.total = len(self.votadas)

        # Indicate progress:
        self.importadas = 0  
        self.partidos = {}

            # Political partidos cache (key is name, and value is object Partido)
        self.parlamentares = {}

            # Parliamentary cache (key is 'nome-search_political_party', and value é object Parlamentar


    def _converte_data(self, data_string, hour_string='00:00'):
        """Convert string 'd/m/a' to object datetime.
        Returns None if data_str is invalid.
        can also receive time: hora_str likes 'h:m'."""

        DATA_REGEX = '(\d\d?)/(\d\d?)/(\d{4})'
        HORA_REGEX = '(\d\d?):(\d\d?)'
        date_regex_variable = re.match(DATA_REGEX, data_string)
        hour_regex_variable = re.match(HORA_REGEX, hour_string)

        if date_regex_variable and hour_regex_variable:
            new_str = '%s-%s-%s %s:%s:0' % (
                date_regex_variable.group(3), date_regex_variable.group(2), date_regex_variable.group(1),
                hour_regex_variable.group(1), hour_regex_variable.group(2))
            return parse_datetime(new_str)
        else:
            return None

    def _gera_casa_legislativa(self):

        """Creates object likes CasaLegislativa,
        Chamber of Deputies and save in database.
        If cdep already exists in the database, returns the existing object."""

        LOCK_TO_CREATE_CASA.acquire()
        count_cdep = models.CasaLegislativa.objects.filter(
            nome_curto='cdep').count()

        no_records = 0

        if (count_cdep == no_records):
            deputies_chamber = models.CasaLegislativa()
            deputies_chamber.nome = 'Câmara dos Deputados'
            deputies_chamber.nome_curto = 'cdep'
            deputies_chamber.esfera = models.FEDERAL
            deputies_chamber.atualizacao = LAST_UPDATE
            deputies_chamber.save()
            LOCK_TO_CREATE_CASA.release()
            return deputies_chamber
        else:
            LOCK_TO_CREATE_CASA.release()
            return models.CasaLegislativa.objects.get(nome_curto='cdep')

    def _prop_from_xml(self, proposition_xml, id_proposition):
        """Receive XML representing proposition (object etree)
        and returns objects like Proposicao, which is saved in database.
        If proposition already exists in the database, it returned the proposition
        that was already in the bank."""

        try:
            query = models.Proposicao.objects.filter(
                id_prop=id_proposition, casa_legislativa=self.camara_dos_deputados)
        except DatabaseError, error:
            logger.error("DatabaseError: %s" % error)

            # try again
            time.sleep(1)
            query = models.Proposicao.objects.filter(
                id_prop=id_proposition, casa_legislativa=self.camara_dos_deputados)

        if query:
            proposition = query[0]
        else:
            proposition = models.Proposicao()
            proposition.id_prop = id_proposition
            proposition.sigla = proposition_xml.get('tipo').strip()
            proposition.numero = proposition_xml.get('numero').strip()
            proposition.ano = proposition_xml.get('ano').strip()
            proposition.ementa = proposition_xml.find_legislature('Ementa').text.strip()
            proposition.descricao = proposition_xml.find_legislature('ExplicacaoEmenta').text.strip()
            proposition.indexacao = proposition_xml.find_legislature('Indexacao').text.strip()
            proposition.autor_principal = proposition_xml.find_legislature('Autor').text.strip()
            date_str = proposition_xml.find_legislature('DataApresentacao').text.strip()
            proposition.data_apresentacao = self._converte_data(date_str)
            proposition.situacao = proposition_xml.find_legislature('Situacao').text.strip()
            proposition.casa_legislativa = self.camara_dos_deputados
            proposition.save()
        return proposition
Ejemplo n.º 18
0
    def setUpClass(cls):
        #Criando dados ficticios no mock
        partidoTest1 = models.Partido(nome='PMDB', numero='40')
        partidoTest2 = models.Partido(nome='PT', numero='13')
        partidoTest3 = models.Partido(nome='PSDB', numero='23')

        partidoTest1.save()
        partidoTest2.save()
        partidoTest3.save()

        parlamentarTest1 = models.Parlamentar(id_parlamentar='',
                                              nome='Ivandro Cunha Lima',
                                              genero='')
        parlamentarTest2 = models.Parlamentar(id_parlamentar='',
                                              nome='Fernando Ferro',
                                              genero='')
        parlamentarTest3 = models.Parlamentar(id_parlamentar='',
                                              nome='Humberto Costa',
                                              genero='')

        parlamentarTest1.save()
        parlamentarTest2.save()
        parlamentarTest3.save()

        casa_legislativaTest1 = models.CasaLegislativa(
            nome='Camara dos Deputados',
            nome_curto='cdep',
            esfera='FEDERAL',
            local='',
            atualizacao='2012-06-01')

        casa_legislativaTest2 = models.CasaLegislativa(
            nome='Camara Municipal de Sao Paulo',
            nome_curto='cmsp',
            esfera='MUNICIPAL',
            local='Sao Paulo - SP',
            atualizacao='2012-12-31')

        casa_legislativaTest1.save()
        casa_legislativaTest2.save()

        legislaturaTest1 = models.Legislatura(
            parlamentar=parlamentarTest1,
            casa_legislativa=casa_legislativaTest1,
            inicio='2004-01-01',
            fim='2012-07-01',
            partido=partidoTest1,
            localidade='PB')
        legislaturaTest1.save()

        proposicaoTest1 = models.Proposicao()
        proposicaoTest1.id_prop = '5555'
        proposicaoTest1.sigla = 'PL'
        proposicaoTest1.numero = '4520'
        proposicaoTest1.casa_legislativa = casa_legislativaTest1
        proposicaoTest1.save()

        votacaoTest1 = models.Votacao(id_vot=' 12345',
                                      descricao='Teste da votacao',
                                      data='1900-12-05',
                                      resultado='Teste',
                                      proposicao=proposicaoTest1)
        votacaoTest1.save()

        votoTest1 = models.Voto(votacao=votacaoTest1,
                                legislatura=legislaturaTest1,
                                opcao='TESTE')
        votoTest1.save()

        #Exportando dados do mock para os xml
        exportar.serialize_partido()
        exportar.serialize_parlamentar()
        exportar.serialize_casa_legislativa()
        exportar.serialize_legislatura()
        exportar.serialize_proposicao()
        exportar.serialize_votacao()
        exportar.serialize_voto()

        #Deletando os registros do mock
        partidoTest1.delete()
        partidoTest2.delete()
        partidoTest3.delete()

        parlamentarTest1.delete()
        parlamentarTest2.delete()
        parlamentarTest3.delete()

        casa_legislativaTest1.delete()
        casa_legislativaTest2.delete()

        legislaturaTest1.delete()

        proposicaoTest1.delete()

        votacaoTest1.delete()

        votoTest1.delete()
Ejemplo n.º 19
0
    def carrega_xml(self, nome_curto):
        diretorio = RESOURCES_FOLDER + nome_curto + '.xml'
        try:
            tree = etree.parse(diretorio)
            root = tree.getroot()
        except Exception:
            print "Xml não encontrado"
            return None

        models.CasaLegislativa.deleta_casa(nome_curto)
        print "Voltei"

        casaLegislativa = models.CasaLegislativa()
        casaLegislativa.nome_curto = root.attrib.get("nome_curto")
        #if(models.CasaLegislativa.objects.get(nome_curto = casaLegislativa.nome_curto)):
        #models.deleta_casa(casaLegislativa.nome_curto)

        casaLegislativa.nome = root.attrib.get("nome")
        casaLegislativa.esfera = root.attrib.get("esfera")
        casaLegislativa.local = root.attrib.get("local")
        casaLegislativa.atualizacao = root.attrib.get("atualizacao")
        casaLegislativa.save()

        for child_proposicao in root.iter("Proposicao"):

            proposicao = models.Proposicao()
            proposicao.casa_legislativa = casaLegislativa
            proposicao.id_prop = child_proposicao.attrib.get("id_prop")
            proposicao.sigla = child_proposicao.attrib.get("sigla")
            proposicao.numero = child_proposicao.attrib.get("numero")
            proposicao.ano = child_proposicao.attrib.get("ano")
            proposicao.ementa = child_proposicao.attrib.get("ementa")
            proposicao.descricao = child_proposicao.attrib.get("descricao")
            proposicao.indexacao = child_proposicao.attrib.get("indexacao")
            if (child_proposicao.attrib.get("data_apresentacao") == "None"):
                #Valor default caso a data venha em branco
                proposicao.data_apresentacao = "1900-01-01"
                proposicao.save()
            else:
                proposicao.data_apresentacao = child_proposicao.attrib.get(
                    "data_apresentacao")
                proposicao.save()

            #Pega a filha da subarvore que está sendo percorrida.
            for child_votacao in child_proposicao.findall("Votacao"):

                votacao = models.Votacao()
                votacao.proposicao = proposicao
                votacao.id_votacao = child_votacao.attrib.get("id_votacao")
                votacao.id_vot = child_votacao.attrib.get("id_vot")
                votacao.descricao = child_votacao.attrib.get("descricao")
                votacao.data = child_votacao.attrib.get("data")
                votacao.resultado = child_votacao.attrib.get("resultado")
                votacao.save()
                #self.verifica_votacao = True

                for child_voto in child_votacao.findall("Voto"):

                    partido = models.Partido()
                    partido.numero = child_voto.attrib.get("numero")
                    partido.nome = child_voto.attrib.get("partido")
                    partido_existente = models.Partido.objects.filter(
                        numero=partido.numero, nome=partido.nome)
                    if len(partido_existente) > 0:
                        partido = partido_existente[0]
                    else:
                        partido.save()

                    parlamentar = models.Parlamentar()
                    parlamentar.nome = child_voto.attrib.get("nome")
                    parlamentar.id_parlamentar = child_voto.attrib.get(
                        "id_parlamentar")
                    parlamentar.genero = child_voto.attrib.get("genero")
                    parlamentar_existente = models.Parlamentar.objects.filter(
                        nome=parlamentar.nome,
                        id_parlamentar=parlamentar.id_parlamentar,
                        genero=parlamentar.genero)
                    if len(parlamentar_existente) > 0:
                        parlamentar = parlamentar_existente[0]
                    else:
                        parlamentar.save()

                    legislatura = models.Legislatura()
                    legislatura.partido = partido
                    legislatura.parlamentar = parlamentar
                    legislatura.casa_legislativa = casaLegislativa
                    legislatura.inicio = child_voto.attrib.get("inicio")
                    legislatura.fim = child_voto.attrib.get("fim")
                    legislatura.localidade = child_voto.attrib.get(
                        "localidade")
                    if legislatura.localidade == None:
                        legislatura.localidade = ""
                    else:
                        legislatura.localidade = "" + legislatura.localidade
                    legislatura_existente = models.Legislatura.objects.filter(
                        partido=legislatura.partido,
                        parlamentar=legislatura.parlamentar,
                        casa_legislativa=legislatura.casa_legislativa,
                        inicio=legislatura.inicio,
                        fim=legislatura.fim)
                    if len(legislatura_existente) > 0:
                        legislatura = legislatura_existente[0]
                    else:
                        legislatura.save()

                    voto = models.Voto()
                    voto.votacao = votacao
                    voto.legislatura = legislatura
                    voto.opcao = child_voto.attrib.get("opcao")
                    voto.save()
Ejemplo n.º 20
0
    def setUpClass(cls):

        # Creating dummy data in mock:
        partyTest1 = models.Partido(nome='PMDB', numero='40')
        partyTest2 = models.Partido(nome='PT', numero='13')
        partyTest3 = models.Partido(nome='PSDB', numero='23')

        partyTest1.save()
        partyTest2.save()
        partyTest3.save()

        parliamentarianTest1 = models.Parlamentar(id_parlamentar='',
                                                  nome='Ivandro Cunha Lima',
                                                  genero='')
        parliamentarianTest2 = models.Parlamentar(id_parlamentar='',
                                                  nome='Fernando Ferro',
                                                  genero='')
        parliamentarianTest3 = models.Parlamentar(id_parlamentar='',
                                                  nome='Humberto Costa',
                                                  genero='')

        parliamentarianTest1.save()
        parliamentarianTest2.save()
        parliamentarianTest3.save()

        legislative_houseTest1 = models.CasaLegislativa(
            nome='Camara dos Deputados',
            nome_curto='cdep',
            esfera='FEDERAL',
            local='',
            atualizacao='2012-06-01')

        legislative_houseTest2 = models.CasaLegislativa(
            nome='Camara Municipal de Sao Paulo',
            nome_curto='cmsp',
            esfera='MUNICIPAL',
            local='Sao Paulo - SP',
            atualizacao='2012-12-31')

        legislative_houseTest1.save()
        legislative_houseTest2.save()

        legislatureTest1 = models.Legislatura(
            parlamentar=parliamentarianTest1,
            casa_legislativa=legislative_houseTest1,
            inicio='2004-01-01',
            fim='2012-07-01',
            partido=partyTest1,
            localidade='PB')
        legislatureTest1.save()

        propositionTest1 = models.Proposicao()
        propositionTest1.id_prop = '5555'
        propositionTest1.sigla = 'PL'
        propositionTest1.numero = '4520'
        propositionTest1.casa_legislativa = legislative_houseTest1
        propositionTest1.save()

        votingTest1 = models.Votacao(id_vot=' 12345',
                                     descricao='Teste da votacao',
                                     data='1900-12-05',
                                     resultado='Teste',
                                     proposicao=propositionTest1)
        votingTest1.save()

        voteTest1 = models.Voto(votacao=votingTest1,
                                legislatura=legislatureTest1,
                                opcao='TESTE')
        voteTest1.save()

        # Exporting the mocks's data to XMLs:
        exportar.serialize_partido()
        exportar.serialize_parlamentar()
        exportar.serialize_casa_legislativa()
        exportar.serialize_legislatura()
        exportar.serialize_proposicao()
        exportar.serialize_votacao()
        exportar.serialize_voto()

        # Deleting records of mock:
        partyTest1.delete()
        partyTest2.delete()
        partyTest3.delete()

        parliamentarianTest1.delete()
        parliamentarianTest2.delete()
        parliamentarianTest3.delete()

        legislative_houseTest1.delete()
        legislative_houseTest2.delete()

        legislatureTest1.delete()

        propositionTest1.delete()

        votingTest1.delete()

        voteTest1.delete()
Ejemplo n.º 21
0
class ImportadorCamara:
    """Salva os dados dos web services da
    Câmara dos Deputados no banco de dados"""
    def __init__(self, votadas, verbose=False):
        """verbose (booleano) -- ativa/desativa prints na tela"""

        self.verbose = verbose
        # id/sigla/num/ano das proposições que tiveram votações
        self.votadas = votadas
        self.total = len(self.votadas)
        self.importadas = 0  # serve para indicar progresso
        self.partidos = {}
        # cache de partidos (chave é nome, e valor é objeto Partido)
        self.parlamentares = {}
        # cache de parlamentares (chave é 'nome-partido', e valor é objeto
        # Parlamentar)

    def _converte_data(self, data_str, hora_str='00:00'):
        """Converte string 'd/m/a' para objeto datetime;
        retona None se data_str é inválido
        Pode também receber horário: hora_str como 'h:m'
        """
        DATA_REGEX = '(\d\d?)/(\d\d?)/(\d{4})'
        HORA_REGEX = '(\d\d?):(\d\d?)'
        dt = re.match(DATA_REGEX, data_str)
        hr = re.match(HORA_REGEX, hora_str)
        if dt and hr:
            new_str = '%s-%s-%s %s:%s:0' % (dt.group(3), dt.group(2),
                                            dt.group(1), hr.group(1),
                                            hr.group(2))
            return parse_datetime(new_str)
        else:
            return None

    def _gera_casa_legislativa(self):
        """Gera objeto do tipo CasaLegislativa
        Câmara dos Deputados e o salva no banco de dados.
        Caso cdep já exista no banco de dados, retorna o objeto já existente.
        """
        LOCK_TO_CREATE_CASA.acquire()
        count_cdep = models.CasaLegislativa.objects.filter(
            nome_curto='cdep').count()
        if (count_cdep == 0):
            camara_dos_deputados = models.CasaLegislativa()
            camara_dos_deputados.nome = 'Câmara dos Deputados'
            camara_dos_deputados.nome_curto = 'cdep'
            camara_dos_deputados.esfera = models.FEDERAL
            camara_dos_deputados.atualizacao = ULTIMA_ATUALIZACAO
            camara_dos_deputados.save()
            LOCK_TO_CREATE_CASA.release()
            return camara_dos_deputados
        else:
            LOCK_TO_CREATE_CASA.release()
            return models.CasaLegislativa.objects.get(nome_curto='cdep')

    def _prop_from_xml(self, prop_xml, id_prop):
        """Recebe XML representando proposição (objeto etree)
        e devolve objeto do tipo Proposicao, que é salvo no banco de dados.
        Caso proposição já exista no banco, é retornada a proposição que
        já estava no banco.
        """
        try:
            query = models.Proposicao.objects.filter(
                id_prop=id_prop, casa_legislativa=self.camara_dos_deputados)
        except DatabaseError, error:
            logger.error("DatabaseError: %s" % error)
            # try again
            time.sleep(1)
            query = models.Proposicao.objects.filter(
                id_prop=id_prop, casa_legislativa=self.camara_dos_deputados)

        if query:
            prop = query[0]
        else:
            prop = models.Proposicao()
            prop.id_prop = id_prop
            prop.sigla = prop_xml.get('tipo').strip()
            prop.numero = prop_xml.get('numero').strip()
            prop.ano = prop_xml.get('ano').strip()
            prop.ementa = prop_xml.find('Ementa').text.strip()
            prop.descricao = prop_xml.find('ExplicacaoEmenta').text.strip()
            prop.indexacao = prop_xml.find('Indexacao').text.strip()
            prop.autor_principal = prop_xml.find('Autor').text.strip()
            date_str = prop_xml.find('DataApresentacao').text.strip()
            prop.data_apresentacao = self._converte_data(date_str)
            prop.situacao = prop_xml.find('Situacao').text.strip()
            prop.casa_legislativa = self.camara_dos_deputados
            prop.save()
        return prop
    def carrega_xml(self, short_name):
        directory = RESOURCES_FOLDER + short_name + '.xml'
        try:
            tree = etree.parse(directory)
            root = tree.getroot()
        except Exception:
            logger.error("Arquivo não encontrado: %s.xml" % short_name)
            print "Xml não encontrado"
            return None

        models.CasaLegislativa.remove_house(short_name)
        print "Voltei"

        legislativeHouse = models.CasaLegislativa()
        legislativeHouse.nome_curto = root.attrib.get("short_name")
        legislativeHouse.nome = root.attrib.get("nome")
        legislativeHouse.esfera = root.attrib.get("esfera")
        legislativeHouse.local = root.attrib.get("local")
        legislativeHouse.atualizacao = root.attrib.get("atualizacao")
        legislativeHouse.save()

        for child_proposition in root.iter("Proposicao"):

            proposition = models.Proposicao()
            proposition.casa_legislativa = legislativeHouse
            proposition.id_prop = child_proposition.attrib.get("id_prop")
            proposition.sigla = child_proposition.attrib.get("sigla")
            proposition.numero = child_proposition.attrib.get("numero")
            proposition.ano = child_proposition.attrib.get("ano")
            proposition.ementa = child_proposition.attrib.get("ementa")
            proposition.descricao = child_proposition.attrib.get("descricao")
            proposition.indexacao = child_proposition.attrib.get("indexacao")

            if (child_proposition.attrib.get("data_apresentacao") == "None"):

                # Default value if the date comes in white
                proposition.data_apresentacao = "1900-01-01"
                proposition.save()
            else:
                proposition.data_apresentacao = child_proposition.attrib.get(
                    "data_apresentacao")
                proposition.save()

            # Get the daughter of the subtree being traversed.
            for child_voting in child_proposition.findall("Votacao"):

                voting = models.Votacao()
                voting.proposicao = proposition
                voting.id_votacao = child_voting.attrib.get("id_votacao")
                voting.id_vot = child_voting.attrib.get("id_vot")
                voting.descricao = child_voting.attrib.get("descricao")
                voting.data = child_voting.attrib.get("data")
                voting.resultado = child_voting.attrib.get("resultado")
                voting.save()

                for child_vote in child_voting.findall("Voto"):

                    party = models.Partido()
                    party.numero = child_vote.attrib.get("numero")
                    party.nome = child_vote.attrib.get(
                        "search_political_party")
                    partido_existente = models.Partido.objects.filter(
                        numero=party.numero, nome=party.nome)

                    if len(partido_existente) > 0:
                        party = partido_existente[0]
                    else:
                        party.save()

                    parliamentarian = models.Parlamentar()
                    parliamentarian.nome = child_vote.attrib.get("nome")
                    parliamentarian.id_parlamentar = child_vote.attrib.get(
                        "id_parlamentar")
                    parliamentarian.genero = child_vote.attrib.get("genero")
                    existing_parliamentarian = models.Parlamentar.objects.filter(
                        nome=parliamentarian.nome,
                        id_parlamentar=parliamentarian.id_parlamentar,
                        genero=parliamentarian.genero)

                    if len(existing_parliamentarian) > 0:
                        parliamentarian = existing_parliamentarian[0]
                    else:
                        parliamentarian.save()

                    legislature = models.Legislatura()
                    legislature.partido = party
                    legislature.parlamentar = parliamentarian
                    legislature.casa_legislativa = legislativeHouse
                    legislature.inicio = child_vote.attrib.get("inicio")
                    legislature.fim = child_vote.attrib.get("fim")
                    legislature.localidade = child_vote.attrib.get(
                        "localidade")

                    if legislature.localidade is None:
                        legislature.localidade = ""
                    else:
                        legislature.localidade = "" + legislature.localidade
                    existing_legislature = models.Legislatura.objects.filter(
                        party=legislature.partido,
                        parliamentarian=legislature.parlamentar,
                        legislative_house=legislature.casa_legislativa,
                        init=legislature.inicio,
                        fim=legislature.fim)

                    if len(existing_legislature) > 0:
                        legislature = existing_legislature[0]
                    else:
                        legislature.save()

                    vote = models.Voto()
                    vote.votacao = voting
                    vote.legislatura = legislature
                    vote.opcao = child_vote.attrib.get("opcao")
                    vote.save()