fix(gateway): Handle non-JSON cron responses
Add JSON parsing guards and path fallback for cron endpoints so\ncron list errors expose gateway text and retry /cron/jobs.\n\nCo-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -67,7 +67,13 @@ async def _http_request(method: str, path: str, payload: dict[str, Any] | None =
|
|||||||
)
|
)
|
||||||
if not response.content:
|
if not response.content:
|
||||||
return None
|
return None
|
||||||
return response.json()
|
try:
|
||||||
|
return response.json()
|
||||||
|
except ValueError as exc:
|
||||||
|
preview = response.text.strip()[:200] or "<empty>"
|
||||||
|
raise OpenClawGatewayError(
|
||||||
|
f"Non-JSON response from gateway: {preview}"
|
||||||
|
) from exc
|
||||||
except OpenClawGatewayError:
|
except OpenClawGatewayError:
|
||||||
raise
|
raise
|
||||||
except Exception as exc: # pragma: no cover - transport errors
|
except Exception as exc: # pragma: no cover - transport errors
|
||||||
@@ -183,13 +189,22 @@ async def ensure_session(session_key: str, label: str | None = None) -> Any:
|
|||||||
|
|
||||||
|
|
||||||
async def list_cron_jobs() -> Any:
|
async def list_cron_jobs() -> Any:
|
||||||
return await _http_request("GET", "/api/v1/cron/jobs")
|
try:
|
||||||
|
return await _http_request("GET", "/api/v1/cron/jobs")
|
||||||
|
except OpenClawGatewayError:
|
||||||
|
return await _http_request("GET", "/cron/jobs")
|
||||||
|
|
||||||
|
|
||||||
async def upsert_cron_job(job: dict[str, Any]) -> Any:
|
async def upsert_cron_job(job: dict[str, Any]) -> Any:
|
||||||
return await _http_request("POST", "/api/v1/cron/jobs", payload=job)
|
try:
|
||||||
|
return await _http_request("POST", "/api/v1/cron/jobs", payload=job)
|
||||||
|
except OpenClawGatewayError:
|
||||||
|
return await _http_request("POST", "/cron/jobs", payload=job)
|
||||||
|
|
||||||
|
|
||||||
async def delete_cron_job(name: str) -> Any:
|
async def delete_cron_job(name: str) -> Any:
|
||||||
safe_name = quote(name, safe="")
|
safe_name = quote(name, safe="")
|
||||||
return await _http_request("DELETE", f"/api/v1/cron/jobs/{safe_name}")
|
try:
|
||||||
|
return await _http_request("DELETE", f"/api/v1/cron/jobs/{safe_name}")
|
||||||
|
except OpenClawGatewayError:
|
||||||
|
return await _http_request("DELETE", f"/cron/jobs/{safe_name}")
|
||||||
|
|||||||
Reference in New Issue
Block a user