human_client.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import httpx
  2. from core_domain import HumanTaskContract, HumanTaskCreateContract
  3. class HumanServiceClientError(Exception):
  4. pass
  5. class HumanServiceClient:
  6. def __init__(self, base_url: str, timeout_seconds: float = 10.0) -> None:
  7. self.base_url = base_url.rstrip("/")
  8. self.timeout_seconds = timeout_seconds
  9. def create_task(self, payload: HumanTaskCreateContract) -> HumanTaskContract:
  10. try:
  11. with httpx.Client(timeout=self.timeout_seconds) as client:
  12. response = client.post(
  13. f"{self.base_url}/human/tasks",
  14. json=payload.model_dump(mode="json"),
  15. )
  16. response.raise_for_status()
  17. return HumanTaskContract.model_validate(response.json())
  18. except httpx.HTTPError as exc:
  19. raise HumanServiceClientError(
  20. f"human-service create task failed: {exc}"
  21. ) from exc
  22. def get_task(self, *, tenant_id: str, human_task_id: str) -> HumanTaskContract:
  23. try:
  24. with httpx.Client(timeout=self.timeout_seconds) as client:
  25. response = client.get(
  26. f"{self.base_url}/human/tasks/{human_task_id}",
  27. params={"tenant_id": tenant_id},
  28. )
  29. response.raise_for_status()
  30. return HumanTaskContract.model_validate(response.json())
  31. except httpx.HTTPError as exc:
  32. raise HumanServiceClientError(f"human-service get task failed: {exc}") from exc