Retry rate limited requests with different account
This commit is contained in:
		
							parent
							
								
									4250245263
								
							
						
					
					
						commit
						fcd74e8048
					
				
					 1 changed files with 28 additions and 18 deletions
				
			
		| 
						 | 
					@ -120,12 +120,21 @@ template fetchImpl(result, fetchBody) {.dirty.} =
 | 
				
			||||||
  except OSError as e:
 | 
					  except OSError as e:
 | 
				
			||||||
    raise e
 | 
					    raise e
 | 
				
			||||||
  except Exception as e:
 | 
					  except Exception as e:
 | 
				
			||||||
    echo "error: ", e.name, ", msg: ", e.msg, ", accountId: ", account.id, ", url: ", url
 | 
					    let id = if account.isNil: "null" else: account.id
 | 
				
			||||||
 | 
					    echo "error: ", e.name, ", msg: ", e.msg, ", accountId: ", id, ", url: ", url
 | 
				
			||||||
    raise rateLimitError()
 | 
					    raise rateLimitError()
 | 
				
			||||||
  finally:
 | 
					  finally:
 | 
				
			||||||
    release(account)
 | 
					    release(account)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template retry(bod) =
 | 
				
			||||||
 | 
					  try:
 | 
				
			||||||
 | 
					    bod
 | 
				
			||||||
 | 
					  except RateLimitError:
 | 
				
			||||||
 | 
					    echo "[accounts] Rate limited, retrying ", api, " request..."
 | 
				
			||||||
 | 
					    bod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
proc fetch*(url: Uri; api: Api): Future[JsonNode] {.async.} =
 | 
					proc fetch*(url: Uri; api: Api): Future[JsonNode] {.async.} =
 | 
				
			||||||
 | 
					  retry:
 | 
				
			||||||
    var body: string
 | 
					    var body: string
 | 
				
			||||||
    fetchImpl body:
 | 
					    fetchImpl body:
 | 
				
			||||||
      if body.startsWith('{') or body.startsWith('['):
 | 
					      if body.startsWith('{') or body.startsWith('['):
 | 
				
			||||||
| 
						 | 
					@ -141,6 +150,7 @@ proc fetch*(url: Uri; api: Api): Future[JsonNode] {.async.} =
 | 
				
			||||||
        raise rateLimitError()
 | 
					        raise rateLimitError()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
proc fetchRaw*(url: Uri; api: Api): Future[string] {.async.} =
 | 
					proc fetchRaw*(url: Uri; api: Api): Future[string] {.async.} =
 | 
				
			||||||
 | 
					  retry:
 | 
				
			||||||
    fetchImpl result:
 | 
					    fetchImpl result:
 | 
				
			||||||
      if not (result.startsWith('{') or result.startsWith('[')):
 | 
					      if not (result.startsWith('{') or result.startsWith('[')):
 | 
				
			||||||
        echo resp.status, ": ", result, " --- url: ", url
 | 
					        echo resp.status, ": ", result, " --- url: ", url
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue