Restructure _send_raw_request to raise errors early, then process the successful response
This commit is contained in:
@@ -40,6 +40,7 @@ class HttpSmartTurnAnalyzer(BaseSmartTurn):
|
|||||||
async def _send_raw_request(self, data_bytes: bytes) -> Dict[str, Any]:
|
async def _send_raw_request(self, data_bytes: bytes) -> Dict[str, Any]:
|
||||||
headers = {"Content-Type": "application/octet-stream"}
|
headers = {"Content-Type": "application/octet-stream"}
|
||||||
headers.update(self._headers)
|
headers.update(self._headers)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
timeout = aiohttp.ClientTimeout(total=self._params.stop_secs)
|
timeout = aiohttp.ClientTimeout(total=self._params.stop_secs)
|
||||||
|
|
||||||
@@ -49,28 +50,31 @@ class HttpSmartTurnAnalyzer(BaseSmartTurn):
|
|||||||
logger.trace("\n--- Response ---")
|
logger.trace("\n--- Response ---")
|
||||||
logger.trace(f"Status Code: {response.status}")
|
logger.trace(f"Status Code: {response.status}")
|
||||||
|
|
||||||
if response.status == 200:
|
# Check if successful
|
||||||
try:
|
if response.status != 200:
|
||||||
json_data = await response.json()
|
|
||||||
logger.trace("Response JSON:")
|
|
||||||
logger.trace(json_data)
|
|
||||||
return json_data
|
|
||||||
except aiohttp.ContentTypeError:
|
|
||||||
# Non-JSON response
|
|
||||||
text = await response.text()
|
|
||||||
logger.trace("Response Content (non-JSON):")
|
|
||||||
logger.trace(text)
|
|
||||||
raise Exception(f"Non-JSON response: {text}")
|
|
||||||
else:
|
|
||||||
error_text = await response.text()
|
error_text = await response.text()
|
||||||
logger.trace("Response Content (Error):")
|
logger.trace("Response Content (Error):")
|
||||||
logger.trace(error_text)
|
logger.trace(error_text)
|
||||||
|
|
||||||
if response.status == 500:
|
if response.status == 500:
|
||||||
logger.warning(f"Smart turn service returned 500 error: {error_text}")
|
logger.warning(f"Smart turn service returned 500 error: {error_text}")
|
||||||
raise Exception(f"Server returned HTTP 500: {error_text}")
|
raise Exception(f"Server returned HTTP 500: {error_text}")
|
||||||
else:
|
else:
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
|
|
||||||
|
# Process successful response
|
||||||
|
try:
|
||||||
|
json_data = await response.json()
|
||||||
|
logger.trace("Response JSON:")
|
||||||
|
logger.trace(json_data)
|
||||||
|
return json_data
|
||||||
|
except aiohttp.ContentTypeError:
|
||||||
|
# Non-JSON response
|
||||||
|
text = await response.text()
|
||||||
|
logger.trace("Response Content (non-JSON):")
|
||||||
|
logger.trace(text)
|
||||||
|
raise Exception(f"Non-JSON response: {text}")
|
||||||
|
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
logger.error(f"Request timed out after {self._params.stop_secs} seconds")
|
logger.error(f"Request timed out after {self._params.stop_secs} seconds")
|
||||||
raise SmartTurnTimeoutException(f"Request exceeded {self._params.stop_secs} seconds.")
|
raise SmartTurnTimeoutException(f"Request exceeded {self._params.stop_secs} seconds.")
|
||||||
|
|||||||
Reference in New Issue
Block a user