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
47 changes: 35 additions & 12 deletions resend/api_keys/_api_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,29 @@ class CreateApiKeyResponse(BaseResponse):
The token of the created API key
"""

class DeleteApiKeyResponse(BaseResponse):
"""
DeleteApiKeyResponse is the type that wraps the deleted API key response.

Attributes:
object (str): The object type, always "api_key"
id (str): The ID of the deleted API key
deleted (bool): Whether the API key was deleted
"""

object: str
"""
The object type, always "api_key"
"""
id: str
"""
The ID of the deleted API key
"""
deleted: bool
"""
Whether the API key was deleted
"""

class ListParams(TypedDict):
limit: NotRequired[int]
"""
Expand Down Expand Up @@ -134,7 +157,7 @@ def list(cls, params: Optional[ListParams] = None) -> ListResponse:
return resp

@classmethod
def remove(cls, api_key_id: str) -> None:
def remove(cls, api_key_id: str) -> DeleteApiKeyResponse:
"""
Remove an existing API key.
see more: https://resend.com/docs/api-reference/api-keys/delete-api-key
Expand All @@ -143,13 +166,13 @@ def remove(cls, api_key_id: str) -> None:
api_key_id (str): The ID of the API key to remove

Returns:
None
DeleteApiKeyResponse: The deleted API key response
"""
path = f"/api-keys/{api_key_id}"

# This would raise if failed
request.Request[None](path=path, params={}, verb="delete").perform()
return None
resp = request.Request[ApiKeys.DeleteApiKeyResponse](
path=path, params={}, verb="delete"
).perform_with_content()
return resp

@classmethod
async def create_async(cls, params: CreateParams) -> CreateApiKeyResponse:
Expand Down Expand Up @@ -190,7 +213,7 @@ async def list_async(cls, params: Optional[ListParams] = None) -> ListResponse:
return resp

@classmethod
async def remove_async(cls, api_key_id: str) -> None:
async def remove_async(cls, api_key_id: str) -> DeleteApiKeyResponse:
"""
Remove an existing API key (async).
see more: https://resend.com/docs/api-reference/api-keys/delete-api-key
Expand All @@ -199,10 +222,10 @@ async def remove_async(cls, api_key_id: str) -> None:
api_key_id (str): The ID of the API key to remove

Returns:
None
DeleteApiKeyResponse: The deleted API key response
"""
path = f"/api-keys/{api_key_id}"

# This would raise if failed
await AsyncRequest[None](path=path, params={}, verb="delete").perform()
return None
resp = await AsyncRequest[ApiKeys.DeleteApiKeyResponse](
path=path, params={}, verb="delete"
).perform_with_content()
return resp
18 changes: 14 additions & 4 deletions tests/api_keys_async_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,19 @@ async def test_should_list_api_key_async_raise_exception_when_no_content(
_ = await resend.ApiKeys.list_async()

async def test_api_keys_remove_async(self) -> None:
self.set_mock_text("")
self.set_mock_json(
{
"object": "api_key",
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
"deleted": True,
}
)

# Remove operation returns None, verify no exceptions raised
await resend.ApiKeys.remove_async(
api_key_id="4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
deleted_key: resend.ApiKeys.DeleteApiKeyResponse = (
await resend.ApiKeys.remove_async(
api_key_id="4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
)
)
assert deleted_key["object"] == "api_key"
assert deleted_key["id"] == "4ef9a417-02e9-4d39-ad75-9611e0fcc33c"
assert deleted_key["deleted"] is True
18 changes: 12 additions & 6 deletions tests/api_keys_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,17 @@ def test_api_keys_list_with_before_param(self) -> None:
assert keys["data"][0]["id"] == "test-key-3"

def test_api_keys_remove(self) -> None:
self.set_mock_text("")
self.set_mock_json(
{
"object": "api_key",
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
"deleted": True,
}
)

assert (
resend.ApiKeys.remove(
api_key_id="4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
)
is None
deleted_key: resend.ApiKeys.DeleteApiKeyResponse = resend.ApiKeys.remove(
api_key_id="4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
)
assert deleted_key["object"] == "api_key"
assert deleted_key["id"] == "4ef9a417-02e9-4d39-ad75-9611e0fcc33c"
assert deleted_key["deleted"] is True
Loading