def obter_relatorio(self, parlamentar_id, data_final=datetime.now(), periodo_dias=7): try: start_time = time() self.relatorio = Relatorio() self.relatorio.aviso_dados = u'Dados de sessões plenárias não disponível.' self.set_period(periodo_dias) data_final = datetime.strptime(data_final, '%Y-%m-%d') data_inicial = self.obterDataInicial(data_final, **self.periodo) logging.info('[ALESP] Parlamentar: {}'.format(parlamentar_id)) logging.info('[ALESP] Data final: {}'.format(data_final)) logging.info('[ALESP] Intervalo: {}'.format(periodo_dias)) self.obter_parlamentar(parlamentar_id) if self.relatorio.parlamentar == None: logging.error("[ALESP] Deputado não encontrado") raise ModelError('Parlamentar não encontrado') self.relatorio.data_inicial = self.brasilia_tz.localize( data_inicial) self.relatorio.data_final = self.brasilia_tz.localize(data_final) logging.info( '[ALESP] Deputado obtido em {0:.5f}s'.format(time() - start_time)) comissoes = self.obterComissoesPorId() logging.info('[ALESP] Comissoes por id obtidas em {0:.5f}s'.format( time() - start_time)) votacoes = self.obterVotacoesPorReuniao(parlamentar_id) logging.info( '[ALESP] Votos do deputado obtidos em {0:.5f}s'.format( time() - start_time)) orgaos_nomes = self.obterComissoesDeputado(comissoes, parlamentar_id, data_inicial, data_final) logging.info( '[ALESP] Comissoes do deputado obtidas em {0:.5f}s'.format( time() - start_time)) self.obterEventosPresentes(parlamentar_id, data_inicial, data_final, votacoes, comissoes, orgaos_nomes) self.relatorio.eventos_ausentes_esperados_total = len( self.relatorio.eventos_previstos) logging.info( '[ALESP] Eventos obtidos em {0:.5f}s'.format(time() - start_time)) self.obterProposicoesDeputado(parlamentar_id, data_inicial, data_final) logging.info( '[ALESP] Proposicoes obtidas em {0:.5f}s'.format(time() - start_time)) logging.info( '[ALESP] Relatorio obtido em {0:.5f}s'.format(time() - start_time)) return self.relatorio except ALESPError as e: logging.error("[ALESP] {}".format(e)) raise ModelError('Erro')
def obter_parlamentares(self): try: parlamentares = [] for deputado in self.dep.obterTodosDeputados(): parlamentar = Parlamentar() parlamentar.cargo = 'SP' parlamentar.id = deputado['id'] parlamentar.nome = deputado['nome'] parlamentar.partido = deputado['siglaPartido'] parlamentar.uf = 'SP' parlamentar.foto = deputado[ 'urlFoto'] if 'urlFoto' in deputado else None parlamentares.append(parlamentar) return parlamentares except ALESPError as e: logging.error("[ALESP] {}".format(e)) raise ModelError("Erro da API da ALESP")
def obter_relatorio(self, parlamentar_id, data_final=None, periodo_dias=7): try: self.relatorio = Relatorio() self.relatorio.aviso_dados = u'Dados de votações em comissões não disponíveis.' start_time = time() if data_final: data_final = datetime.strptime(data_final, '%Y-%m-%d') else: data_final = datetime.now() logging.info('[BR1] Parlamentar: {}'.format(parlamentar_id)) logging.info('[BR1] Data final: {}'.format(data_final)) logging.info('[BR1] Intervalo: {}'.format(periodo_dias)) self.set_period(periodo_dias) assemblyman_info = self.obter_parlamentar(parlamentar_id) self.relatorio.data_inicial = self.helper.get_brt( self.obterDataInicial(data_final, **self.periodo)) self.relatorio.data_final = self.helper.get_brt(data_final) logging.info('[BR1] Deputado obtido em {0:.5f}s'.format(time() - start_time)) events = self.helper.get_all_events(data_final) events_attended = self.helper.get_attended_events(events, assemblyman_info['id']) logging.info('[BR1] Eventos obtidos em {0:.5f}s'.format(time() - start_time)) self.relatorio.orgaos = self.helper.get_commissions(assemblyman_info.id, data_final) logging.info('[BR1] Orgaos obtidos em {0:.5f}s'.format(time() - start_time)) self._add_attended_events(events_attended) logging.info('[BR1] Pautas obtidas em {0:.5f}s'.format(time() - start_time)) events_expected = self.helper.get_expected_events(self.relatorio.parlamentar.id, data_final) events_absent = self.helper.get_absent_events( events, events_attended, events_expected, self.relatorio.orgaos ) self._add_absent_events(events_absent) logging.info('[BR1] Ausencias obtidas em {0:.5f}s'.format(time() - start_time)) self.relatorio.proposicoes = self.helper.get_propositions(assemblyman_info, data_final) logging.info('[BR1] Proposicoes obtidas em {0:.5f}s'.format(time() - start_time)) logging.info('[BR1] Relatorio obtido em {0:.5f}s'.format(time() - start_time)) return self.relatorio except CamaraDeputadosError as event: logging.error("[BR1] {}".format(event)) raise ModelError("API Câmara dos Deputados indisponível")
def obter_parlamentar(self, parlamentar_id): """ Deve ser implementado pelas classes herdeiras """ raise ModelError("obter_parlamentar deve ser implementado")
def obter_relatorio(self, parlamentar_id, data_final, periodo_dias): """ Deve ser implementado pelas classes herdeiras """ raise ModelError("obter_relatorio deve ser implementado")
def obter_relatorio(self, parlamentar, *args, **kwargs): if parlamentar == '2': raise ModelError('msg') return {"nice": "JSON"}
def obter_relatorio(self, parlamentar_id, data_final=datetime.now(), periodo_dias=7): try: start_time = time() self.relatorio = Relatorio() self.relatorio.aviso_dados = u'Dados de sessões de comissões não disponível.' self.set_period(periodo_dias) data_final = datetime.strptime(data_final, '%Y-%m-%d') data_inicial = self.obterDataInicial(data_final, **self.periodo) logging.info('[SAO PAULO] Parlamentar: {}'.format(parlamentar_id)) logging.info('[SAO PAULO] Data final: {}'.format(data_final)) logging.info('[SAO PAULO] Intervalo: {}'.format(periodo_dias)) vereador = self.obter_parlamentar(parlamentar_id) logging.info( '[SAO PAULO] Vereador obtido em {0:.5f}s'.format(time() - start_time)) self.relatorio.data_inicial = self.brasilia_tz.localize( data_inicial) self.relatorio.data_final = self.brasilia_tz.localize(data_final) presenca = [] sessao_total = 0 presenca_total = 0 for dia in self.ver.obterPresenca(data_inicial, data_final): if dia: for v in dia['vereadores']: if str(v['chave']) == vereador.id: for s in v['sessoes']: if s['presenca'] == 'Presente': presenca.append(s['nome']) sessao_total += int(dia['totalOrd']) + int( dia['totalExtra']) presenca_total += sum([ int(v['presenteOrd']), int(v['presenteExtra']) ]) for key, value in dia['sessoes'].items(): evento = Evento() orgao = Orgao() orgao.nome = 'Plenário' orgao.apelido = 'PLENÁRIO' evento.orgaos.append(orgao) evento.nome = key evento.id = str(uuid4()) if value['data']: try: evento.data_inicial = self.brasilia_tz.localize( datetime.strptime(value['data'], "%d/%m/%Y")) evento.data_final = self.brasilia_tz.localize( datetime.strptime(value['data'], "%d/%m/%Y")) except ValueError: pass for prop in value['pautas']: proposicao = Proposicao() proposicao.pauta = prop['projeto'] proposicao.tipo = prop['pauta'] for v in prop['votos']: if str(v['chave']) == parlamentar_id: proposicao.voto = v['voto'] evento.pautas.append(proposicao) if key in presenca: evento.set_presente() self.relatorio.eventos_presentes.append(evento) else: evento.set_ausencia_evento_esperado() self.relatorio.eventos_ausentes.append(evento) logging.info( '[SAO PAULO] Eventos obtidos em {0:.5f}s'.format(time() - start_time)) self.relatorio.eventos_ausentes_esperados_total = sessao_total - presenca_total self.obter_proposicoes_parlamentar(vereador.id, data_inicial, data_final) logging.info('[SAO PAULO] Proposicoes obtidas em {0:.5f}s'.format( time() - start_time)) logging.info( '[SAO PAULO] Relatorio obtido em {0:.5f}s'.format(time() - start_time)) return self.relatorio except Exception as e: logging.error(e) raise ModelError(str(e))