ITADN

Bug: `delete_organization` raises `JSONDecodeError` on successful 202 response

#626Closeddaniel-k 创建于 2026-04-20
D
daniel-kcommented
### Summary `WorkOSClient.organizations.delete_organization(id)` raises `json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)` even though the server returns `202 Accepted` and the delete succeeds. The SDK attempts to JSON-parse the 202 body even though `delete_organization` is declared `-> None` and the caller discards any return value. ### Environment - `workos==6.0.4` - Python 3.13 / 3.14 - Linux / macOS ### Reproducer ```python # pip install workos==6.0.4 import httpx from unittest.mock import patch from workos import WorkOSClient # What the API returns for DELETE /organizations/{id}: 202 Accepted, # non-empty body that isn't valid JSON. fake = httpx.Response( status_code=202, content=b"\n", request=httpx.Request("DELETE", "https://api.workos.com/organizations/org_01TEST"), ) client = WorkOSClient(api_key="sk_test_dummy") http_client = next(v for v in vars(client).values() if isinstance(v, httpx.Client)) with patch.object(http_client, "request", return_value=fake): client.organizations.delete_organization("org_01TEST") # → json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) ``` Same behavior observed against the real API: `DELETE /organizations/{id}` responds `202 Accepted` (the org is deleted), but the SDK call raises. ### Root cause In `workos/_base_client.py`: ```python def _deserialize_response(self, response, model): if response.status_code == 204 or not response.content: return None data = cast(Dict[str, Any], response.json()) ... ``` The short-circuit only covers `204` and truly-empty bytes. Any other 2xx with non-empty content forces a `.json()` parse, even when: 1. The method signature declares `-> None` (e.g. `delete_organization`, `delete_api_key`), i.e. the SDK itself doesn't need a parsed body. 2. No `model=` is passed to `request(...)`, so whatever is parsed is discarded. `delete_api_key` only works because the server happens to return `204 No Content` there — it would have the same problem on any `2xx` with a body. ### Expected behavior `delete_organization(...)` returns `None` on a successful `2xx` response regardless of body shape.
关闭于 2026-04-20 1 条评论