Improve API error handling
This commit is contained in:
		
							parent
							
								
									6bcbe0ea9f
								
							
						
					
					
						commit
						99d3c46af5
					
				| 
						 | 
				
			
			@ -46,7 +46,9 @@ proc fetch*(url: Uri; oldApi=false): Future[JsonNode] {.async.} =
 | 
			
		|||
    var resp: AsyncResponse
 | 
			
		||||
    let body = pool.use(headers):
 | 
			
		||||
      resp = await c.get($url)
 | 
			
		||||
      uncompress(await resp.body)
 | 
			
		||||
      let raw = await resp.body
 | 
			
		||||
      if raw.len == 0: ""
 | 
			
		||||
      else: uncompress(raw)
 | 
			
		||||
 | 
			
		||||
    if body.startsWith('{') or body.startsWith('['):
 | 
			
		||||
      result = parseJson(body)
 | 
			
		||||
| 
						 | 
				
			
			@ -64,11 +66,13 @@ proc fetch*(url: Uri; oldApi=false): Future[JsonNode] {.async.} =
 | 
			
		|||
      echo "fetch error: ", result.getError
 | 
			
		||||
      release(token, true)
 | 
			
		||||
      raise rateLimitError()
 | 
			
		||||
  except ZippyError as e:
 | 
			
		||||
    echo "decompression error: ", e.msg, ", url: ", url
 | 
			
		||||
    raise newException(InternalError, "decompression failed: " & $url)
 | 
			
		||||
 | 
			
		||||
    if resp.status == $Http400:
 | 
			
		||||
      raise newException(InternalError, $url)
 | 
			
		||||
  except InternalError as e:
 | 
			
		||||
    raise e
 | 
			
		||||
  except Exception as e:
 | 
			
		||||
    echo "error: ", e.msg, ", token: ", token[], ", url: ", url
 | 
			
		||||
    echo "error: ", e.name, ", msg: ", e.msg, ", token: ", token[], ", url: ", url
 | 
			
		||||
    if "length" notin e.msg and "descriptor" notin e.msg:
 | 
			
		||||
      release(token, true)
 | 
			
		||||
    raise rateLimitError()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,14 +77,16 @@ routes:
 | 
			
		|||
    resp Http404, showError("Page not found", cfg)
 | 
			
		||||
 | 
			
		||||
  error InternalError:
 | 
			
		||||
    echo error.exc.msg
 | 
			
		||||
    echo error.exc.name, ": ", error.exc.msg
 | 
			
		||||
    const link = a("open a GitHub issue", href = issuesUrl)
 | 
			
		||||
    resp Http500, showError(&"An error occurred, please {link} with the URL you tried to visit.", cfg)
 | 
			
		||||
    resp Http500, showError(
 | 
			
		||||
      &"An error occurred, please {link} with the URL you tried to visit.", cfg)
 | 
			
		||||
 | 
			
		||||
  error RateLimitError:
 | 
			
		||||
    echo error.exc.msg
 | 
			
		||||
    echo error.exc.name, ": ", error.exc.msg
 | 
			
		||||
    const link = a("another instance", href = instancesUrl)
 | 
			
		||||
    resp Http429, showError(&"Instance has been rate limited.<br>Use {link} or try again later.", cfg)
 | 
			
		||||
    resp Http429, showError(
 | 
			
		||||
      &"Instance has been rate limited.<br>Use {link} or try again later.", cfg)
 | 
			
		||||
 | 
			
		||||
  extend unsupported, ""
 | 
			
		||||
  extend preferences, ""
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue