Código-fonte para DadosAbertosBrasil.camara._eventos

from datetime import date
from typing import Optional

from pydantic import validate_call, PositiveInt

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


[documentos] class Evento(Base): """Retorna um conjunto detalhado de informações sobre o evento da Câmara. Parameters ---------- cod : int Código numérico do evento do 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 : int Código numérico do evento. andar : str Andar do prédio onde ocorreu o evento. descricao : str Descrição do evento. descricao_tipo : str Tipo do evento. fases : str Fases do evento. fim : str Data e horário que o evento foi finalizado no formato `'AAAA-MM-DD'`. inicio : str Data e horário que o evento foi iniciado no formato `'AAAA-MM-DD'`. local : str Local onde ocorreu o evento. local_externo : str Local externo do evento. lista_orgaos : list of dict Lista de orgãos e informações sobre os mesmos. predio : str Prédio que ocorreu o evento. requerimentos : list of dict Requerimentos do evento. sala : str Sala do prédio onde ocorreu o evento. situacao : str Situação do evento. uri : str Endereço para coleta de dados direta pela API do evento. uri_convidados : str Endereço para coleta de dados direta pela API dos convidados. uri_deputados : str Endereço para coleta de dados direta pela API dos deputados. url_documento_pauta : str Endereço URL para visualizar a pauta do evento. url_registro : str Endereço URL onde o evento foi registrado. Methods ------- deputados() Os deputados participantes do evento. orgaos() Lista de órgãos organizadores do evento. pauta() Lista de proposições que foram ou deverão ser avaliadas. votacoes() Informações detalhadas de votações sobre o evento. Examples -------- Obter a URL para assistir ao evento #59265. >>> ev = camara.Evento(cod=59265) >>> ev.url_registro ... 'https://www.youtube.com/watch?v=8D2gjMrTnMA' """ def __init__(self, cod: int, verificar_certificado: bool = True): self.cod = cod self.verify = verificar_certificado atributos = { "andar": ["localCamara", "andar"], "descricao": ["descricao"], "descricao_tipo": ["descricaoTipo"], "fases": ["fases"], "fim": ["dataHoraFim"], "inicio": ["dataHoraInicio"], "local": ["localCamara", "nome"], "local_externo": ["localExterno"], "lista_orgaos": ["orgaos"], "predio": ["localCamara", "predio"], "requerimentos": ["requerimentos"], "sala": ["localCamara", "sala"], "situacao": ["situacao"], "uri": ["uri"], "uri_convidados": ["uriConvidados"], "uri_deputados": ["uriDeputados"], "url_documento_pauta": ["urlDocumentoPauta"], "url_registro": ["urlRegistro"], } super().__init__( endpoint="camara", path=["eventos", str(cod)], unpack_keys=["dados"], error_key="localCamara", atributos=atributos, verify=self.verify, ) def __repr__(self) -> str: return f"DadosAbertosBrasil.camara: Evento {self.descricao}" def __str__(self) -> str: return self.descricao
[documentos] def deputados( self, url: bool = True, index: bool = False, formato: Formato = "pandas", ) -> Output: """Os deputados participantes do evento. Retorna uma lista de dados resumidos sobre deputados participantes do evento. Se o evento já ocorreu, a lista identifica os deputados que efetivamente registraram presença no evento. Se o evento ainda não ocorreu, a lista mostra os deputados que devem participar do evento, por serem convidados ou por serem membros do(s) órgão(s) responsável pelo evento. 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] Os deputados participantes do evento. """ cols_to_rename = { "id": "codigo", "uri": "uri", "nome": "nome", "siglaPartido": "partido", "uriPartido": "partido_uri", "siglaUf": "uf", "idLegislatura": "legislatura", "urlFoto": "foto", "email": "email", } return Get( endpoint="camara", path=["eventos", str(self.cod), "deputados"], unpack_keys=["dados"], cols_to_rename=cols_to_rename, url_cols=["uri", "partido_uri", "foto", "email"], remover_url=not url, index=index, verify=self.verify, ).get(formato)
[documentos] def orgaos( self, url: bool = True, index: bool = False, formato: Formato = "pandas", ) -> Output: """Lista de órgãos organizadores do evento. Retorna uma lista em que cada item é um conjunto mínimo de dados sobre o(s) órgão(s) responsável(is) pelo evento. 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] Lista de órgãos organizadores do evento. """ cols_to_rename = { "id": "codigo", "uri": "uri", "nome": "nome", "siglaPartido": "partido", "uriPartido": "partido_uri", "siglaUf": "uf", "idLegislatura": "legislatura", "urlFoto": "foto", "email": "email", } return Get( endpoint="camara", path=["eventos", str(self.cod), "orgaos"], unpack_keys=["dados"], cols_to_rename=cols_to_rename, url_cols=["uri", "partido_uri", "foto", "email"], remover_url=not url, index=index, verify=self.verify, ).get(formato)
[documentos] def pauta( self, url: bool = True, index: bool = False, formato: Formato = "pandas", ) -> Output: """Lista de proposições que foram ou deverão ser avaliadas em um evento de caráter deliberativo. Se o evento for de caráter deliberativo (uma reunião ordinária, por exemplo) este serviço retorna a lista de proposições previstas para avaliação pelos parlamentares. Cada item identifica, se as informações estiverem disponíveis, a proposição avaliada, o regime de preferência para avaliação, o relator e seu parecer, o resultado da apreciação e a votação realizada. 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 `ordem` 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] Lista de proposições. """ cols_to_rename = { "ordem": "ordem", "topico": "topico", "regime": "regime", "codRegime": "regime_codigo", "titulo": "titulo", "proposicao_": "proposicao", "relator": "relator", "textoParecer": "parecer", "proposicaoRelacionada_": "proposicao_relacionada", "uriVotacao": "uri", "situacaoItem": "situacao", } return Get( endpoint="camara", path=["eventos", str(self.cod), "pauta"], unpack_keys=["dados"], cols_to_rename=cols_to_rename, url_cols=["uri"], remover_url=not url, index_col="ordem", index=index, verify=self.verify, ).get(formato)
[documentos] def votacoes( self, url: bool = True, index: bool = False, formato: Formato = "pandas", ) -> Output: """Informações detalhadas de votações sobre o evento. Retorna uma lista de dados básicos sobre votações que tenham sido realizadas no evento. Votações só ocorrem em eventos de caráter deliberativo. Dados complementares sobre cada votação listada podem ser obtidos no recurso. 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] Informações detalhadas de votações sobre o evento. """ cols_to_rename = { "id": "codigo", "uri": "uri", "data": "data", "dataHoraRegistro": "data_registro", "siglaOrgao": "orgao_sigla", "uriOrgao": "orgao_uri", "uriEvento": "evento_uri", "proposicaoObjeto": "proposicao", "uriProposicaoObjeto": "proposicao_uri", "descricao": "descricao", "aprovacao": "aprovacao", } return Get( endpoint="camara", path=["eventos", str(self.cod), "votacoes"], 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=self.verify, ).get(formato)
[documentos] @validate_call def lista_eventos( tipo_evento: Optional[PositiveInt] = None, situacao: Optional[PositiveInt] = None, tipo_orgao: Optional[PositiveInt] = None, orgao: Optional[PositiveInt] = None, inicio: date = None, fim: date = None, hora_inicio: Optional[str] = None, hora_fim: Optional[str] = None, pagina: PositiveInt = 1, itens: Optional[PositiveInt] = None, asc: bool = True, ordenar_por: str = "dataHoraInicio", url: bool = True, index: bool = False, formato: Formato = "pandas", verificar_certificado: bool = True, ) -> Output: """Lista de eventos ocorridos ou previstos nos diversos órgãos da Câmara. Retorna uma lista cujos elementos trazem informações básicas sobre eventos dos órgãos legislativos da Câmara, previstos ou já ocorridos, em um certo intervalo de tempo. Esse intervalo pode ser configurado pelos parâmetros de data e hora listados abaixo. Se nenhum for passado, são listados eventos dos cinco dias anteriores, dos cinco dias seguintes e do próprio dia em que é feita a requisição. Parameters ---------- tipo_evento : int, optional Identificador numérico do tipo de evento que se deseja obter. Os valores válidos podem ser obtidos pela função `camara.referencias('tiposEvento')`. situacao : int, optional Identificador numéricos do tipo de situação de evento. Valores válidos podem ser obtidos pela função `camara.referencias('situacoesEvento')`. tipo_orgao : int, optional Identificador numérico do tipo de órgão realizador dos eventos que se deseja obter. Os valores válidos podem ser obtidos pela função `camara.referencias('tiposOrgao'). orgao : int, optional Identificador numérico do órgão. Os identificadores podem ser obtidos pela função `camara.lista_orgaos`. inicio : str, optional Data de início de um intervalo de tempo, no formato `'AAAA-MM-DD'`. fim : str, optional Data de término de um intervalo de tempo, no formato `'AAAA-MM-DD'`. hora_inicio : str, optional Hora inicial de um intervalo de tempo, no formato 'HH:MM', em horário de Brasília. hora_fim : str, optional Hora final de um intervalo de tempo, no formato 'HH:MM', em horário de Brasília. 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=True 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='dataHoraInicio' 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 eventos ocorridos ou previstos nos diversos órgãos da Câmara. """ params = { "pagina": pagina, "ordem": "asc" if asc else "desc", "ordenarPor": ordenar_por, } if tipo_evento is not None: params["codTipoEvento"] = tipo_evento if situacao is not None: params["codSituacao"] = situacao if tipo_orgao is not None: params["codTipoOrgao"] = tipo_orgao 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 hora_inicio is not None: params["horaInicio"] = hora_inicio if hora_fim is not None: params["horaFim"] = hora_fim if itens is not None: params["itens"] = itens cols_to_rename = { "id": "codigo", "uri": "uri", "dataHoraInicio": "data_inicio", "dataHoraFim": "data_fim", "situacao": "situacao", "descricaoTipo": "descricao_tipo", "descricao": "descricao", "orgaos": "orgaos", "urlRegistro": "registro", "localExterno": "local_externo", "localCamara.nome": "local_nome", "localCamara.predio": "local_predio", "localCamara.sala": "local_sala", "localCamara.andar": "local_andar", } data = Get( endpoint="camara", path=["eventos"], params=params, unpack_keys=["dados"], cols_to_rename=cols_to_rename, cols_to_date=["data_inicio", "data_fim"], url_cols=["uri"], remover_url=not url, index=index, verify=verificar_certificado, ).get(formato) if formato == "dataframe": def get_orgaos(orgaos): cod = [orgao["id"] for orgao in orgaos] if len(cod) < 2: return cod[0] return cod data["orgaos"] = data["orgaos"].apply(get_orgaos) return data