@@ -139,6 +139,10 @@ def convert_value(value):
139139 error_502 = '502 Bad Gateway'
140140 if error_502 in response .text :
141141 raise labelbox .exceptions .InternalServerError (error_502 )
142+ if "upstream connect error or disconnect/reset before headers" \
143+ in response .text :
144+ raise labelbox .exceptions .InternalServerError (
145+ "Connection reset" )
142146 raise labelbox .exceptions .LabelboxError (
143147 "Failed to parse response as JSON: %s" % response .text )
144148
@@ -186,11 +190,27 @@ def check_errors(keywords, *path):
186190 if response_msg .startswith ("You have exceeded" ):
187191 raise labelbox .exceptions .ApiLimitError (response_msg )
188192
189- prisma_error = check_errors (["INTERNAL_SERVER_ERROR" ], "extensions" ,
190- "code" )
191- if prisma_error :
192- raise labelbox .exceptions .InternalServerError (
193- prisma_error ["message" ])
193+ resource_not_found_error = check_errors (["RESOURCE_NOT_FOUND" ],
194+ "extensions" , "exception" ,
195+ "code" )
196+ if resource_not_found_error is not None :
197+ # Return None and let the caller methods raise an exception
198+ # as they already know which resource type and ID was requested
199+ return None
200+
201+ # A lot of different error situations are now labeled serverside
202+ # as INTERNAL_SERVER_ERROR, when they are actually client errors.
203+ # TODO: fix this in the server API
204+ internal_server_error = check_errors (["INTERNAL_SERVER_ERROR" ],
205+ "extensions" , "code" )
206+ if internal_server_error is not None :
207+ message = internal_server_error .get ("message" )
208+
209+ if message .startswith ("Syntax Error" ):
210+ raise labelbox .exceptions .InvalidQueryError (message )
211+
212+ else :
213+ raise labelbox .exceptions .InternalServerError (message )
194214
195215 if len (errors ) > 0 :
196216 logger .warning ("Unparsed errors on query execution: %r" , errors )
@@ -297,7 +317,7 @@ def _get_single(self, db_object_type, uid):
297317 """
298318 query_str , params = query .get_single (db_object_type , uid )
299319 res = self .execute (query_str , params )
300- res = res [ utils .camel_case (db_object_type .type_name ())]
320+ res = res and res . get ( utils .camel_case (db_object_type .type_name ()))
301321 if res is None :
302322 raise labelbox .exceptions .ResourceNotFoundError (
303323 db_object_type , params )
0 commit comments