Skip to content

Commit a9d138f

Browse files
author
Leandro Rosemberg
committed
Fixing some tests
1 parent 61ee06c commit a9d138f

File tree

3 files changed

+37
-73
lines changed

3 files changed

+37
-73
lines changed

roboflow/adapters/rfapi.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,17 @@ def upload_image(
106106

107107
if response.status_code != 200:
108108
if responsejson:
109-
raise ImageUploadError(responsejson, status_code=response.status_code)
109+
message = responsejson.get("message") or responsejson
110+
raise ImageUploadError(message, status_code=response.status_code)
110111
else:
111112
raise ImageUploadError(response, status_code=response.status_code)
112113

113114
if not responsejson: # fail fast
114115
raise ImageUploadError(response, status_code=response.status_code)
115116

116117
if not (responsejson.get("success") or responsejson.get("duplicate")):
117-
raise ImageUploadError(responsejson)
118+
message = responsejson.get("message") or responsejson
119+
raise ImageUploadError(message)
118120

119121
return responsejson
120122

@@ -157,17 +159,18 @@ def save_annotation(
157159
pass
158160

159161
if not responsejson:
160-
raise AnnotationSaveError(response, status_code=response.status_code)
161-
162+
raise _save_annotation_error(response)
163+
if response.status_code not in (200, 409):
164+
raise _save_annotation_error(response)
162165
if response.status_code == 409:
163166
if "already annotated" in responsejson.get("error", {}).get("message"):
164167
return {"warn": "already annotated"}
165-
168+
else:
169+
raise _save_annotation_error(response)
166170
if responsejson.get("error"):
167-
raise AnnotationSaveError(responsejson["error"], status_code=response.status_code)
168-
171+
raise _save_annotation_error(response)
169172
if not responsejson.get("success"):
170-
raise AnnotationSaveError(responsejson, status_code=response.status_code)
173+
raise _save_annotation_error(response)
171174

172175
return responsejson
173176

@@ -212,3 +215,22 @@ def _local_upload_url(api_key, project_url, batch_name, tag_names, sequence_numb
212215
query_params.update(sequence_number=sequence_number, sequence_size=sequence_size)
213216

214217
return _upload_url(api_key, project_url, **query_params)
218+
219+
220+
def _save_annotation_error(response):
221+
responsejson = None
222+
try:
223+
responsejson = response.json()
224+
except Exception:
225+
pass
226+
227+
if not responsejson:
228+
return AnnotationSaveError(response, status_code=response.status_code)
229+
230+
if responsejson.get("error"):
231+
return AnnotationSaveError(responsejson['error'], status_code=response.status_code)
232+
233+
if responsejson.get("message"):
234+
return AnnotationSaveError(responsejson['message'], status_code=response.status_code)
235+
236+
return AnnotationSaveError(responsejson, status_code=response.status_code)

roboflow/core/exceptions.py

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

tests/test_project.py

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
import responses
22

33
from roboflow import API_URL
4+
from roboflow.adapters.rfapi import ImageUploadError, AnnotationSaveError
45
from roboflow.config import DEFAULT_BATCH_NAME
5-
from roboflow.core.exceptions import UploadAnnotationError, UploadImageError
66
from tests import PROJECT_NAME, ROBOFLOW_API_KEY, RoboflowTest
77

88

99
class TestProject(RoboflowTest):
1010
def test_check_valid_image_with_accepted_formats(self):
11-
# Mock dataset upload
12-
responses.add(
13-
responses.POST,
14-
f"{API_URL}/dataset/{PROJECT_NAME}/upload?api_key={ROBOFLOW_API_KEY}" f"&batch={DEFAULT_BATCH_NAME}",
15-
json={"duplicate": True, "id": "hbALkCFdNr9rssgOUXug"},
16-
status=200,
17-
)
18-
1911
images_to_test = [
2012
"rabbit.JPG",
2113
"rabbit2.jpg",
@@ -27,14 +19,6 @@ def test_check_valid_image_with_accepted_formats(self):
2719
self.assertTrue(self.project.check_valid_image(f"tests/images/{image}"))
2820

2921
def test_check_valid_image_with_unaccepted_formats(self):
30-
# Mock dataset upload
31-
responses.add(
32-
responses.POST,
33-
f"{API_URL}/dataset/{PROJECT_NAME}/upload?api_key={ROBOFLOW_API_KEY}" f"&batch={DEFAULT_BATCH_NAME}",
34-
json={"duplicate": True, "id": "hbALkCFdNr9rssgOUXug"},
35-
status=200,
36-
)
37-
3822
images_to_test = [
3923
"sky-rabbit.gif",
4024
"sky-rabbit.heic",
@@ -54,13 +38,13 @@ def test_upload_raises_upload_image_error_response_200(self):
5438
status=200,
5539
)
5640

57-
with self.assertRaises(UploadImageError) as error:
41+
with self.assertRaises(ImageUploadError) as error:
5842
self.project.upload(
5943
"tests/images/rabbit.JPG",
6044
annotation_path="tests/annotations/valid_annotation.json",
6145
)
6246

63-
self.assertEqual(str(error.exception), "Error uploading image: Invalid Image")
47+
self.assertEqual(str(error.exception), "Invalid Image")
6448

6549
def test_upload_raises_upload_image_error_response_400(self):
6650
responses.add(
@@ -73,13 +57,13 @@ def test_upload_raises_upload_image_error_response_400(self):
7357
status=400,
7458
)
7559

76-
with self.assertRaises(UploadImageError) as error:
60+
with self.assertRaises(ImageUploadError) as error:
7761
self.project.upload(
7862
"tests/images/rabbit.JPG",
7963
annotation_path="tests/annotations/valid_annotation.json",
8064
)
8165

82-
self.assertEqual(str(error.exception), "Error uploading image: Invalid Image")
66+
self.assertEqual(str(error.exception), "Invalid Image")
8367

8468
def test_upload_raises_upload_annotation_error(self):
8569
image_id = "hbALkCFdNr9rssgOUXug"
@@ -105,10 +89,10 @@ def test_upload_raises_upload_annotation_error(self):
10589
status=400,
10690
)
10791

108-
with self.assertRaises(UploadAnnotationError) as error:
92+
with self.assertRaises(AnnotationSaveError) as error:
10993
self.project.upload(
11094
"tests/images/rabbit.JPG",
11195
annotation_path=f"tests/annotations/{image_name}",
11296
)
11397

114-
self.assertEqual(str(error.exception), "Error uploading annotation: Image was already annotated.")
98+
self.assertEqual(str(error.exception), "Image was already annotated.")

0 commit comments

Comments
 (0)