Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/workos/_base_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,9 +191,12 @@ def _deserialize_response(
) -> Any:
if response.status_code == 204 or not response.content:
return None
data: Dict[str, Any] = cast(Dict[str, Any], response.json())
try:
data = response.json()
except Exception:
return None
if model is not None:
return model.from_dict(data)
return model.from_dict(cast(Dict[str, Any], data))
return data

@staticmethod
Expand Down
56 changes: 56 additions & 0 deletions tests/test_generated_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,33 @@ def test_documented_import_surface_exposes_resources(self):
assert client.widgets is not None
client.close()

def test_request_raw_preserves_json_dict_response(self, httpx_mock):
httpx_mock.add_response(json={"ok": True})
client = WorkOSClient(
api_key="sk_test_123", client_id="client_test", max_retries=0
)
result = client.request_raw("GET", "test")
assert result == {"ok": True}
client.close()

def test_request_list_preserves_json_array_response(self, httpx_mock):
httpx_mock.add_response(json=[{"id": "item_123"}])
client = WorkOSClient(
api_key="sk_test_123", client_id="client_test", max_retries=0
)
result = client.request_list("GET", "test")
assert result == [{"id": "item_123"}]
client.close()

def test_request_returns_none_for_non_json_success_without_model(self, httpx_mock):
httpx_mock.add_response(status_code=202, content=b"\n")
client = WorkOSClient(
api_key="sk_test_123", client_id="client_test", max_retries=0
)
result = client.request("DELETE", "test")
assert result is None
client.close()


@pytest.mark.asyncio
class TestAsyncWorkOSClient:
Expand All @@ -475,6 +502,35 @@ async def test_documented_import_surface_exposes_resources(self):
assert client.widgets is not None
await client.close()

async def test_request_raw_preserves_json_dict_response(self, httpx_mock):
httpx_mock.add_response(json={"ok": True})
client = AsyncWorkOSClient(
api_key="sk_test_123", client_id="client_test", max_retries=0
)
result = await client.request_raw("GET", "test")
assert result == {"ok": True}
await client.close()

async def test_request_list_preserves_json_array_response(self, httpx_mock):
httpx_mock.add_response(json=[{"id": "item_123"}])
client = AsyncWorkOSClient(
api_key="sk_test_123", client_id="client_test", max_retries=0
)
result = await client.request_list("GET", "test")
assert result == [{"id": "item_123"}]
await client.close()

async def test_request_returns_none_for_non_json_success_without_model(
self, httpx_mock
):
httpx_mock.add_response(status_code=202, content=b"\n")
client = AsyncWorkOSClient(
api_key="sk_test_123", client_id="client_test", max_retries=0
)
result = await client.request("DELETE", "test")
assert result is None
await client.close()

async def test_raises_400(self, httpx_mock):
httpx_mock.add_response(
status_code=400,
Expand Down
4 changes: 2 additions & 2 deletions tests/test_organizations.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ def test_update_organization(self, workos, httpx_mock):
assert request.url.path.endswith("/organizations/test_id")

def test_delete_organization(self, workos, httpx_mock):
httpx_mock.add_response(status_code=204)
httpx_mock.add_response(status_code=202, content=b"\n")
result = workos.organizations.delete_organization("test_id")
assert result is None
request = httpx_mock.get_request()
Expand Down Expand Up @@ -289,7 +289,7 @@ async def test_update_organization(self, async_workos, httpx_mock):

@pytest.mark.asyncio
async def test_delete_organization(self, async_workos, httpx_mock):
httpx_mock.add_response(status_code=204)
httpx_mock.add_response(status_code=202, content=b"\n")
result = await async_workos.organizations.delete_organization("test_id")
assert result is None
request = httpx_mock.get_request()
Expand Down
Loading