diff --git a/src/vws/_vws_request.py b/src/vws/_vws_request.py index 8e08cf86..22dba87d 100644 --- a/src/vws/_vws_request.py +++ b/src/vws/_vws_request.py @@ -2,9 +2,13 @@ API. """ +from http import HTTPStatus + from beartype import BeartypeConf, beartype from vws_auth_tools import authorization_header, rfc_1123_date +from vws.exceptions.custom_exceptions import ServerError +from vws.exceptions.vws_exceptions import TooManyRequestsError from vws.response import Response from vws.transports import Transport @@ -45,6 +49,12 @@ def target_api_request( Returns: The response to the request. + + Raises: + ~vws.exceptions.custom_exceptions.ServerError: + There is an error with Vuforia's servers. + ~vws.exceptions.vws_exceptions.TooManyRequestsError: + Vuforia is rate limiting access. """ date_string = rfc_1123_date() @@ -67,10 +77,23 @@ def target_api_request( url = base_vws_url.rstrip("/") + request_path - return transport( + response = transport( method=method, url=url, headers=headers, data=data, request_timeout=request_timeout_seconds, ) + + if ( + response.status_code == HTTPStatus.TOO_MANY_REQUESTS + ): # pragma: no cover + # The Vuforia API returns a 429 response with no JSON body. + raise TooManyRequestsError(response=response) + + if ( + response.status_code >= HTTPStatus.INTERNAL_SERVER_ERROR + ): # pragma: no cover + raise ServerError(response=response) + + return response diff --git a/src/vws/vumark_service.py b/src/vws/vumark_service.py index 47d68d94..e3c5d079 100644 --- a/src/vws/vumark_service.py +++ b/src/vws/vumark_service.py @@ -6,7 +6,6 @@ from beartype import BeartypeConf, beartype from vws._vws_request import target_api_request -from vws.exceptions.custom_exceptions import ServerError from vws.exceptions.vws_exceptions import ( AuthenticationFailureError, BadRequestError, @@ -17,7 +16,6 @@ InvalidTargetTypeError, RequestTimeTooSkewedError, TargetStatusNotSuccessError, - TooManyRequestsError, UnknownTargetError, ) from vws.transports import RequestsTransport, Transport @@ -119,17 +117,6 @@ def generate_vumark_instance( transport=self._transport, ) - if ( - response.status_code == HTTPStatus.TOO_MANY_REQUESTS - ): # pragma: no cover - # The Vuforia API returns a 429 response with no JSON body. - raise TooManyRequestsError(response=response) - - if ( - response.status_code >= HTTPStatus.INTERNAL_SERVER_ERROR - ): # pragma: no cover - raise ServerError(response=response) - if response.status_code == HTTPStatus.OK: return response.content diff --git a/src/vws/vws.py b/src/vws/vws.py index bed87c93..ff816b4c 100644 --- a/src/vws/vws.py +++ b/src/vws/vws.py @@ -4,17 +4,14 @@ import json import time from datetime import date -from http import HTTPMethod, HTTPStatus +from http import HTTPMethod from beartype import BeartypeConf, beartype from vws._image_utils import ImageType as _ImageType from vws._image_utils import get_image_data as _get_image_data from vws._vws_request import target_api_request -from vws.exceptions.custom_exceptions import ( - ServerError, - TargetProcessingTimeoutError, -) +from vws.exceptions.custom_exceptions import TargetProcessingTimeoutError from vws.exceptions.vws_exceptions import ( AuthenticationFailureError, BadImageError, @@ -32,7 +29,6 @@ TargetQuotaReachedError, TargetStatusNotSuccessError, TargetStatusProcessingError, - TooManyRequestsError, UnknownTargetError, ) from vws.reports import ( @@ -129,17 +125,6 @@ def make_request( transport=self._transport, ) - if ( - response.status_code == HTTPStatus.TOO_MANY_REQUESTS - ): # pragma: no cover - # The Vuforia API returns a 429 response with no JSON body. - raise TooManyRequestsError(response=response) - - if ( - response.status_code >= HTTPStatus.INTERNAL_SERVER_ERROR - ): # pragma: no cover - raise ServerError(response=response) - result_code = json.loads(s=response.text)["result_code"] if result_code == expected_result_code: