def obter_votacao(tipo, num, ano): """Get votings ande details of a propositions. Arguments: tipo, num, ano -- strings that caracterize a proposition Retorns: A propostions as an object class model.Proposicao. If the proposition doesn't be found or doesn't have votings, returns None.""" url = OBTER_VOTACOES_PROPOSICAO % (tipo, num, ano) try: request = urllib2.Request(url) xml = urllib2.urlopen(request).read() except urllib2.URLError: return None try: prop = Proposicao.fromxml(xml) except: return None if not isinstance(prop, Proposicao): return None # Here is the xml with more details about the proposition: xml = obter_proposicao(tipo, num, ano) tree = etree.fromstring(xml) prop.id = tree.find_legislature('idProposicao').text prop.ementa = tree.find_legislature('Ementa').text prop.explicacao = tree.find_legislature('ExplicacaoEmenta').text prop.situacao = tree.find_legislature('Situacao').text return prop
def obter_nomeProp_porid(idProp): """Obtém nome da proposição dado o id. Por exemplo: obter_nomeProp_porid(513512) retorna o string "MPV 540/2011" Argumentos: idprop -- inteiro usado como identificador único de uma proposição no webservice Retorna: Uma string com tipo, número e ano da proposição, por exemplo "MPV 540/2011". Caso a proposição não seja encontrada, retorna None. Obs: Mesmo que a proposição seja encontrada, poderá ainda assim não possuir votações. """ url = OBTER_INFOS_PORID % (idProp) try: request = urllib2.Request(url) xml = urllib2.urlopen(request).read() except urllib2.URLError: return None try: nomeProp = Proposicao.fromxmlid(xml) except: return None return nomeProp
def obter_votacao(tipo, num, ano): """Obtém votacões e detalhes de uma proposicão Argumentos: tipo, num, ano -- strings que caracterizam a proposicão Retorna: Uma proposicão como um objeto da classe model.Proposicao Caso a proposição não seja encontrada ou não possua votações, retorna None """ url = OBTER_VOTACOES_PROPOSICAO % (tipo, num, ano) try: request = urllib2.Request(url) xml = urllib2.urlopen(request).read() except urllib2.URLError: return None try: prop = Proposicao.fromxml(xml) except: return None if not isinstance(prop, Proposicao): return None xml = obter_proposicao(tipo, num, ano) #aqui é o xml com mais detalhes sobre a proposição tree = etree.fromstring(xml) prop.id = tree.find('idProposicao').text prop.ementa = tree.find('Ementa').text prop.explicacao = tree.find('ExplicacaoEmenta').text prop.situacao = tree.find('Situacao').text return prop
def obter_votacao(prop_id, tipo, num, ano): url = OBTER_VOTACAO_PROPOSICAO % (tipo, num, ano) try: xml = urllib.request.urlopen(url).read() except urllib.error.HTTPError: return None xml = str(xml, "utf-8") # aqui é o xml da votação prop = Proposicao.fromxml(xml) prop.id = prop_id xml = obter_proposicao(prop_id) # aqui é o xml com mais detalhes sobre a proposição xml = str(xml, "utf-8") tree = etree.parse(io.StringIO(xml)) prop.ementa = tree.find('Ementa').text prop.explicacao = tree.find('ExplicacaoEmenta').text prop.situacao = tree.find('Situacao').text return prop
def obter_nomeProp_porid(idProp): """Giving the id, gets the name of proposition. For exemple: obter_nomeProp_porid(513512) retorns the string "MPV 540/2011" Arguments: idprop -- integer used as unique identificator of a proposition in webservice. Returns: A string with type, number and year of proposition, for exemple "MPV 540/2011". If the proposition doesn't be found, returns None.""" url = OBTER_INFOS_PORID % (idProp) try: request = urllib2.Request(url) xml = urllib2.urlopen(request).read() except urllib2.URLError: return None try: nomeProp = Proposicao.fromxmlid(xml) except: return None return nomeProp
def test_semelhanca_partidos(self): '''Testa a função de semelhança para partidos''' partido1 = 'girondinos' partido2 = 'jacobinos' votacoes = [] # votações do test # v1: p1(3,0,0) p2(0,3,0) # v2: p1(0,2,1) p2(2,0,1) # v3: p1(3,0,0) p2(0,2,1) dep1Sim = Deputado() dep1Sim.partido = partido1 dep1Sim.voto = model.SIM dep1Nao = Deputado() dep1Nao.partido = partido1 dep1Nao.voto = model.NAO dep1Abs = Deputado() dep1Abs.partido = partido1 dep1Abs.voto = model.ABSTENCAO dep2Sim = Deputado() dep2Sim.partido = partido2 dep2Sim.voto = model.SIM dep2Nao = Deputado() dep2Nao.partido = partido2 dep2Nao.voto = model.NAO dep2Abs = Deputado() dep2Abs.partido = partido2 dep2Abs.voto = model.ABSTENCAO # votação 1 vot = Votacao() vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Nao) votacoes.append(vot) # votação 2 vot = Votacao() vot.deputados.append(dep1Nao) vot.deputados.append(dep1Nao) vot.deputados.append(dep1Abs) vot.deputados.append(dep2Sim) vot.deputados.append(dep2Sim) vot.deputados.append(dep2Abs) votacoes.append(vot) # votação 3 vot = Votacao() vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Abs) votacoes.append(vot) proposicao = Proposicao() proposicao.votacoes = votacoes proposicoes = [proposicao] # invocando a função testada s = partidos.semelhanca(partido1, partido2, proposicoes) # testando se tá certo expected = 0.008766487 # calculado na mão self.assertAlmostEqual(expected, s, 5)
def test_vetor_votacoes(self): '''testa a geração de um vetor de votações''' # votações testadas (s,n,a): #(9,0,0) #(0,8,1) #(7,1,1) #(3,3,3) partido = 'arena' votacoes = [] depSim = Deputado() depSim.partido = partido depSim.voto = model.SIM depNao = Deputado() depNao.partido = partido depNao.voto = model.NAO depAbs = Deputado() depAbs.partido = partido depAbs.voto = model.ABSTENCAO # 1a votação vot = Votacao() for i in range(0, 9): vot.deputados.append(depSim) votacoes.append(vot) # 2a votação vot = Votacao() for i in range(0, 8): vot.deputados.append(depNao) vot.deputados.append(depAbs) votacoes.append(vot) # 3a votação vot = Votacao() for i in range(0, 7): vot.deputados.append(depSim) vot.deputados.append(depNao) vot.deputados.append(depAbs) votacoes.append(vot) # 4a votação vot = Votacao() for i in range(0, 3): vot.deputados.append(depSim) for i in range(0, 3): vot.deputados.append(depNao) for i in range(0, 3): vot.deputados.append(depAbs) votacoes.append(vot) proposicao = Proposicao() proposicao.votacoes = votacoes proposicoes = [proposicao] # invocando a função testada vetor = partidos.vetor_votacoes(partido, proposicoes) # testando se tá certo expected = [1, -0.88889, 0.66667, 0] self.assertEqual(len(expected), len(vetor)) for e, v in zip(expected, vetor): self.assertAlmostEqual(e, v, 5)
def test_semelhanca_partidos(self): """ Tests the function of similarity for political partidos.""" party1 = 'girondinos' party2 = 'jacobinos' votings = [] # Votations of the test: # v1: p1(3,0,0) p2(0,3,0) # v2: p1(0,2,1) p2(2,0,1) # v3: p1(3,0,0) p2(0,2,1) dep1Sim = Deputado() dep1Sim.partido = party1 dep1Sim.voto = model.SIM dep1Nao = Deputado() dep1Nao.partido = party1 dep1Nao.voto = model.NAO dep1Abs = Deputado() dep1Abs.partido = party1 dep1Abs.voto = model.ABSTENCAO dep2Sim = Deputado() dep2Sim.partido = party2 dep2Sim.voto = model.SIM dep2Nao = Deputado() dep2Nao.partido = party2 dep2Nao.voto = model.NAO dep2Abs = Deputado() dep2Abs.partido = party2 dep2Abs.voto = model.ABSTENCAO # First grade: vot = Votacao() vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Nao) votings.append(vot) # Second grade: vot = Votacao() vot.deputados.append(dep1Nao) vot.deputados.append(dep1Nao) vot.deputados.append(dep1Abs) vot.deputados.append(dep2Sim) vot.deputados.append(dep2Sim) vot.deputados.append(dep2Abs) votings.append(vot) # Third grade: vot = Votacao() vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Abs) votings.append(vot) proposition = Proposicao() proposition.votacoes = votings propositions = [proposition] # Tested by invoking the function: s = partidos.similarity(party1, party2, propositions) # If testing is right; # Calculating on hand: expected = 0.008766487 self.assertAlmostEqual(expected, s, 5)
def test_vetor_votacoes(self): """Tests the generation of an array of polls.""" # Tested polls (s,n,a): # (9,0,0) # (0,8,1) # (7,1,1) # (3,3,3) party = 'arena' votings = [] deputy_vote_yes = Deputado() deputy_vote_yes.partido = party deputy_vote_yes.voto = model.SIM deputy_vote_no = Deputado() deputy_vote_no.partido = party deputy_vote_no.voto = model.NAO depute_vote_abstention = Deputado() depute_vote_abstention.partido = party depute_vote_abstention.voto = model.ABSTENCAO # First grade: vote = Votacao() for i in range(0, 9): vote.deputados.append(deputy_vote_yes) votings.append(vote) # Second grade:: vote = Votacao() for i in range(0, 8): vote.deputados.append(deputy_vote_no) vote.deputados.append(depute_vote_abstention) votings.append(vote) # Third grade: vote = Votacao() for i in range(0, 7): vote.deputados.append(deputy_vote_yes) vote.deputados.append(deputy_vote_no) vote.deputados.append(depute_vote_abstention) votings.append(vote) # Fourth voting: vote = Votacao() for i in range(0, 3): vote.deputados.append(deputy_vote_yes) for i in range(0, 3): vote.deputados.append(deputy_vote_no) for i in range(0, 3): vote.deputados.append(depute_vote_abstention) votings.append(vote) proposition = Proposicao() proposition.votacoes = votings propositions = [proposition] # Tested by invoking the function: vector = partidos.votings_vector(party, propositions) # If testing is right: expected = [1, -0.88889, 0.66667, 0] self.assertEqual(len(expected), len(vector)) for e, v in zip(expected, vector): self.assertAlmostEqual(e, v, 5)
def test_vetor_votacoes(self): """Tests the generation of an array of polls.""" # Tested polls (s,n,a): # (9,0,0) # (0,8,1) # (7,1,1) # (3,3,3) party = 'arena' votings = [] deputy_vote_yes = Deputado() deputy_vote_yes.partido = party deputy_vote_yes.voto = model.SIM deputy_vote_no = Deputado() deputy_vote_no.partido = party deputy_vote_no.voto = model.NAO depute_vote_abstention = Deputado() depute_vote_abstention.partido = party depute_vote_abstention.voto = model.ABSTENCAO # First grade: vote = Votacao() for i in range(0,9): vote.deputados.append(deputy_vote_yes) votings.append(vote) # Second grade:: vote = Votacao() for i in range(0,8): vote.deputados.append(deputy_vote_no) vote.deputados.append(depute_vote_abstention) votings.append(vote) # Third grade: vote = Votacao() for i in range(0,7): vote.deputados.append(deputy_vote_yes) vote.deputados.append(deputy_vote_no) vote.deputados.append(depute_vote_abstention) votings.append(vote) # Fourth voting: vote = Votacao() for i in range(0,3): vote.deputados.append(deputy_vote_yes) for i in range(0,3): vote.deputados.append(deputy_vote_no) for i in range(0,3): vote.deputados.append(depute_vote_abstention) votings.append(vote) proposition = Proposicao() proposition.votacoes = votings propositions = [proposition] # Tested by invoking the function: vector = partidos.votings_vector(party, propositions) # If testing is right: expected = [1, -0.88889, 0.66667, 0] self.assertEqual(len(expected), len(vector)) for e, v in zip(expected, vector): self.assertAlmostEqual(e, v, 5)
def test_semelhanca_partidos(self): '''Testa a função de semelhança para partidos''' partido1 = 'girondinos' partido2 = 'jacobinos' votacoes = [] # votações do test # v1: p1(3,0,0) p2(0,3,0) # v2: p1(0,2,1) p2(2,0,1) # v3: p1(3,0,0) p2(0,2,1) dep1Sim = Deputado() dep1Sim.partido = partido1 dep1Sim.voto = model.SIM dep1Nao = Deputado() dep1Nao.partido = partido1 dep1Nao.voto = model.NAO dep1Abs = Deputado() dep1Abs.partido = partido1 dep1Abs.voto = model.ABSTENCAO dep2Sim = Deputado() dep2Sim.partido = partido2 dep2Sim.voto = model.SIM dep2Nao = Deputado() dep2Nao.partido = partido2 dep2Nao.voto = model.NAO dep2Abs = Deputado() dep2Abs.partido = partido2 dep2Abs.voto = model.ABSTENCAO # votação 1 vot = Votacao() vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Nao) votacoes.append(vot) # votação 2 vot = Votacao() vot.deputados.append(dep1Nao) vot.deputados.append(dep1Nao) vot.deputados.append(dep1Abs) vot.deputados.append(dep2Sim) vot.deputados.append(dep2Sim) vot.deputados.append(dep2Abs) votacoes.append(vot) # votação 3 vot = Votacao() vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep1Sim) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Nao) vot.deputados.append(dep2Abs) votacoes.append(vot) proposicao = Proposicao() proposicao.votacoes = votacoes proposicoes = [proposicao] # invocando a função testada s = partidos.semelhanca(partido1, partido2, proposicoes) # testando se tá certo expected = 0.2524905 # calculado na mão self.assertAlmostEqual(expected, s, 5)
def test_vetor_votacoes(self): '''testa a geração de um vetor de votações''' # votações testadas (s,n,a): #(9,0,0) #(0,8,1) #(7,1,1) #(3,3,3) partido = 'arena' votacoes = [] depSim = Deputado() depSim.partido = partido depSim.voto = model.SIM depNao = Deputado() depNao.partido = partido depNao.voto = model.NAO depAbs = Deputado() depAbs.partido = partido depAbs.voto = model.ABSTENCAO # 1a votação vot = Votacao() for i in range(0,9): vot.deputados.append(depSim) votacoes.append(vot) # 2a votação vot = Votacao() for i in range(0,8): vot.deputados.append(depNao) vot.deputados.append(depAbs) votacoes.append(vot) # 3a votação vot = Votacao() for i in range(0,7): vot.deputados.append(depSim) vot.deputados.append(depNao) vot.deputados.append(depAbs) votacoes.append(vot) # 4a votação vot = Votacao() for i in range(0,3): vot.deputados.append(depSim) for i in range(0,3): vot.deputados.append(depNao) for i in range(0,3): vot.deputados.append(depAbs) votacoes.append(vot) proposicao = Proposicao() proposicao.votacoes = votacoes proposicoes = [proposicao] # invocando a função testada vetor = partidos.vetor_votacoes(partido, proposicoes) # testando se tá certo expected = [1, 0.055555556, 0.833333333, 0.5] self.assertEqual(len(expected), len(vetor)) for e, v in zip(expected, vetor): self.assertAlmostEqual(e, v, 5)