CLI tipada (typer + Pydantic 2 + httpx Digest) para câmeras Hikvision via ISAPI.
Status: esqueleto em desenvolvimento. A superfície tipada da CLI (
snapshot,events,ptz,zoom) e a construção de paths ISAPI já estão testadas comtyper.testing— cobertura 98%, sem câmera. Execução real (httpx com Digest auth) e publicação no PyPI chegam nas próximas etapas.
uv sync --all-extras
uv run isapi snapshot --host 10.0.0.9 --channel 1
# → GET https://10.0.0.9/ISAPI/Streaming/channels/101/pictureComandos: snapshot · events · ptz --preset N · zoom — todos --host + --channel.
flowchart LR
U[usuário] --> CLI[typer app<br/>tipado, testado]
CLI --> EP[endpoints ISAPI<br/>paths puros]
CLI --> C[cliente httpx Digest]
C -- ISAPI --> CAM[(Câmera Hikvision)]
A construção de paths (endpoints.py) é pura — separada do transporte, testável
100% sem câmera. O cliente httpx com Digest auth entra por cima, sem tocar nessa lógica.
| Camada | Ferramenta | Status |
|---|---|---|
| Estilo & tipos | ruff + mypy --strict |
✅ em CI |
| Unit + CLI + cobertura | pytest + typer.testing (≥ 80%) |
✅ 98% |
| Execução real | httpx Digest + respx mock |
planejado |
| Publicação | pipx install isapi-cli (PyPI) |
planejado |
- CLI tipada + endpoints ISAPI puros, testados (ruff/mypy/cov 98%)
- Cliente httpx com Digest auth +
respxmock server nos testes - Tratamento de erro humano (paths v1/v2, timeouts)
- Publicação no PyPI + asciinema no README
Python 3.12 · typer · Pydantic 2 · httpx (Digest) · pytest · ruff · mypy
MIT — ver LICENSE.