Saltar al contenido principal

ShoriClient

Cliente de Shori. Thread-safe: crea uno y compártelo entre todos los hilos.

Comparte un único pool de conexiones HTTP, un único token Bearer con renovación single-flight y un pool de hilos acotado (max_workers) para operaciones internas en paralelo. Libera todo con close() o usándolo como context manager.

Se crea con ShoriClientBuilder; el constructor no está pensado para uso directo.

Attributes: config: Configuración inmutable del cliente.

Ejemplo General​

```python
with (
ShoriClientBuilder()
.environment("PROD")
.portal_id("portal-uuid")
.tenant_id("tenant-uuid")
.api_key("api-key")
.build()
) as client:
caso = client.caso().find_by_id("uuid")
client.repo().document().delete("doc-uuid")
```

Métodos​

def __init__(config: ShoriConfig, http_executor: HttpExecutor, repo_module: RepoModule, caso_module: CaseModule) -> None​

Ensambla el cliente (uso interno; usa ShoriClientBuilder).

Parámetros:

  • config (ShoriConfig) — Configuración resuelta.
  • http_executor (HttpExecutor) — Ejecutor HTTP compartido.
  • repo_module (RepoModule) — Módulo de repositorio.
  • caso_module (CaseModule) — Módulo de casos.

Ejemplo de uso:

```python
client = ShoriClientBuilder()....build() # forma recomendada
```

def repo() -> RepoModule​

Módulo de repositorio de documentos.

Retorna: RepoModule — RepoModule con document() (subir/eliminar) y download() (descargar).

Ejemplo de uso:

```python
doc_id = client.repo().document().upload(
UploadDocumentRequest(file="contrato.pdf", caso_id="c", caso_type_id="t")
)
```

def caso() -> CaseModule​

Módulo de casos y sus submódulos.

Retorna: CaseModule — CaseModule con CRUD, búsqueda y submódulos (state(), comment(), files()...).

Ejemplo de uso:

```python
caso = client.caso().find_by_id("caso-uuid")
client.caso().state().next({"casoId": "c", "workingSubStatePrimaryLevelId": "w"})
```

def close() -> None​

Libera el pool de hilos y las conexiones HTTP. Es idempotente.

Ejemplo de uso:

```python
client = ShoriClientBuilder()....build()
try:
client.caso().find_by_id("uuid")
finally:
client.close()
```