Código-fonte para DadosAbertosBrasil.camara._votacoes

from datetime import date
from typing import Optional

from pydantic import validate_call, PositiveInt

from ..utils import Base, Get, parse, Formato, Output


[documentos] class Votacao(Base): """Informações detalhadas sobre uma votação da Câmara. Retorna um conjunto detalhado de dados sobre a votação, tais como as proposições que podem ter sido o objeto da votação e os efeitos de tramitação de outras proposições que eventualmente tenham sido cadastrados em consequência desta votação. Parameters ---------- cod : str Código alfa-numérico da votação da qual se deseja informações. verificar_certificado : bool, default=True Defina esse argumento como `False` em caso de falha na verificação do certificado SSL. Attributes ---------- dados : dict Conjunto completo de dados. cod : str Código alfa-numérico da votação. aprovacao : int Aprovação da votação. data : str Data da votação. data_regitro : str Data e horário de registro da votação. data_ultima_abertura : str Data e horário da última abertura da votação. descricao : str Descrição da votação. efeitos_registrados : list Lista de efeitos registrados. evento : int Código numérico do evento da votação. orgao : int Código numérico do órgão da votação. objetos_possiveis : list of dict Lista de objetos possíveis. proposicoes_afetadas : str Proposições afetadas. sigla_orgao : str Sigla do órgão. ultima_apresentacao_proposicao : dict Última apresentação da proposição. uri : str Endereço para coleta de dados direta pela API da votação. uri_evento : str Endereço para coleta de dados direta pela API do evento. uri_orgao : str Endereço para coleta de dados direta pela API do órgão. Examples -------- Obter a data da votação #2265603-43. >>> vot = camara.Votacao(cod='2265603-43') >>> vot.data ... '2020-12-22' """ def __init__(self, cod: str, verificar_certificado: bool = True): self.cod = cod self.verify = verificar_certificado atributos = { "aprovacao": ["aprovacao"], "data": ["data"], "data_regitro": ["dataHoraRegistro"], "data_ultima_abertura": ["dataHoraUltimaAberturaVotacao"], "descricao": ["descricao"], "efeitos_registrados": ["efeitosRegistrados"], "evento": ["idEvento"], "orgao": ["idOrgao"], "objetos_possiveis": ["objetosPossiveis"], "proposicoes_afetadas": ["proposicoesAfetadas"], "sigla_orgao": ["siglaOrgao"], "ultima_apresentacao_proposicao": ["ultimaApresentacaoProposicao"], "uri": ["uri"], "uri_evento": ["uriEvento"], "uri_orgao": ["uriOrgao"], } super().__init__( endpoint="camara", path=["votacoes", str(cod)], unpack_keys=["dados"], error_key="descricao", atributos=atributos, verify=self.verify, ) def __repr__(self) -> str: return f"DadosAbertosBrasil.camara: Votação {self.cod}" def __str__(self) -> str: return f"Votação {self.cod}"
[documentos] def orientacoes( self, url: bool = True, index: bool = False, formato: Formato = "pandas", ) -> Output: """O voto recomendado pelas lideranças aos seus deputados na votação. Em muitas votações, os líderes de partidos e blocos – as bancadas – fazem recomendações de voto para seus parlamentares. Essas orientações de uma votação também são feitas pelas lideranças de Governo, Minoria e as mais recentes Maioria e Oposição. Uma liderança também pode liberar a bancada para que cada deputado vote como quiser, ou entrar em obstrução, para que seus parlamentares não sejam contados para o quórum da votação. Se a votação teve orientações, este recurso retorna uma lista em que cada item contém os identificadores de um partido, bloco ou liderança, e o posicionamento ou voto que foi recomendado aos seus parlamentares. Até o momento, só estão disponíveis dados sobre orientações dadas em votações no Plenário. Parameters ---------- url : bool, default=False Se False, remove as colunas contendo URI, URL e e-mails. Esse argumento é ignorado se `formato` for igual a 'json'. index : bool, default=False Se True, define a coluna `codigo` como index do DataFrame. Esse argumento é ignorado se `formato` for igual a 'json'. formato : {"json", "pandas", "url"}, default="pandas" Formato do dado que será retornado: - "json": Dicionário com as chaves e valores originais da API; - "pandas": DataFrame formatado; - "url": Endereço da API que retorna o arquivo JSON. Returns ------- pandas.core.frame.DataFrame | str | dict | list[dict] O voto recomendado pelas lideranças aos seus deputados na votação. """ cols_to_rename = { "orientacaoVoto": "orientacao", "codTipoLideranca": "lideranca", "siglaPartidoBloco": "bloco", "codPartidoBloco": "bloco_codigo", "uriPartidoBloco": "bloco_uri", } return Get( endpoint="camara", path=["votacoes", str(self.cod), "orientacoes"], unpack_keys=["dados"], cols_to_rename=cols_to_rename, url_cols=["bloco_uri"], remover_url=not url, index_col="bloco_codigo", index=index, verify=self.verify, ).get(formato)
[documentos] def votos( self, url: bool = True, formato: Formato = "pandas", ) -> Output: """Como cada parlamentar votou em uma votação nominal e aberta. Se a votação da Câmara é nominal e não foi secreta, retorna uma lista em que cada item contém os identificadores básicos de um deputado e o voto ou posicionamento que ele registrou. O resultado é uma lista vazia se a votação foi uma votação simbólica, em que os votos individuais não são contabilizados. Mas há algumas votações simbólicas que também têm registros de "votos": nesses casos, normalmente se trata de parlamentares que pediram expressamente que seus posicionamentos fossem registrados. Não são listados parlamentares ausentes à votação. Parameters ---------- url : bool, default=False Se False, remove as colunas contendo URI, URL e e-mails. Esse argumento é ignorado se `formato` for igual a 'json'. formato : {"json", "pandas", "url"}, default="pandas" Formato do dado que será retornado: - "json": Dicionário com as chaves e valores originais da API; - "pandas": DataFrame formatado; - "url": Endereço da API que retorna o arquivo JSON. Returns ------- pandas.core.frame.DataFrame | str | dict | list[dict] Como cada parlamentar votou em uma votação nominal e aberta. """ cols_to_rename = { "tipoVoto": "voto", "dataRegistroVoto": "data", "deputado_.id": "deputado_codigo", "deputado_.uri": "deputado_uri", "deputado_.nome": "deputado_nome", "deputado_.siglaPartido": "deputado_partido", "deputado_.uriPartido": "deputado_partido_uri", "deputado_.siglaUf": "deputado_uf", "deputado_.idLegislatura": "deputado_legislatura", "deputado_.urlFoto": "deputado_foto", "deputado_.email": "deputado_email", } return Get( endpoint="camara", path=["votacoes", str(self.cod), "votos"], unpack_keys=["dados"], cols_to_rename=cols_to_rename, cols_to_date=["data"], url_cols=[ "deputado_uri", "deputado_partido_uri", "deputado_foto", "deputado_email", ], remover_url=not url, verify=self.verify, ).get(formato)
[documentos] @validate_call def lista_votacoes( proposicao: Optional[int] = None, evento: Optional[int] = None, orgao: Optional[int] = None, inicio: Optional[date] = None, fim: Optional[date] = None, pagina: PositiveInt = 1, itens: Optional[PositiveInt] = None, asc: bool = False, ordenar_por: str = "dataHoraRegistro", url: bool = True, index: bool = False, formato: Formato = "pandas", verificar_certificado: bool = True, ) -> Output: """Lista de votações na Câmara. Retorna uma lista de informações básicas sobre as votações ocorridas em eventos dos diversos órgãos da Câmara. Se não forem passados parâmetros que delimitem o intervalo de tempo da pesquisa, são retornados dados sobre todas as votações ocorridas nos últimos 30 dias, em eventos de todos os órgãos. Os parâmetros de data permitem estender o período, mas por enquanto é necessário que as duas datas sejam de um mesmo ano. Quando apenas uma delas está presente, são retornadas somente as votações ocorridas no mesmo ano, antes de `fim` ou após `inicio`. Parameters ---------- proposicao : int, optional Código numérico da proposição, que podem ser obtidos pela função `camara.lista_proposições`. Se presente, listará as votações que tiveram a proposição como objeto de votação ou que afetaram as proposições listadas. evento : int, optional Código numérico do evento realizado na Câmara, no qual tenham sido realizadas as votações a serem listadas. Os códigos podem ser obtidos pela função `camara.lista_eventos`. Somente os eventos deliberativos podem ter votações. Os eventos podem ter ocorrido fora do intervalo de tempo padrão ou definido por `inicio` e/ou `fim`. orgao : int, optional Código numérico do órgão da Câmara. Se presente, serão retornadas somente votações do órgão enumerado. Os códigos existentes podem ser obtidos pela função `camara.lista_orgaos`. inicio : str, optional Data em formato `'AAAA-MM-DD'` para início do intervalo de tempo no qual tenham sido realizadas as votações a serem listadas. Se usado sozinho, esse parâmetro faz com que sejam retornadas votações ocorridas dessa data até o fim do mesmo ano. Se usado com `fim`, as duas datas devem ser de um mesmo ano. fim : str, optional Data em formato `'AAAA-MM-DD'` que define o fim do intervalo de tempo no qual tenham sido realizadas as votações a serem listadas. Se usado sozinho, esse parâmetro faz com que sejam retornadas todas as votações ocorridas desde 1º de janeiro do mesmo ano até esta data. Se usado com `inicio`, é preciso que as duas datas sejam de um mesmo ano. pagina : int, default=1 Número da página de resultados, a partir de 1, que se deseja obter com a requisição, contendo o número de itens definido pelo parâmetro `itens`. Se omitido, assume o valor 1. itens : int, optional Número máximo de itens na página que se deseja obter com esta requisição. asc : bool, default=False Se os registros são ordenados no sentido ascendente: - True: De A a Z ou 0 a 9 (ascendente); - False: De Z a A ou 9 a 0 (descendente). ordenar_por : str, default='dataHoraRegistro' Qual dos elementos da representação deverá ser usado para aplicar ordenação à lista. url : bool, default=False Se False, remove as colunas contendo URI, URL e e-mails. Esse argumento é ignorado se `formato` for igual a 'json'. index : bool, default=False Se True, define a coluna `codigo` como index do DataFrame. Esse argumento é ignorado se `formato` for igual a 'json'. formato : {"json", "pandas", "url"}, default="pandas" Formato do dado que será retornado: - "json": Dicionário com as chaves e valores originais da API; - "pandas": DataFrame formatado; - "url": Endereço da API que retorna o arquivo JSON. verificar_certificado : bool, default=True Defina esse argumento como `False` em caso de falha na verificação do certificado SSL. Returns ------- pandas.core.frame.DataFrame | str | dict | list[dict] Lista de votações na Câmara. """ params = { "pagina": pagina, "ordem": "asc" if asc else "desc", "ordenarPor": ordenar_por, } if proposicao is not None: params["idProposicao"] = proposicao if evento is not None: params["idEvento"] = evento if orgao is not None: params["idOrgao"] = orgao if inicio is not None: params["dataInicio"] = parse.data(inicio, "camara") if fim is not None: params["dataFim"] = parse.data(fim, "camara") if itens is not None: params["itens"] = itens cols_to_rename = { "id": "codigo", "uri": "uri", "data": "data", "dataHoraRegistro": "data_registro", "siglaOrgao": "orgao", "uriOrgao": "orgao_uri", "uriEvento": "evento_uri", "proposicaoObjeto": "proposicao", "uriProposicaoObjeto": "proposicao_uri", "descricao": "descricao", "aprovacao": "aprovacao", } return Get( endpoint="camara", path=["votacoes"], params=params, unpack_keys=["dados"], cols_to_rename=cols_to_rename, cols_to_date=["data", "data_registro"], url_cols=["uri", "orgao_uri", "evento_uri", "proposicao_uri"], remover_url=not url, index=index, verify=verificar_certificado, ).get(formato)