PyAria
Introdução
Biblioteca Python para integração com o ecossistema ARIA (APIs corporativas, Persona, SEI, SIAFI etc.). Fornece:
Cliente genérico
Ariapara qualquer endpoint cadastradoSuporte a autenticação com token (cache e renovação)
Suporte a OTP (one-time password) em modos manual e interativos (console e janela Tkinter)
Paginação automática transparente (
auto_pagination=True)Wrappers especializados:
Persona,Sei,SiafieChatLogosConversão de modelos (SIAFI) entre snake_case e camelCase
Documentação gerada: https://cdn.tesouro.gov.br/doc/pyarialib/
Instalação
Via repositório Nexus privado:
pip install -i https://nexus.tesouro.gov.br/repository/pypi-private/simple pyarialib
Requer Python 3.6+ (recomenda-se 3.10+).
Atualizar / Publicar nova versão
Ajuste a versão em
setup.py(version="X.Y.Z").Commit / push para o branch que dispara o pipeline.
O CI/CD empacota e publica no Nexus.
Sugestão de versionamento: Semantic Versioning (MAJOR.MINOR.PATCH).
Uso Básico (Cliente Genérico)
Crie uma instância de Aria informando credenciais:
from pyarialib import Aria
aria = Aria("usuario", "senha")
resposta = aria.request(
method='get',
version=1,
project='corporativo',
endpoint='uf',
query_string_params={'sg_uf': 'DF'}
)
dados = resposta.json()
print(dados)
Enviar corpo (string) ou JSON:
resposta = aria.request(
'post', 1, 'corporativo', 'uf',
headers={'Content-Type': 'application/json'},
json_body={'campo1': 'valor1'}
)
Resposta:
resposta.json() # dict
resposta.text() # string (texto cru)
resposta.status_code # HTTP status
Paginação Automática
Se o endpoint seguir o padrão (page, pageSize, registros), ative:
resposta = aria.request('get', 1, 'sei', 'admin/modelosHtml', auto_pagination=True)
todos = resposta.json()['registros']
OTP (One-Time Password)
Modos disponíveis:
Modo |
Comportamento |
|---|---|
|
Envia type/value/flow_id (se fornecidos) em uma única chamada |
|
2 etapas: obtém |
|
Igual ao anterior, mas janela GUI (Tkinter). Fallback para console se indisponível |
from pyarialib import Aria, Otp
aria = Aria("user", "senha")
# Modo manual (já tenho código)
otp = Otp(type='webauthn2steps', value='123456')
res = aria.request('get', 1, 'projeto', 'endpoint', otp=otp)
# Modo interativo console
otp = Otp(type='webauthn2steps', mode='interactive-console')
res = aria.request('get', 1, 'projeto', 'endpoint', otp=otp)
# Modo interativo janela
otp = Otp(type='webauthn2steps', mode='interactive-window')
res = aria.request('get', 1, 'projeto', 'endpoint', otp=otp)
Em fluxos interativos: a primeira requisição devolve flowId; o usuário informa o código na segunda etapa.
Persona (Recursos de RH / Estrutura Organizacional)
from pyarialib import Aria
aria = Aria("user", "senha")
persona = aria.get_persona()
col = persona.get_colaborador(cpf=12345678900, inclui_funcoes=True)
print(col['nome'])
uorg = persona.get_uorg(sigla='COGEP', inclui_subuorgs=True)
print(uorg['sigla'])
Parâmetros booleanos adicionam seções opcionais (funções, dependentes, frequência etc.).
SEI (Modelos, Procedimentos, Documentos)
from pyarialib import Aria
aria = Aria("user", "senha")
sei = aria.get_sei()
modelos = sei.get_modelos_html(id_unidade_stn=1)
for m in modelos:
print(m['idModeloHtml'], m['nome'])
proc = sei.gerar_procedimento(id_tipo_procedimento=100000206)
codigo_proc = proc['codigoProcedimentoSei']
doc_html = sei.gravar_documento_html(
codigo_procedimento_sei=codigo_proc,
descricao="Documento Teste",
id_serie_sei=1247,
html="<p>Teste</p>"
)
print("Documento HTML criado:", doc_html)
Para anexar arquivo binário (ex.: PDF) use gravar_documento_arquivo.
SIAFI (Operações Financeiras / Tabelas)
O wrapper Siafi abstrai conversão de campos e OTP automático em operações mutáveis.
from pyarialib import Aria
from pyarialib import Siafi # também acessível via aria.get_siafi() se exposto
from pyarialib.siafi import TabAlterarChavesPixRequestModel, Otp
aria = Aria("user", "senha")
siafi = Siafi(aria, ug="160001", env="siafi2025")
resp = siafi.consultar_ug(codigo_ug="160001")
print(resp)
payload = TabAlterarChavesPixRequestModel(
credor="12345678901",
chaves_pix=["chave@dominio"]
)
resultado = siafi.alterar_chaves_pix(payload, otp=Otp(type='webauthn2steps', mode='interactive-console'))
print(resultado)
Em métodos POST/PUT/DELETE o OTP default (webauthn2steps, janela) é aplicado se não for informado.
Tratamento de Erros
Erros HTTP retornam
AriaResponse.status_code(cliente genérico) ou geramValueErrorem wrappers (Siafi,Sei).Em OTP interativo, cancelar a janela/entrada aborta antes da segunda chamada (sem código definido).
Exemplo simples:
try:
resposta = aria.request('get', 1, 'corporativo', 'uf', query_string_params={'sg_uf': 'XX'})
dados = resposta.json()
except Exception as e:
print("Falha:", e)
Boas Práticas
Reutilize a mesma instância
Ariapara aproveitar cache de token.Use
auto_pagination=Trueapenas quando realmente precisar de todos os registros.Prefira
json_bodyem vez debodypara conteúdo JSON (defineContent-Typeautomaticamente).Em ambientes sem interface gráfica use
interactive-console.
Roadmap (Sugestões)
Expor método helper
aria.get_siafi()(se ainda não disponível publicamente)Tipagem de retorno unificada em
AriaResponseLogging estruturado (opcional)
Retries configuráveis para erros transitórios
Contribuindo
Crie branch de feature (
feat/nome)Adicione testes (quando aplicável)
Atualize README / docs Sphinx se necessário
Abra Pull Request
Licença
MIT (ver setup.py).
Referência Rápida
Objeto |
Propósito |
|---|---|
|
Cliente genérico de requisições |
|
Suporte a modos manual e interativos de OTP |
|
Dados de colaboradores e UORGs |
|
Modelos, procedimentos e documentos SEI |
|
Operações e tabelas SIAFI (financeiro) |
|
Integração conversacional (detalhes no código) |
Em caso de dúvidas consulte a documentação completa ou abra uma issue.