0cd3216125
📁 Files changed: 20 📝 Lines changed: 231 • .coverage • models.db • screenshot.png • tensors-deployed.png • tensors-dropdown.png • tensors-final.png • tensors-fixed.png • tensors-reloaded.png • tensors-ui.png • civitai_routes.py • generate_routes.py • models_routes.py • sd_client.py • index-BQdjF_w0.css • index-CKJOpgtQ.js • index-DmOZ-7Sw.js • index.html • GenerateView.vue • app.ts • index.ts
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
"""HTTP client utilities for sd-server communication."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Any
|
|
|
|
import httpx
|
|
|
|
if TYPE_CHECKING:
|
|
from fastapi import Request
|
|
|
|
|
|
def get_sd_headers(request: Request) -> dict[str, str]:
|
|
"""Get headers for sd-server requests, including API key if configured."""
|
|
headers: dict[str, str] = {}
|
|
api_key = getattr(request.app.state, "sd_server_api_key", None)
|
|
if api_key:
|
|
headers["X-API-Key"] = api_key
|
|
return headers
|
|
|
|
|
|
async def sd_get(request: Request, path: str, *, timeout: float = 30) -> httpx.Response:
|
|
"""Make a GET request to sd-server."""
|
|
url = f"{request.app.state.sd_server_url}/{path.lstrip('/')}"
|
|
headers = get_sd_headers(request)
|
|
async with httpx.AsyncClient(timeout=timeout) as client:
|
|
response = await client.get(url, headers=headers)
|
|
response.raise_for_status()
|
|
return response
|
|
|
|
|
|
async def sd_post(request: Request, path: str, *, json: dict[str, Any] | None = None, timeout: float = 300) -> httpx.Response:
|
|
"""Make a POST request to sd-server."""
|
|
url = f"{request.app.state.sd_server_url}/{path.lstrip('/')}"
|
|
headers = get_sd_headers(request)
|
|
async with httpx.AsyncClient(timeout=timeout) as client:
|
|
response = await client.post(url, json=json, headers=headers)
|
|
response.raise_for_status()
|
|
return response
|