|
17 | 17 | import requests
|
18 | 18 |
|
19 | 19 | from . import stone_serializers
|
20 |
| -from .auth import AuthError_validator |
| 20 | +from .auth import ( |
| 21 | + AuthError_validator, |
| 22 | + RateLimitError_validator, |
| 23 | +) |
21 | 24 | from .base import DropboxBase
|
22 | 25 | from .base_team import DropboxTeamBase
|
23 | 26 | from .exceptions import (
|
@@ -382,10 +385,18 @@ def request_json_string(self,
|
382 | 385 | AuthError_validator, r.json()['error'])
|
383 | 386 | raise AuthError(request_id, err)
|
384 | 387 | elif r.status_code == 429:
|
385 |
| - retry_after = r.headers.get('retry-after') |
386 |
| - if retry_after is not None: |
387 |
| - retry_after = int(retry_after) |
388 |
| - raise RateLimitError(request_id, retry_after) |
| 388 | + err = None |
| 389 | + if r.headers.get('content-type') == 'application/json': |
| 390 | + err = stone_serializers.json_compat_obj_decode( |
| 391 | + RateLimitError_validator, r.json()['error']) |
| 392 | + retry_after = err.retry_after |
| 393 | + else: |
| 394 | + retry_after_str = r.headers.get('retry-after') |
| 395 | + if retry_after_str is not None: |
| 396 | + retry_after = int(retry_after_str) |
| 397 | + else: |
| 398 | + retry_after = None |
| 399 | + raise RateLimitError(request_id, err, retry_after) |
389 | 400 | elif 200 <= r.status_code <= 299:
|
390 | 401 | if route_style == self._ROUTE_STYLE_DOWNLOAD:
|
391 | 402 | raw_resp = r.headers['dropbox-api-result']
|
|
0 commit comments