# SDK Python server-side — candidato interno

Este SDK cobre somente os 18 métodos de `public-consultations-v1` e ainda não foi publicado no PyPI. Os `TypedDict` refletem exemplos auditados, mas os resultados documentados continuam parciais.

Commit auditado: `b49957403d667e1870099ca7506039e7cac66736` (02/10/2026). Isso não comprova a revisão implantada nem a publicação deste candidato em uma instância. Requer Python 3.11+ e não tem dependências de runtime. Dentro de `sdk/python`, salve o exemplo como `exemplo.py` e execute `PYTHONPATH=src python3 exemplo.py`, com `SYSLED_URL` e `SYSLED_TOKEN` no ambiente. Não baixe um pacote homônimo do PyPI.

```python
from sysled_public import SysledClient

sysled = SysledClient()  # lê SYSLED_URL e SYSLED_TOKEN
page = sysled.products_list({"limit": 24, "offset": 0})
print(len(page["items"]), page.get("next_cursor"))
```

`SYSLED_URL` deve ser somente a origem fornecida pelo administrador (sem caminho, credenciais, query string ou fragmento); `SYSLED_TOKEN` deve ficar somente no servidor. O cliente exige HTTPS fora de loopback, bloqueia redirects, usa timeout de operações de socket de 10 segundos (não um limite total de duração), limita a resposta a 5 MB, valida o envelope e redige tokens dos erros. Não conserva exceções originais em `__cause__`/`__context__`. Não registre URLs completas. Um `transport` injetado precisa respeitar o timeout recebido.

O cliente não repete chamadas automaticamente. Um `SysledAPIError` expõe `status`, `code`, `request_id` e `retry_after_seconds`, quando presentes, sem guardar o corpo bruto.

Em `messages_list`, omita `before` na primeira chamada; nas seguintes, envie `next_cursor` sem modificá-lo. `total` conta o lote e `total_count` o histórico; `hasMore` indica continuação. Confirme a implantação da revisão acima antes de depender desses campos. `messages.get` permanece fora deste SDK/perfil.

Teste sem rede (a partir de `sdk/python`; todos os transportes são simulados):

```sh
PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=src python3 -m unittest discover -s tests -v
```
