Skip to content

Commit 8457c74

Browse files
committed
Remove ties of result code handling from VWS and VWQ
1 parent 37040b4 commit 8457c74

File tree

4 files changed

+67
-91
lines changed

4 files changed

+67
-91
lines changed

src/vws/_result_codes.py

Lines changed: 0 additions & 78 deletions
This file was deleted.

src/vws/query.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,19 @@
1111
from urllib3.filepost import encode_multipart_formdata
1212
from vws_auth_tools import authorization_header, rfc_1123_date
1313

14-
from vws._result_codes import raise_for_result_code
1514
from vws.exceptions.cloud_reco_exceptions import (
15+
InactiveProject,
1616
MatchProcessing,
1717
MaxNumResultsOutOfRange,
1818
)
1919
from vws.exceptions.custom_exceptions import (
2020
ConnectionErrorPossiblyImageTooLarge,
2121
)
22+
from vws.exceptions.vws_exceptions import (
23+
AuthenticationFailure,
24+
BadImage,
25+
RequestTimeTooSkewed,
26+
)
2227
from vws.include_target_data import CloudRecoIncludeTargetData
2328
from vws.reports import QueryResult, TargetData
2429

@@ -140,10 +145,15 @@ def query(
140145
if 'No content to map due to end-of-input' in response.text:
141146
raise MatchProcessing(response=response)
142147

143-
raise_for_result_code(
144-
response=response,
145-
expected_result_code='Success',
146-
)
148+
result_code = response.json()['result_code']
149+
if result_code != 'Success':
150+
exception = {
151+
'AuthenticationFailure': AuthenticationFailure,
152+
'BadImage': BadImage,
153+
'InactiveProject': InactiveProject,
154+
'RequestTimeTooSkewed': RequestTimeTooSkewed,
155+
}[result_code]
156+
raise exception(response=response)
147157

148158
result = []
149159
result_list = list(response.json()['results'])

src/vws/vws.py

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,28 @@
1616
from requests import Response
1717
from vws_auth_tools import authorization_header, rfc_1123_date
1818

19-
from vws._result_codes import raise_for_result_code
20-
from vws.exceptions.custom_exceptions import TargetProcessingTimeout
19+
from vws.exceptions.custom_exceptions import (
20+
TargetProcessingTimeout,
21+
UnknownVWSErrorPossiblyBadName,
22+
)
23+
from vws.exceptions.vws_exceptions import (
24+
AuthenticationFailure,
25+
BadImage,
26+
DateRangeError,
27+
Fail,
28+
ImageTooLarge,
29+
MetadataTooLarge,
30+
ProjectHasNoAPIAccess,
31+
ProjectInactive,
32+
ProjectSuspended,
33+
RequestQuotaReached,
34+
RequestTimeTooSkewed,
35+
TargetNameExist,
36+
TargetQuotaReached,
37+
TargetStatusNotSuccess,
38+
TargetStatusProcessing,
39+
UnknownTarget,
40+
)
2141
from vws.reports import (
2242
DatabaseSummaryReport,
2343
TargetRecord,
@@ -138,12 +158,35 @@ def _make_request(
138158
base_vws_url=self._base_vws_url,
139159
)
140160

141-
raise_for_result_code(
142-
response=response,
143-
expected_result_code=expected_result_code,
144-
)
145-
146-
return response
161+
try:
162+
result_code = response.json()['result_code']
163+
except json.decoder.JSONDecodeError as exc:
164+
assert 'Oops' in response.text
165+
raise UnknownVWSErrorPossiblyBadName() from exc
166+
167+
if result_code == expected_result_code:
168+
return response
169+
170+
exception = {
171+
'AuthenticationFailure': AuthenticationFailure,
172+
'BadImage': BadImage,
173+
'DateRangeError': DateRangeError,
174+
'Fail': Fail,
175+
'ImageTooLarge': ImageTooLarge,
176+
'MetadataTooLarge': MetadataTooLarge,
177+
'ProjectHasNoAPIAccess': ProjectHasNoAPIAccess,
178+
'ProjectInactive': ProjectInactive,
179+
'ProjectSuspended': ProjectSuspended,
180+
'RequestQuotaReached': RequestQuotaReached,
181+
'RequestTimeTooSkewed': RequestTimeTooSkewed,
182+
'TargetNameExist': TargetNameExist,
183+
'TargetQuotaReached': TargetQuotaReached,
184+
'TargetStatusNotSuccess': TargetStatusNotSuccess,
185+
'TargetStatusProcessing': TargetStatusProcessing,
186+
'UnknownTarget': UnknownTarget,
187+
}[result_code]
188+
189+
raise exception(response=response)
147190

148191
def add_target(
149192
self,

tests/test_exceptions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ def test_project_inactive(high_quality_image: io.BytesIO) -> None:
191191

192192
assert exc.value.response.status_code == HTTPStatus.FORBIDDEN
193193

194+
194195
def test_inactive_project(high_quality_image: io.BytesIO) -> None:
195196
"""
196197
An ``InactiveProject`` exception is raised when querying an inactive

0 commit comments

Comments
 (0)