Skip to content

Commit 28a0164

Browse files
authored
Merge pull request #329 from Labelbox/grant/improve-error-handling
Improve error handling [DIAG-884]
2 parents 2069945 + d65acc0 commit 28a0164

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

labelbox/client.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def check_errors(keywords, *path):
201201
return None
202202

203203
def get_error_status_code(error):
204-
return error["extensions"]["exception"]["status"]
204+
return error["extensions"]["exception"].get("status")
205205

206206
if check_errors(["AUTHENTICATION_ERROR"], "extensions",
207207
"code") is not None:
@@ -242,6 +242,18 @@ def get_error_status_code(error):
242242
# as they already know which resource type and ID was requested
243243
return None
244244

245+
resource_conflict_error = check_errors(["RESOURCE_CONFLICT"],
246+
"extensions", "code")
247+
if resource_conflict_error is not None:
248+
raise labelbox.exceptions.ResourceConflict(
249+
resource_conflict_error["message"])
250+
251+
malformed_request_error = check_errors(["MALFORMED_REQUEST"],
252+
"extensions", "code")
253+
if malformed_request_error is not None:
254+
raise labelbox.exceptions.MalformedQueryException(
255+
malformed_request_error["message"])
256+
245257
# A lot of different error situations are now labeled serverside
246258
# as INTERNAL_SERVER_ERROR, when they are actually client errors.
247259
# TODO: fix this in the server API
@@ -263,8 +275,14 @@ def get_error_status_code(error):
263275

264276
if len(errors) > 0:
265277
logger.warning("Unparsed errors on query execution: %r", errors)
278+
messages = list(
279+
map(
280+
lambda x: {
281+
"message": x["message"],
282+
"code": x["extensions"]["code"]
283+
}, errors))
266284
raise labelbox.exceptions.LabelboxError("Unknown error: %s" %
267-
str(errors))
285+
str(messages))
268286

269287
# if we do return a proper error code, and didn't catch this above
270288
# reraise

labelbox/exceptions.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ def __init__(self, db_object_type, params):
4242
self.params = params
4343

4444

45+
class ResourceConflict(LabelboxError):
46+
"""Exception raised when a given resource conflicts with another. """
47+
pass
48+
49+
4550
class ValidationFailedError(LabelboxError):
4651
"""Exception raised for when a GraphQL query fails validation (query cost,
4752
etc.) E.g. a query that is too expensive, or depth is too deep.

0 commit comments

Comments
 (0)