Initial, very basic, support for dealing with rate limits

This commit is contained in:
Bruce Marriner 2016-01-10 19:40:03 -06:00
parent 70d420f16b
commit 4bdb631758

View file

@ -88,7 +88,19 @@ func (s *Session) Request(method, urlStr string, data interface{}) (response []b
case 204: // No Content case 204: // No Content
// TODO check for 401 response, invalidate token if we get one. // TODO check for 401 response, invalidate token if we get one.
// TODO check for 429 response, rate-limit when we get one.
case 429: // TOO MANY REQUESTS - Rate limiting
// This will be changed to a more robust method later.
// which may be hugely different as this method could cause
// unending recursion
rl := RateLimit{}
err = json.Unmarshal(response, &rl)
if err != nil {
err = fmt.Errorf("Request unmarshal rate limit error : ", err)
return
}
time.Sleep(rl.RetryAfter)
response, err = s.Request(method, urlStr, data)
default: // Error condition default: // Error condition
err = fmt.Errorf("HTTP %s, %s", resp.Status, response) err = fmt.Errorf("HTTP %s, %s", resp.Status, response)