Metadata-Version: 2.5
Name: pyhorus
Version: 0.2.0
Summary: Add your description here
Requires-Python: >=3.10
Requires-Dist: pydantic>=2.13.4
Requires-Dist: qrcode[pil]>=8.2
Requires-Dist: requests>=2.34.2
Description-Content-Type: text/markdown

# pyhorus

Wrapper Python para a API Horus de controle de acesso.

## Requisitos

- Python >= 3.13
- [uv](https://docs.astral.sh/uv/) para gerenciamento de dependências

## Instalação

```bash
uv sync
```

## Uso

```python
from horus.horus import HorusWrapper
from horus.models import Cadastro, Bloqueio

wrapper = HorusWrapper(
    base_url="https://exemplo.com/horus/api",
    username="usuario",
    password="senha",
)

token = wrapper.get_token()

# Listagens
wrapper.listar_controladora(token=token)
wrapper.listar_rota(token=token)
wrapper.listar_cartao_avulso(token=token)

# Histórico de log em um intervalo de datas
for data in wrapper.get_date_list("2026-01-01", "2026-01-31"):
    wrapper.listar_log_historico(token=token, data=data)

# Inserir um novo acesso
cadastro = Cadastro(
    nome="Fulano de Tal",
    codpes=123456,
    nrodoc=112233,
    tipodoc="RG",
    email="fulano@example.com",
    idrota=1,
    idhorario=1,
    validadeini="2026-01-01",
    validadefim="2026-12-31",
    gerarqrcode="S",
    observacao="",
)
wrapper.inserir_acesso(token=token, cadastro=cadastro)

# Bloquear um acesso existente
bloqueio = Bloqueio(
    codpes=123456,
    nrodoc=112233,
    tipodoc="RG",
    idrota=1,
    observacao="Acesso bloqueado",
)
wrapper.bloquear_acesso(token=token, bloqueio=bloqueio)
```

## Testes

Os testes usam `pytest` e `requests-mock` para simular as respostas da API, sem realizar chamadas de rede reais.

```bash
uv run pytest
```

Para gerar o relatório de cobertura:

```bash
uv run pytest --cov=horus --cov-report=term-missing
```

## Estrutura do projeto

```
horus/
  horus.py    # HorusWrapper: cliente HTTP para a API Horus
  models.py   # Modelos Pydantic (Cadastro, Bloqueio)
tests/
  conftest.py
  test_horus.py
```
