Skip to content

Commit 4d379f8

Browse files
committed
chore: add support for delete with response body
1 parent 3477f45 commit 4d379f8

1 file changed

Lines changed: 31 additions & 15 deletions

File tree

twilio/base/version.py

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -382,14 +382,28 @@ async def update_with_response_info_async(
382382
payload = self._parse_update(method, uri, response)
383383
return payload, response.status_code, dict(response.headers or {})
384384

385-
def _parse_delete(self, method: str, uri: str, response: Response) -> bool:
385+
def _parse_delete(self, method: str, uri: str, response: Response) -> Any:
386386
"""
387-
Parses delete response JSON
387+
Parses delete response. Returns response body as dict if present, otherwise True.
388+
389+
For V1 APIs that return response bodies on delete (e.g., 202 with JSON),
390+
this returns the parsed JSON payload. For traditional deletes (e.g., 204 No Content),
391+
this returns True for backward compatibility.
388392
"""
389393
if response.status_code < 200 or response.status_code >= 300:
390394
raise self.exception(method, uri, response, "Unable to delete record")
391395

392-
return True # if response code is 2XX, deletion was successful
396+
# If response has content, parse and return it (V1 delete with response body)
397+
if response.content and response.text:
398+
try:
399+
return json.loads(response.text)
400+
except (ValueError, json.JSONDecodeError):
401+
# If JSON parsing fails, fall back to boolean
402+
pass
403+
404+
return (
405+
True # Traditional delete: if response code is 2XX, deletion was successful
406+
)
393407

394408
def delete(
395409
self,
@@ -455,14 +469,15 @@ def delete_with_response_info(
455469
auth: Optional[Tuple[str, str]] = None,
456470
timeout: Optional[float] = None,
457471
allow_redirects: bool = False,
458-
) -> Tuple[bool, int, Dict[str, str]]:
472+
) -> Tuple[Union[Dict[str, Any], bool], int, Dict[str, str]]:
459473
"""
460474
Delete a resource and return response metadata
461475
462476
Returns:
463-
tuple: (success_boolean, status_code, headers_dict)
464-
- success_boolean: True if deletion was successful (2XX response)
465-
- status_code: HTTP status code (typically 204 for successful delete)
477+
tuple: (payload_or_success, status_code, headers_dict)
478+
- payload_or_success: Response body dict if present (V1 APIs with response body),
479+
or True boolean for traditional deletes (204 No Content)
480+
- status_code: HTTP status code (typically 202 or 204 for successful delete)
466481
- headers_dict: Response headers as a dictionary
467482
"""
468483
response = self.request(
@@ -475,8 +490,8 @@ def delete_with_response_info(
475490
timeout=timeout,
476491
allow_redirects=allow_redirects,
477492
)
478-
success = self._parse_delete(method, uri, response)
479-
return success, response.status_code, dict(response.headers or {})
493+
result = self._parse_delete(method, uri, response)
494+
return result, response.status_code, dict(response.headers or {})
480495

481496
async def delete_with_response_info_async(
482497
self,
@@ -488,14 +503,15 @@ async def delete_with_response_info_async(
488503
auth: Optional[Tuple[str, str]] = None,
489504
timeout: Optional[float] = None,
490505
allow_redirects: bool = False,
491-
) -> Tuple[bool, int, Dict[str, str]]:
506+
) -> Tuple[Union[Dict[str, Any], bool], int, Dict[str, str]]:
492507
"""
493508
Asynchronously delete a resource and return response metadata
494509
495510
Returns:
496-
tuple: (success_boolean, status_code, headers_dict)
497-
- success_boolean: True if deletion was successful (2XX response)
498-
- status_code: HTTP status code (typically 204 for successful delete)
511+
tuple: (payload_or_success, status_code, headers_dict)
512+
- payload_or_success: Response body dict if present (V1 APIs with response body),
513+
or True boolean for traditional deletes (204 No Content)
514+
- status_code: HTTP status code (typically 202 or 204 for successful delete)
499515
- headers_dict: Response headers as a dictionary
500516
"""
501517
response = await self.request_async(
@@ -508,8 +524,8 @@ async def delete_with_response_info_async(
508524
timeout=timeout,
509525
allow_redirects=allow_redirects,
510526
)
511-
success = self._parse_delete(method, uri, response)
512-
return success, response.status_code, dict(response.headers or {})
527+
result = self._parse_delete(method, uri, response)
528+
return result, response.status_code, dict(response.headers or {})
513529

514530
def read_limits(
515531
self, limit: Optional[int] = None, page_size: Optional[int] = None

0 commit comments

Comments
 (0)