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()
```