Código fonte de legislei.houses.camara_municipal_sao_paulo

import json
import logging
from datetime import datetime
from time import time
from uuid import uuid4

import pytz
from flask import render_template, request

from legislei.exceptions import ModelError
from legislei.houses.casa_legislativa import CasaLegislativa
from legislei.models.relatorio import (Evento, Orgao, Parlamentar, Proposicao,
                                       Relatorio)
from legislei.SDKs.CamaraMunicipalSaoPaulo.base import CamaraMunicipal


[documentos]class CamaraMunicipalSaoPauloHandler(CasaLegislativa): def __init__(self): super().__init__() self.ver = CamaraMunicipal() self.relatorio = Relatorio() self.brasilia_tz = pytz.timezone('America/Sao_Paulo')
[documentos] 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))
[documentos] def obter_proposicoes_parlamentar(self, parlamentar_id, data_inicial, data_final): projetos = self.ver.obterProjetosParlamentar(parlamentar_id, data_final.year) projetos_ids = ['{}{}{}'.format(x['tipo'], x['numero'], x['ano']) for x in projetos] for projeto in self.ver.obterProjetosDetalhes(data_final.year): try: if '{}{}{}'.format(projeto['tipo'], projeto['numero'], projeto['ano']) in projetos_ids: projeto_data = datetime.strptime(projeto['data'], '%Y-%m-%dT%H:%M:%S') logging.debug(projeto_data) if not(projeto_data >= data_inicial and projeto_data <= data_final): continue proposicao = Proposicao() proposicao.data_apresentacao = self.brasilia_tz.localize(projeto_data) proposicao.ementa = projeto['ementa'] proposicao.id = projeto['chave'] proposicao.tipo = projeto['tipo'] proposicao.numero = '{}{}'.format(projeto['numero'], projeto['ano']) proposicao.url_documento = ( 'http://documentacao.saopaulo.sp.leg.br/cgi-bin/wxis.bin/iah/scripts/?IsisScript=iah.xis&lang=pt&format=detalhado.pft&base=proje&form=A&nextAction=search&indexSearch=^nTw^lTodos%20os%20campos&exprSearch=P={tipo}{numero}{ano}'.format( tipo=projeto['tipo'], numero=projeto['numero'], ano=projeto['ano'] ) ) proposicao.url_autores = proposicao.url_documento self.relatorio.proposicoes.append(proposicao) except Exception as e: #TODO logging.error(e)
[documentos] def obter_parlamentar(self, parlamentar_id): for item in self.ver.obterVereadores(): if str(item['chave']) == parlamentar_id: parlamentar = Parlamentar() parlamentar.cargo = 'SÃO PAULO' parlamentar.nome = item['nome'] parlamentar.id = str(item['chave']) for mandato in item['mandatos']: if mandato['fim'] > datetime.now(): parlamentar.partido = mandato['partido']['sigla'] parlamentar.uf = 'SP' parlamentar.foto = \ 'https://www.99luca11.com/Users/usuario_sem_foto.png' self.obter_cargos_parlamentar(item['cargos']) self.relatorio.parlamentar = parlamentar return parlamentar return None
[documentos] def obter_cargos_parlamentar(self, cargos): for cargo in cargos: if 'fim' in cargo and cargo['fim'] < datetime.now(): continue orgao = Orgao() orgao.nome = cargo['ente']['nome'].replace(u'Comissão - ', '') orgao.cargo = cargo['nome'] orgao.apelido = orgao.nome orgao.sigla = orgao.nome self.relatorio.orgaos.append(orgao)
[documentos] def obter_parlamentares(self): vereadores = self.ver.obterVereadores() lista = [] for v in vereadores: lista.append( Parlamentar( id=v['chave'], nome=v['nome'], partido=v['mandatos'][0]['partido']['sigla'], uf='SP', cargo='SÃO PAULO', foto='https://www.99luca11.com/Users/usuario_sem_foto.png' ) ) return lista