An abstracted response to implement parsing.
This class provides methods to parse the response from an API request.
Attributes:
| Name |
Type |
Description |
response |
|
The original response object.
|
headers |
|
The headers of the response.
|
status_code |
|
The status code of the response.
|
content_type |
|
The content type of the response.
|
Source code in src/cloe_nessy/clients/api_client/api_response.py
| class APIResponse:
"""An abstracted response to implement parsing.
This class provides methods to parse the response from an API request.
Attributes:
response: The original response object.
headers: The headers of the response.
status_code: The status code of the response.
content_type: The content type of the response.
"""
def __init__(self, response: requests.Response):
"""Initializes the APIResponse object.
Args:
response: The response object from an API request.
"""
self.response = response
self.headers = self.response.headers
self.status_code = self.response.status_code
self.url = self.response.url
self.reason = self.response.reason
self.elapsed = self.response.elapsed
self.content_type = self.headers.get("Content-Type", "").lower()
def to_dict(self, key: str | None = None) -> dict[str, Any]:
"""Parses the values from the response into a dictionary.
Args:
key: The key to return from the dictionary. If specified, the method
will return the value associated with this key from the parsed dictionary.
Returns:
The response parsed to a dictionary. If a key is specified,
the method returns the value associated with this key.
Raises:
KeyError: If the specified key is not found in the response.
ValueError: If there is an error parsing the JSON response.
Exception: For any other unexpected errors.
"""
dict_response = {}
try:
if "application/json" in self.content_type:
dict_response = self.response.json()
else:
# Handling of other response types can be added below.
dict_response = {"value": self.response.text}
if key:
dict_response = {"value": dict_response[key]}
except KeyError as err:
raise KeyError(
f"The key '{err.args[0]}' was not found in the response. Status code: {self.status_code}, "
f"Headers: {self.headers}, Response: {dict_response}"
) from err
except ValueError as err:
raise ValueError(
f"Error parsing JSON response: {err}. Status code: {self.status_code}, Headers: {self.headers}, "
f"Response content: {self.response.text}"
) from err
except Exception as err:
raise APIClientError(
f"An unexpected error occurred: {err}. Status code: {self.status_code}, Headers: {self.headers}, "
f"Response content: {self.response.text}"
) from err
return dict_response
|
__init__(response)
Initializes the APIResponse object.
Parameters:
| Name |
Type |
Description |
Default |
response
|
Response
|
The response object from an API request.
|
required
|
Source code in src/cloe_nessy/clients/api_client/api_response.py
| def __init__(self, response: requests.Response):
"""Initializes the APIResponse object.
Args:
response: The response object from an API request.
"""
self.response = response
self.headers = self.response.headers
self.status_code = self.response.status_code
self.url = self.response.url
self.reason = self.response.reason
self.elapsed = self.response.elapsed
self.content_type = self.headers.get("Content-Type", "").lower()
|
to_dict(key=None)
Parses the values from the response into a dictionary.
Parameters:
| Name |
Type |
Description |
Default |
key
|
str | None
|
The key to return from the dictionary. If specified, the method
will return the value associated with this key from the parsed dictionary.
|
None
|
Returns:
| Type |
Description |
dict[str, Any]
|
The response parsed to a dictionary. If a key is specified,
the method returns the value associated with this key.
|
Raises:
| Type |
Description |
KeyError
|
If the specified key is not found in the response.
|
ValueError
|
If there is an error parsing the JSON response.
|
Exception
|
For any other unexpected errors.
|
Source code in src/cloe_nessy/clients/api_client/api_response.py
| def to_dict(self, key: str | None = None) -> dict[str, Any]:
"""Parses the values from the response into a dictionary.
Args:
key: The key to return from the dictionary. If specified, the method
will return the value associated with this key from the parsed dictionary.
Returns:
The response parsed to a dictionary. If a key is specified,
the method returns the value associated with this key.
Raises:
KeyError: If the specified key is not found in the response.
ValueError: If there is an error parsing the JSON response.
Exception: For any other unexpected errors.
"""
dict_response = {}
try:
if "application/json" in self.content_type:
dict_response = self.response.json()
else:
# Handling of other response types can be added below.
dict_response = {"value": self.response.text}
if key:
dict_response = {"value": dict_response[key]}
except KeyError as err:
raise KeyError(
f"The key '{err.args[0]}' was not found in the response. Status code: {self.status_code}, "
f"Headers: {self.headers}, Response: {dict_response}"
) from err
except ValueError as err:
raise ValueError(
f"Error parsing JSON response: {err}. Status code: {self.status_code}, Headers: {self.headers}, "
f"Response content: {self.response.text}"
) from err
except Exception as err:
raise APIClientError(
f"An unexpected error occurred: {err}. Status code: {self.status_code}, Headers: {self.headers}, "
f"Response content: {self.response.text}"
) from err
return dict_response
|