Fixes handling of exception chains in the util

This commit is contained in:
Trenton H 2023-09-08 11:48:53 -07:00
parent a1697ff21c
commit a2f738772c

View File

@ -24,6 +24,7 @@ from django.test import override_settings
from documents.data_models import ConsumableDocument from documents.data_models import ConsumableDocument
from documents.data_models import DocumentMetadataOverrides from documents.data_models import DocumentMetadataOverrides
from documents.parsers import ParseError
def setup_directories(): def setup_directories():
@ -89,7 +90,7 @@ def util_call_with_backoff(
method_or_callable: Callable, method_or_callable: Callable,
args: Union[List, Tuple], args: Union[List, Tuple],
*, *,
skip_on_503=True, skip_on_50x_err=True,
) -> Tuple[bool, Any]: ) -> Tuple[bool, Any]:
""" """
For whatever reason, the images started during the test pipeline like to For whatever reason, the images started during the test pipeline like to
@ -118,24 +119,30 @@ def util_call_with_backoff(
result = method_or_callable(*args) result = method_or_callable(*args)
succeeded = True succeeded = True
except httpx.HTTPError as exc: except ParseError as e:
warnings.warn(f"HTTP Exception for {exc.request.url} - {exc}") cause_exec = e.__cause__
if cause_exec is not None and isinstance(cause_exec, httpx.HTTPStatusError):
status_codes.append(cause_exec.response.status_code)
warnings.warn(
f"HTTP Exception for {cause_exec.request.url} - {cause_exec}",
)
else:
warnings.warn(f"Unexpected error: {e}")
except Exception as e:
warnings.warn(f"Unexpected error: {e}")
if isinstance(exc, httpx.HTTPStatusError): retry_count = retry_count + 1
status_codes.append(exc.response.status_code)
retry_count = retry_count + 1 time.sleep(retry_time)
retry_time = retry_time * 2.0
time.sleep(retry_time)
retry_time = retry_time * 2.0
if ( if (
not succeeded not succeeded
and status_codes and status_codes
and skip_on_503 and skip_on_50x_err
and all(element == httpx.codes.SERVICE_UNAVAILABLE for element in status_codes) and all(httpx.codes.is_server_error(code) for code in status_codes)
): ):
pytest.skip("Repeated HTTP 503 for service") pytest.skip("Repeated HTTP 50x for service")
return succeeded, result return succeeded, result