Cliente async para integracao de projetos Django com a API do CADSUS-MS.
Project description
cadsus_client
Biblioteca Python para simplificar a interoperabilidade de projetos Django com a API do CADSUS do Ministerio da Saude.
O pacote publicado no PyPI se chama 3s-cadsus-client, enquanto o import no codigo Python e cadsus_client.
Destaques
- Cliente 100% assincrono com
httpx.AsyncClient - Cache de token com suporte automatico ao cache do Django quando disponivel
- Fallback para cache em memoria quando o Django nao estiver carregado
- Autenticacao por
APIouCERT - Metodo
buscar_pessoacom deteccao automatica de CPF ou CNS e retorno direto em JSON - Workflow de GitHub Actions pronto para build, teste e publicacao no PyPI
Instalacao
pip install 3s-cadsus-client
Configuracao por variaveis de ambiente
Metodo API
export CADSUS_AUTH_METHOD=API
export CADSUS_AUTH_LOGIN_URL=https://ses-token-api-linux.azurewebsites.net/login
export CADSUS_AUTH_TOKEN_URL=https://ses-token-api-linux.azurewebsites.net/token/osb
export CADSUS_API_URL=https://servicos.saude.gov.br/cadsus/v2/PDQSupplierJWT
export CADSUS_USER=user_cadsus
export CADSUS_PASSWORD=password_cadsus
Metodo CERT
export CADSUS_AUTH_METHOD=CERT
export CADSUS_AUTH_TOKEN_URL=https://ehr-auth.saude.gov.br/api/osb/token
export CADSUS_API_URL=https://servicos.saude.gov.br/cadsus/v2/PDQSupplierJWT
export CADSUS_CERT=/srv/app/cert.pem
export CADSUS_KEY=/srv/app/key.pem
Variaveis opcionais
export CADSUS_SYSTEM_CODE=CADSUS
export CADSUS_TIMEOUT=30
export CADSUS_CACHE_ALIAS=default
export CADSUS_CACHE_PREFIX=cadsus_client
export CADSUS_TOKEN_TTL_FALLBACK=300
Uso rapido
from cadsus_client import CadSUSClient
async def consultar_cadsus(identificador: str) -> dict | None:
async with CadSUSClient.from_env() as client:
return await client.buscar_pessoa(identificador)
Exemplo em projeto Django
from django.http import JsonResponse
from cadsus_client import CadSUSClient
async def buscar_pessoa_view(request):
identificador = request.GET["identificador"]
async with CadSUSClient.from_env() as client:
payload = await client.buscar_pessoa(identificador)
return JsonResponse({"dados": payload})
Cache de token
Quando o Django estiver disponivel e configurado, a biblioteca usa django.core.cache automaticamente. Caso contrario, usa um cache em memoria do processo.
O tempo de expiracao do token e resolvido na seguinte ordem:
- Campo
expires_inda resposta de autenticacao - Claim
expdo JWT retornado - Fallback configurado por
CADSUS_TOKEN_TTL_FALLBACK
Personalizacao avancada da autenticacao API
Como a especificacao recebida nao detalha o payload exato dos dois POSTs do metodo API, a biblioteca aplica o fluxo padrao abaixo:
POST CADSUS_AUTH_LOGIN_URLcom JSON{"username": "...", "password": "..."}POST CADSUS_AUTH_TOKEN_URLcom headerAuthorization: Bearer <token-do-login>
Se a sua instalacao exigir outro formato, voce pode customizar os requests:
from cadsus_client import CadSUSClient, RequestDefinition
def build_login_request(settings):
return RequestDefinition(
method="POST",
url=settings.auth_login_url,
data={"user": settings.user, "password": settings.password},
)
def build_token_request(settings, login_token):
return RequestDefinition(
method="POST",
url=settings.auth_token_url,
headers={"Authorization": f"Bearer {login_token}"},
json={"grant_type": "client_credentials"},
)
async def consultar(identificador: str):
async with CadSUSClient.from_env(
api_login_request_factory=build_login_request,
api_token_request_factory=build_token_request,
) as client:
return await client.buscar_pessoa(identificador)
Publicacao no PyPI
O workflow em .github/workflows/publish.yml roda testes em push e pull_request, gera os artefatos do pacote e publica no PyPI quando uma tag v* e enviada.
O fluxo foi montado para usar Trusted Publishing via OIDC. Antes da primeira release, cadastre o repositrio e o workflow no PyPI:
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file 3s_cadsus_client-0.1.2.tar.gz.
File metadata
- Download URL: 3s_cadsus_client-0.1.2.tar.gz
- Upload date:
- Size: 12.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c19189fc444ca4f35ce53e37b6c469fcff04e193c1dcb1c80a50b9089d748a0
|
|
| MD5 |
1605582f268104e18732c7887901104d
|
|
| BLAKE2b-256 |
de3b1fe46db333e962ff86d8d3be2f140d2b37afd4eec7f190d625a1ccdae517
|
Provenance
The following attestation bundles were made for 3s_cadsus_client-0.1.2.tar.gz:
Publisher:
publish.yml on 3S-Saude/3s-cadsus-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
3s_cadsus_client-0.1.2.tar.gz -
Subject digest:
9c19189fc444ca4f35ce53e37b6c469fcff04e193c1dcb1c80a50b9089d748a0 - Sigstore transparency entry: 1344449956
- Sigstore integration time:
-
Permalink:
3S-Saude/3s-cadsus-client@3f6afdc183b6d1d47552c29a2f70fcdb3ed6ffad -
Branch / Tag:
refs/heads/main - Owner: https://github.com/3S-Saude
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3f6afdc183b6d1d47552c29a2f70fcdb3ed6ffad -
Trigger Event:
pull_request
-
Statement type:
File details
Details for the file 3s_cadsus_client-0.1.2-py3-none-any.whl.
File metadata
- Download URL: 3s_cadsus_client-0.1.2-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e344c7beaf7180dc7dc70c222403544b5bed48a86a194dc084e1dccb1219775
|
|
| MD5 |
6fda3e7b47cc16de65f71f18134ddfb0
|
|
| BLAKE2b-256 |
9ac658ca543d047364dd4c0a675b20c61be2bfdfde7a4a012218ba0cc30668bc
|
Provenance
The following attestation bundles were made for 3s_cadsus_client-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on 3S-Saude/3s-cadsus-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
3s_cadsus_client-0.1.2-py3-none-any.whl -
Subject digest:
4e344c7beaf7180dc7dc70c222403544b5bed48a86a194dc084e1dccb1219775 - Sigstore transparency entry: 1344450083
- Sigstore integration time:
-
Permalink:
3S-Saude/3s-cadsus-client@3f6afdc183b6d1d47552c29a2f70fcdb3ed6ffad -
Branch / Tag:
refs/heads/main - Owner: https://github.com/3S-Saude
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3f6afdc183b6d1d47552c29a2f70fcdb3ed6ffad -
Trigger Event:
pull_request
-
Statement type: