| from __future__ import annotations |
|
|
| import os |
| from typing import Any, Dict |
|
|
| import httpx |
|
|
|
|
| class RunnerClient: |
| def __init__(self) -> None: |
| self.base_url = os.environ.get("MATRIXLAB_RUNNER_URL", "http://localhost:8000").rstrip("/") |
| timeout_s = float(os.environ.get("MATRIXLAB_RUNNER_TIMEOUT_S", "120")) |
| self.client = httpx.Client(base_url=self.base_url, timeout=httpx.Timeout(timeout_s)) |
|
|
| def health(self) -> Dict[str, Any]: |
| res = self.client.get("/health") |
| res.raise_for_status() |
| return res.json() |
|
|
| def create_or_update_environment(self, payload: Dict[str, Any]) -> Dict[str, Any]: |
| res = self.client.post("/environments", json=payload) |
| res.raise_for_status() |
| return res.json() |
|
|
| def bootstrap_environment(self, environment_id: str, force_rebuild: bool = False) -> Dict[str, Any]: |
| res = self.client.post( |
| f"/environments/{environment_id}/bootstrap", |
| json={"force_rebuild": force_rebuild}, |
| ) |
| res.raise_for_status() |
| return res.json() |
|
|
| def run_environment_task(self, environment_id: str, payload: Dict[str, Any]) -> Dict[str, Any]: |
| res = self.client.post(f"/environments/{environment_id}/run-task", json=payload) |
| res.raise_for_status() |
| return res.json() |
|
|