Metadata-Version: 2.4
Name: tenant-rpa-sdk
Version: 1.0.0
Summary: SDK de logging resiliente para automacoes Python com fallback local
Author: Tech Ops AI - RPA Team
License-Expression: LicenseRef-Proprietary
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: psycopg[binary]<4.0,>=3.2
Provides-Extra: dev
Requires-Dist: pytest<10.0,>=8.0; extra == "dev"

# tenant-rpa-sdk

SDK Python para logging resiliente e modulos de execucao/infra para automacoes.

Versao de referencia desta documentacao: `1.0.0`.

## Instalacao via pip (1.0.0)
Canal oficial (PyPI):
```bash
pip install tenant-rpa-sdk==1.0.0
```

Canal alternativo (wheel da GitHub Release):
```bash
pip install "https://github.com/<org>/<repo>/releases/download/tenant-rpa-sdk-v1.0.0/tenant_rpa_sdk-1.0.0-py3-none-any.whl"
```

Doc dedicada de pip: `docs/pip.md`.

## Resumo executivo dos modulos

### 1) Logger
Modulo: `tenant_rpa_sdk.logger` (`TenantBackendLogger`)
O que faz: logging resiliente com dedupe por `idempotency_key` e fallback JSONL.
Instanciamento rapido: `logger = TenantBackendLogger(project_name="demo", source="automation.demo")`

### 2) DB connection
Modulo: `tenant_rpa_sdk.db` (`TenantDatabaseConnect`)
O que faz: conexao Postgres (`connect`, `connection`, `close`).
Instanciamento rapido: `db = TenantDatabaseConnect(load_sdk_config(env=env).db)`

### 3) Execution manager
Modulo: `tenant_rpa_sdk.execution` (`TenantExecutionManage`)
O que faz: ciclo de execucao (`QUEUED -> RUNNING -> terminal`) e heartbeat.
Instanciamento rapido: `exec_mgr = TenantExecutionManage(db_client=db)`

### 4) Execution context
Modulo: `tenant_rpa_sdk.execution` (`TenantExecutionContext`)
O que faz: contexto tipado da execucao (ids, host, container, external job).
Instanciamento rapido: `ctx = TenantExecutionContext(execution_id=1, project_id=1, schedule_id=None, hostname="host", container_id=None, external_job_id=None)`

### 5) Project query
Modulo: `tenant_rpa_sdk.projects` (`TenantProjectQuery`)
O que faz: consulta projeto por nome.
Instanciamento rapido: `project_q = TenantProjectQuery(db_client=db)`

### 6) Infra status sync
Modulo: `tenant_rpa_sdk.infrastructure` (`TenantInfraStatusSync`)
O que faz: lista alvos de infraestrutura e faz upsert de status/capacidade.
Instanciamento rapido: `infra = TenantInfraStatusSync(db_client=db)`

### 7) Slack notify
Modulo: `tenant_rpa_sdk.notify` (`TenantSlackNotify`)
O que faz: envia alerta Slack em texto e bloco.
Instanciamento rapido: `slack = TenantSlackNotify(channel_id="C123", token="xoxb-***")`

### 8) DB utils (interno-chave)
Modulo: `tenant_rpa_sdk.db_utils`
O que faz: helpers de query (`execute`, `fetch_one`, `fetch_all`) e operacoes de dominio DB.
Instanciamento rapido: `rows = fetch_all(db, "SELECT 1 AS ok", as_dict=True)`

### 9) RPA logs sink (interno-chave)
Modulo: `tenant_rpa_sdk.sinks.rpa_logs_sink` (`RPALogsSink`)
O que faz: escrita resiliente no DB com retry curto.
Instanciamento rapido: `sink = RPALogsSink(db)`

### 10) Fallback sink (interno-chave)
Modulo: `tenant_rpa_sdk.sinks.fallback_jsonl` (`FallbackJSONLSink`)
O que faz: pendencias locais em JSONL com lock de arquivo.
Instanciamento rapido: `fallback = FallbackJSONLSink("/tmp/pending.jsonl")`

## Quickstart minimo
```python
from tenant_rpa_sdk import (
    TenantBackendLogger,
    TenantDatabaseConnect,
    TenantExecutionManage,
    TenantProjectQuery,
    TenantInfraStatusSync,
    TenantSlackNotify,
)
from tenant_rpa_sdk.config import load_sdk_config

env = {
    "APP_DB_PRIMARY": "postgres,db.example.local,5432,ops_data,svc_user,***",
    "APP_LOG_TABLE": "event_logs",
    "APP_SLACK_CHANNEL_ID": "C123",
    "APP_SLACK_BOT_TOKEN": "xoxb-***",
}

config = load_sdk_config(env=env, flush_on_start=False)
db = TenantDatabaseConnect(config.db, config.logs_table)

logger = TenantBackendLogger(project_name="demo", source="automation.demo", env=env)
project_q = TenantProjectQuery(db_client=db)
infra = TenantInfraStatusSync(db_client=db)
exec_mgr = TenantExecutionManage(db_client=db)
slack = TenantSlackNotify(channel_id=env["APP_SLACK_CHANNEL_ID"], token=env["APP_SLACK_BOT_TOKEN"])
```

## API publica
- `TenantBackendLogger`
- `TenantDatabaseConnect`
- `TenantExecutionContext`
- `TenantExecutionManage`
- `TenantProjectQuery`
- `TenantInfraStatusSync`
- `TenantSlackNotify`

Aliases temporarios de compatibilidade:
- `ExecutionService`
- `ExecutionContext`
- `Slack`

## Testes
Unitarios:
```bash
pytest tests/unit
```

Integracao (opt-in):
```bash
export TENANT_RPA_SDK_INTEGRATION=true
pytest tests/integration
```
