from typing import Literal, Optional
from pydantic import validate_call
from ..utils import Get, parse, Formato, Output
[documentos]
@validate_call
def lista_legislatura(
inicio: int,
fim: int = None,
exercicio: Optional[str] = None,
participacao: Optional[Literal["titulares", "suplentes"]] = None,
uf: Optional[str] = None,
sexo: Optional[Literal["f", "m"]] = None,
partido: Optional[str] = None,
contendo: Optional[str] = None,
excluindo: Optional[str] = None,
url: bool = True,
index: bool = False,
formato: Formato = "pandas",
verificar_certificado: bool = True,
) -> Output:
"""Lista senadores de uma legislatura ou de um intervalo de legislaturas.
Parameters
----------
inicio : int
Código da primeira legislatura da consulta.
fim : int, optional
Código da última legislatura da consulta.
Se fim=None, pesquisa apenas pela legislatura do campo `inicio`.
Caso contrário, pesquisa todas os valores de todas as legislaturas
entre `inicio` e `fim`.
exercicio : str, optional
- True: Consulta apenas os senadores que entraram em exercício.
- False: Consulta apenas os senadores que não entratam em exercício.
participacao : {"titulares", "suplentes"}, optional
- None: Busca qualquer tipo de participação.
- "titulares": Busca apenas titulares.
- "suplentes": Busca apenas suplentes.
uf : str, optional
Filtra uma unidade federativa.
Se uf=None, lista senadores de todas as UFs.
sexo : {"f", "m"}, optional
Filtro de sexo dos senadores.
partido : str, optional
Filtro de partido dos senadores.
contendo : str, optional
Captura apenas senadores contendo esse texto no nome.
excluindo : str, optional
Exclui da consulta senadores contendo esse texto no nome.
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 senadores de uma legislatura ou de um intervalo de legislaturas.
Raises
------
DAB_UFError
Caso seja inserida uma UF inválida no argumento `uf`.
See Also
--------
DadosAbertosBrasil.senado.Senador
Use o `codigo` para obter um detalhamento do senador.
DadosAbertosBrasil.senado.lista_senadores
Função de busca de senadores específica para a legislação atual.
Examples
--------
Lista senadores titulares em exercício na legislatura 56.
>>> senado.lista_legislatura(
... inicio = 56,
... participacao = 'titulares',
... exercicio = True
... )
codigo nome_parlamentar nome_completo \
0 4981 Acir Gurgacz Acir Marcos Gurgacz
1 5982 Alessandro Vieira Alessandro Vieira
2 945 Alvaro Dias Alvaro Fernandes Dias
.. ... ... ...
Lista mulheres senadoras do PT na legislatura 55.
>>> senado.lista_legislatura(inicio=55, partido='PT', sexo='F')
codigo nome_parlamentar nome_completo sexo \
0 3713 Fátima Bezerra Maria de Fátima Bezerra Feminino
1 5006 Gleisi Hoffmann Gleisi Helena Hoffmann Feminino
2 5575 Marizete Marizete Lisboa Fernandes Pereira Feminino
3 5182 Regina Sousa Maria Regina Sousa Feminino
"""
path = ["senador", "lista", "legislatura", str(inicio)]
if fim is not None:
path.append(fim)
params = {}
if exercicio is not None:
params["exercicio"] = "S" if exercicio else "N"
if participacao is not None:
params["participacao"] = participacao[0].upper()
if uf is not None:
params["uf"] = parse.uf(uf)
keys = ["ListaParlamentarLegislatura", "Parlamentares", "Parlamentar"]
cols_to_rename = {
"IdentificacaoParlamentar.CodigoParlamentar": "codigo",
"IdentificacaoParlamentar.NomeParlamentar": "nome_parlamentar",
"IdentificacaoParlamentar.NomeCompletoParlamentar": "nome_completo",
"IdentificacaoParlamentar.SexoParlamentar": "sexo",
"IdentificacaoParlamentar.FormaTratamento": "forma_tratamento",
"IdentificacaoParlamentar.UrlFotoParlamentar": "foto",
"IdentificacaoParlamentar.UrlPaginaParlamentar": "pagina_parlamentar",
"IdentificacaoParlamentar.UrlPaginaParticular": "pagina_particular",
"IdentificacaoParlamentar.EmailParlamentar": "email",
"IdentificacaoParlamentar.SiglaPartidoParlamentar": "partido",
"Mandato.UfParlamentar": "uf",
"Mandato.Exercicios.Exercicio.DataInicio": "data_inicio",
"Mandato.Exercicios.Exercicio.DataFim": "data_fim",
"Mandato.Exercicios.Exercicio.DescricaoCausaAfastamento": "causa_afastamento",
}
data = Get(
endpoint="senado",
path=path,
params=params,
unpack_keys=keys,
cols_to_rename=cols_to_rename,
cols_to_int=["codigo"],
cols_to_date=["data_inicio", "data_fim"],
url_cols=["foto", "pagina_parlamentar", "pagina_particular", "email"],
remover_url=not url,
index=index,
verify=verificar_certificado,
).get(formato)
if formato == "pandas":
if sexo is not None:
SEXOS = {"f": "Feminino", "m": "Masculino"}
data = data[data["sexo"] == SEXOS[sexo]]
if partido is not None:
data = data[data["partido"] == partido.upper()]
if contendo is not None:
nome_parlamentar = data["nome_parlamentar"].str.contains(contendo)
nome_completo = data["nome_completo"].str.contains(contendo)
data = data[nome_parlamentar | nome_completo]
if excluindo is not None:
nome_parlamentar = ~data["nome_parlamentar"].str.contains(excluindo)
nome_completo = ~data["nome_completo"].str.contains(excluindo)
data = data[nome_parlamentar | nome_completo]
return data