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
|
var resp: AsyncResponse
|
||||||
let body = pool.use(headers):
|
let body = pool.use(headers):
|
||||||
resp = await c.get($url)
|
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('['):
|
if body.startsWith('{') or body.startsWith('['):
|
||||||
result = parseJson(body)
|
result = parseJson(body)
|
||||||
|
@ -64,11 +66,13 @@ proc fetch*(url: Uri; oldApi=false): Future[JsonNode] {.async.} =
|
||||||
echo "fetch error: ", result.getError
|
echo "fetch error: ", result.getError
|
||||||
release(token, true)
|
release(token, true)
|
||||||
raise rateLimitError()
|
raise rateLimitError()
|
||||||
except ZippyError as e:
|
|
||||||
echo "decompression error: ", e.msg, ", url: ", url
|
if resp.status == $Http400:
|
||||||
raise newException(InternalError, "decompression failed: " & $url)
|
raise newException(InternalError, $url)
|
||||||
|
except InternalError as e:
|
||||||
|
raise e
|
||||||
except Exception as 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:
|
if "length" notin e.msg and "descriptor" notin e.msg:
|
||||||
release(token, true)
|
release(token, true)
|
||||||
raise rateLimitError()
|
raise rateLimitError()
|
||||||
|
|
|
@ -77,14 +77,16 @@ routes:
|
||||||
resp Http404, showError("Page not found", cfg)
|
resp Http404, showError("Page not found", cfg)
|
||||||
|
|
||||||
error InternalError:
|
error InternalError:
|
||||||
echo error.exc.msg
|
echo error.exc.name, ": ", error.exc.msg
|
||||||
const link = a("open a GitHub issue", href = issuesUrl)
|
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:
|
error RateLimitError:
|
||||||
echo error.exc.msg
|
echo error.exc.name, ": ", error.exc.msg
|
||||||
const link = a("another instance", href = instancesUrl)
|
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 unsupported, ""
|
||||||
extend preferences, ""
|
extend preferences, ""
|
||||||
|
|
Loading…
Reference in New Issue