Saltar al contenido principal

Tutoriales

Ejemplo de uso con Python​

El siguiente ejemplo usa la API v2 y el esquema de autenticación mediante X-API-Key.

Dependencia​

pip install requests

Configuración y subida​

from pathlib import Path

import requests


class VeraquoAPI:
def __init__(self, base_url: str, api_key: str):
self.base_url = base_url.rstrip("/")
self.session = requests.Session()
self.session.headers.update({"X-API-Key": api_key})

def upload_file(self, path: str) -> dict:
file_path = Path(path)
with file_path.open("rb") as file_handle:
response = self.session.post(
f"{self.base_url}/files",
files={"file": (file_path.name, file_handle)},
)
response.raise_for_status()
return response.json()

El endpoint actual de subida es POST /files; su campo multipart obligatorio es file y devuelve un único objeto de fichero. Guarda el identificador id de la respuesta.

Crear una ejecución y consultar su estado​

class VeraquoAPI(VeraquoAPI):
def create_run(self, file_id: str, workers: list[str] | None = None) -> dict:
response = self.session.post(
f"{self.base_url}/runs",
json={
"file_id": file_id,
"run_schemas": None,
"workers": workers,
},
)
response.raise_for_status()
return response.json()

def get_run(self, run_id: str) -> dict:
response = self.session.get(f"{self.base_url}/runs/{run_id}")
response.raise_for_status()
return response.json()

def get_results(self, run_id: str) -> dict:
response = self.session.get(f"{self.base_url}/runs/{run_id}/results")
response.raise_for_status()
return response.json()

def delete_file(self, file_id: str) -> None:
response = self.session.delete(f"{self.base_url}/files/{file_id}")
response.raise_for_status()

No existe un endpoint /status separado en v2. Consulta GET /runs/{run_id} hasta que status sea ready, ok, alert o error, y después recupera los resultados con GET /runs/{run_id}/results.

Flujo completo​

api = VeraquoAPI(
"https://veraquo.gradiant.org/api/v2",
"{API_KEY}",
)

file_info = api.upload_file("./fichero.webp")
run_info = api.create_run(file_info["id"])
results = api.get_results(run_info["id"])
print(results)

Para procesos asíncronos, consulta api.get_run(run_info["id"]) periódicamente antes de llamar a get_results.